diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2011-05-29 12:41:14 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2011-05-29 12:41:14 +0000 |
commit | ea922c98d187eb74c31535afa3334ead5bd50526 (patch) | |
tree | 0add2892e10e4686e555ddf1d98c9110ebb4ba9f /Demos | |
parent | cc9b190919abbc567cd179b31afeef565efb1f17 (diff) | |
download | lufa-ea922c98d187eb74c31535afa3334ead5bd50526.tar.gz lufa-ea922c98d187eb74c31535afa3334ead5bd50526.tar.bz2 lufa-ea922c98d187eb74c31535afa3334ead5bd50526.zip |
Added new incomplete AudioInputHost Host LowLevel demo.
Added missing Audio class control request definitions.
Added support for the Audio class GET STATUS request so that it is correctly ACKed when sent by the host.
Diffstat (limited to 'Demos')
17 files changed, 9458 insertions, 0 deletions
diff --git a/Demos/Device/LowLevel/AudioInput/AudioInput.c b/Demos/Device/LowLevel/AudioInput/AudioInput.c index 7a5a0a6ea..f62fcbec5 100644 --- a/Demos/Device/LowLevel/AudioInput/AudioInput.c +++ b/Demos/Device/LowLevel/AudioInput/AudioInput.c @@ -143,6 +143,15 @@ void EVENT_USB_Device_ControlRequest(void) } break; + case AUDIO_REQ_GetStatus: + /* Get Status request can be directed at either the interface or endpoint, neither is currently used + * according to the latest USB Audio 1.0 standard, but must be ACKed with no data when requested */ + if ((USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) || + (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT))) + { + Endpoint_ClearSETUP(); + Endpoint_ClearStatusStage(); + } } } diff --git a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c index 93ca370a8..22cfac4d9 100644 --- a/Demos/Device/LowLevel/AudioOutput/AudioOutput.c +++ b/Demos/Device/LowLevel/AudioOutput/AudioOutput.c @@ -169,6 +169,15 @@ void EVENT_USB_Device_ControlRequest(void) } break; + case AUDIO_REQ_GetStatus: + /* Get Status request can be directed at either the interface or endpoint, neither is currently used + * according to the latest USB Audio 1.0 standard, but must be ACKed with no data when requested */ + if ((USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) || + (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT))) + { + Endpoint_ClearSETUP(); + Endpoint_ClearStatusStage(); + } } } diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.c b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.c new file mode 100644 index 000000000..7ac8f0015 --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.c @@ -0,0 +1,274 @@ +/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2011.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, distribute, and sell this
+ software and its documentation for any purpose is hereby granted
+ without fee, provided that the above copyright notice appear in
+ all copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaim all warranties with regard to this
+ software, including all implied warranties of merchantability
+ and fitness. In no event shall the author be liable for any
+ special, indirect or consequential damages or any damages
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+/** \file
+ *
+ * Main source file for the AudioInputHost demo. This file contains the main tasks of
+ * the demo and is responsible for the initial application hardware configuration.
+ */
+
+#include "AudioInputHost.h"
+
+/** Main program entry point. This routine configures the hardware required by the application, then
+ * enters a loop to run the application tasks in sequence.
+ */
+int main(void)
+{
+ SetupHardware();
+
+ puts_P(PSTR(ESC_FG_CYAN "Audio Host Demo running.\r\n" ESC_FG_WHITE));
+
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+ sei();
+
+ for (;;)
+ {
+ Audio_Task();
+ USB_USBTask();
+ }
+}
+
+/** Configures the board hardware and chip peripherals for the demo's functionality. */
+void SetupHardware(void)
+{
+ /* Disable watchdog if enabled by bootloader/fuses */
+ MCUSR &= ~(1 << WDRF);
+ wdt_disable();
+
+ /* Disable clock division */
+ clock_prescale_set(clock_div_1);
+
+ /* Hardware Initialization */
+ Serial_Init(9600, false);
+ LEDs_Init();
+ USB_Init();
+
+ /* Create a stdio stream for the serial port for stdin and stdout */
+ Serial_CreateStream(NULL);
+}
+
+/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and
+ * starts the library USB task to begin the enumeration and USB management process.
+ */
+void EVENT_USB_Host_DeviceAttached(void)
+{
+ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE));
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
+}
+
+/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and
+ * stops the library USB task management process.
+ */
+void EVENT_USB_Host_DeviceUnattached(void)
+{
+ puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE));
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+}
+
+/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully
+ * enumerated by the host and is now ready to be used by the application.
+ */
+void EVENT_USB_Host_DeviceEnumerationComplete(void)
+{
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);
+}
+
+/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */
+void EVENT_USB_Host_HostError(const uint8_t ErrorCode)
+{
+ USB_Disable();
+
+ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n"
+ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode);
+
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+ for(;;);
+}
+
+/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while
+ * enumerating an attached USB device.
+ */
+void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode,
+ const uint8_t SubErrorCode)
+{
+ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n"
+ " -- Error Code %d\r\n"
+ " -- Sub Error Code %d\r\n"
+ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState);
+
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+}
+
+void Audio_Task(void)
+{
+ uint8_t ErrorCode;
+
+ switch (USB_HostState)
+ {
+ case HOST_STATE_Addressed:
+ puts_P(PSTR("Getting Config Data.\r\n"));
+
+ /* Get and process the configuration descriptor data */
+ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead)
+ {
+ if (ErrorCode == ControlError)
+ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n"));
+ else
+ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n"));
+
+ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
+
+ /* Indicate error status */
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+
+ /* Wait until USB device disconnected */
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ break;
+ }
+
+ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+ {
+ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n"
+ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
+
+ /* Indicate error status */
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+
+ /* Wait until USB device disconnected */
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ break;
+ }
+
+ if ((ErrorCode = USB_Host_SetInterfaceAltSetting(StreamingInterfaceIndex,
+ StreamingInterfaceAltSetting)) != HOST_SENDCONTROL_Successful)
+ {
+ printf_P(PSTR(ESC_FG_RED "Could not set alternative streaming interface setting.\r\n"
+ " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
+
+ /* Indicate error status */
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+
+ /* Wait until USB device disconnected */
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ break;
+ }
+
+ USB_ControlRequest = (USB_Request_Header_t)
+ {
+ .bmRequestType = (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_ENDPOINT),
+ .bRequest = AUDIO_REQ_SetCurrent,
+ .wValue = 0x0100,
+ .wIndex = StreamingEndpointAddress,
+ .wLength = sizeof(USB_Audio_SampleFreq_t),
+ };
+
+ USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000);
+
+ /* Select the control pipe for the request transfer */
+ Pipe_SelectPipe(PIPE_CONTROLPIPE);
+
+ /* Set the sample rate on the streaming interface endpoint */
+ if ((ErrorCode = USB_Host_SendControlRequest(&SampleRate)) != HOST_SENDCONTROL_Successful)
+ {
+ /* Indicate error status */
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+
+ /* Wait until USB device disconnected */
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ break;
+ }
+
+ /* Sample reload timer initialization */
+ TIMSK0 = (1 << OCIE0A);
+ OCR0A = ((F_CPU / 8 / 8000) - 1);
+ TCCR0A = (1 << WGM01); // CTC mode
+ TCCR0B = (1 << CS01); // Fcpu/8 speed
+
+ /* Set speaker as output */
+ DDRC |= (1 << 6);
+
+ /* PWM speaker timer initialization */
+ TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
+ | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
+ TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, F_CPU speed
+
+ puts_P(PSTR("Microphone Enumerated.\r\n"));
+
+ USB_HostState = HOST_STATE_Configured;
+ break;
+ case HOST_STATE_Configured:
+ break;
+ }
+}
+
+/** ISR to handle the reloading of the PWM timer with the next sample. */
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)
+{
+ uint8_t PrevPipe = Pipe_GetCurrentPipe();
+
+ Pipe_SelectPipe(AUDIO_DATA_IN_PIPE);
+ Pipe_Unfreeze();
+
+ /* Check if the current pipe can be read from (contains a packet) and the device is sending data */
+ if (Pipe_IsINReceived())
+ {
+ /* Retrieve the signed 16-bit audio sample, convert to 8-bit */
+ int8_t Sample_8Bit = (Pipe_Read_16_LE() >> 8);
+
+ /* Check to see if the bank is now empty */
+ if (!(Pipe_IsReadWriteAllowed()))
+ {
+ /* Acknowledge the packet, clear the bank ready for the next packet */
+ Pipe_ClearIN();
+ }
+
+ /* Load the sample into the PWM timer channel */
+ OCR3A = (Sample_8Bit ^ (1 << 7));
+
+ uint8_t LEDMask = LEDS_NO_LEDS;
+
+ /* Turn on LEDs as the sample amplitude increases */
+ if (Sample_8Bit > 16)
+ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4);
+ else if (Sample_8Bit > 8)
+ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3);
+ else if (Sample_8Bit > 4)
+ LEDMask = (LEDS_LED1 | LEDS_LED2);
+ else if (Sample_8Bit > 2)
+ LEDMask = (LEDS_LED1);
+
+ LEDs_SetAllLEDs(LEDMask);
+ }
+
+ Pipe_Freeze();
+
+ Pipe_SelectPipe(PrevPipe);
+}
diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.eep b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.eep new file mode 100644 index 000000000..1996e8fde --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.eep @@ -0,0 +1 @@ +:00000001FF
diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.elf b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.elf Binary files differnew file mode 100644 index 000000000..a41d735eb --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.elf diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.h b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.h new file mode 100644 index 000000000..6a3b8502c --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.h @@ -0,0 +1,80 @@ +/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2011.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, distribute, and sell this
+ software and its documentation for any purpose is hereby granted
+ without fee, provided that the above copyright notice appear in
+ all copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaim all warranties with regard to this
+ software, including all implied warranties of merchantability
+ and fitness. In no event shall the author be liable for any
+ special, indirect or consequential damages or any damages
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+/** \file
+ *
+ * Header file for AudioHost.c.
+ */
+
+#ifndef _AUDIO_HOST_H_
+#define _AUDIO_HOST_H_
+
+ /* Includes: */
+ #include <avr/io.h>
+ #include <avr/wdt.h>
+ #include <avr/pgmspace.h>
+ #include <avr/power.h>
+ #include <avr/interrupt.h>
+ #include <stdio.h>
+
+ #include <LUFA/Version.h>
+ #include <LUFA/Drivers/Misc/TerminalCodes.h>
+ #include <LUFA/Drivers/USB/USB.h>
+ #include <LUFA/Drivers/Peripheral/Serial.h>
+ #include <LUFA/Drivers/Board/LEDs.h>
+
+ #include "ConfigDescriptor.h"
+
+ /* Macros: */
+ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
+ #define LEDMASK_USB_NOTREADY LEDS_LED1
+
+ /** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
+ #define LEDMASK_USB_ENUMERATING (LEDS_LED2 | LEDS_LED3)
+
+ /** LED mask for the library LED driver, to indicate that the USB interface is ready. */
+ #define LEDMASK_USB_READY (LEDS_LED2 | LEDS_LED4)
+
+ /** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
+ #define LEDMASK_USB_ERROR (LEDS_LED1 | LEDS_LED3)
+
+ /* Function Prototypes: */
+ void Audio_Task(void);
+ void SetupHardware(void);
+
+ void EVENT_USB_Host_HostError(const uint8_t ErrorCode);
+ void EVENT_USB_Host_DeviceAttached(void);
+ void EVENT_USB_Host_DeviceUnattached(void);
+ void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode,
+ const uint8_t SubErrorCode);
+ void EVENT_USB_Host_DeviceEnumerationComplete(void);
+
+#endif
+
diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.hex b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.hex new file mode 100644 index 000000000..2c962aabd --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.hex @@ -0,0 +1,403 @@ +:1000000051C100006DC100006BC1000069C100005A
+:1000100067C1000065C1000063C1000061C100004C
+:100020005FC100005DC10000D5C6000059C10000DD
+:1000300057C1000055C1000053C1000051C100006C
+:100040004FC100004DC100004BC1000049C100007C
+:1000500047C100008BC2000043C1000041C1000045
+:100060003FC100003DC100003BC1000039C100009C
+:1000700037C1000035C1000033C1000031C10000AC
+:100080002FC100002DC100002BC1000029C10000BC
+:1000900027C1000025C100004D6963726F70686F51
+:1000A0006E6520456E756D6572617465642E0D0A0E
+:1000B000001B5B33316D436F756C64206E6F742071
+:1000C00073657420616C7465726E61746976652005
+:1000D00073747265616D696E6720696E74657266AE
+:1000E0006163652073657474696E672E0D0A202D37
+:1000F0002D204572726F7220436F64653A2025642B
+:100100000D0A1B5B33376D001B5B33316D436F6E24
+:1001100074726F6C204572726F7220285365742060
+:10012000436F6E66696775726174696F6E292E0D13
+:100130000A202D2D204572726F7220436F64653A3C
+:100140002025640D0A1B5B33376D00202D2D2045C3
+:1001500072726F7220436F64653A2025640D0A1B2A
+:100160005B33376D001B5B33316D496E76616C69B3
+:1001700064204465766963652E0D0A001B5B33318C
+:100180006D436F6E74726F6C204572726F722028AF
+:1001900047657420436F6E66696775726174696F35
+:1001A0006E292E0D0A0047657474696E6720436FCF
+:1001B0006E66696720446174612E0D0A001B5B3313
+:1001C000316D44657620456E756D204572726F7293
+:1001D0000D0A202D2D204572726F7220436F6465C9
+:1001E0002025640D0A202D2D205375622045727242
+:1001F0006F7220436F64652025640D0A202D2D2029
+:10020000496E2053746174652025640D0A1B5B33AD
+:10021000376D001B5B33316D486F7374204D6F6415
+:1002200065204572726F720D0A202D2D2045727265
+:100230006F7220436F64652025640D0A1B5B3337A2
+:100240006D001B5B33326D44657669636520556EC6
+:1002500061747461636865642E0D0A1B5B33376DCE
+:10026000001B5B33326D44657669636520417474AD
+:1002700061636865642E0D0A1B5B33376D001B5B81
+:1002800033366D417564696F20486F73742044651F
+:100290006D6F2072756E6E696E672E0D0A1B5B3373
+:1002A000376D000011241FBECFEFD0E2DEBFCDBFFF
+:1002B00011E0A0E0B1E0EAEFF8E100E00BBF02C01E
+:1002C00007900D92AC31B107D9F711E0ACE1B1E084
+:1002D00001C01D92A034B107E1F73ED10C947B0C14
+:1002E0008FCE9BB19F70982B9BB9089584B7877F61
+:1002F00084BF28E10FB6F89420936000109260004C
+:100300000FBE90E080E80FB6F89480936100909360
+:1003100061000FBE83E390E09093CD008093CC000A
+:1003200086E08093CA001092C8002093C900539AB7
+:100330005A9A8AB1806F8AB98BB18F708BB934D5D4
+:10034000ECE2F1E0F0933B01E0933A01F0933D01E0
+:10035000E0933C018EE0DF011D928A95E9F783E08E
+:1003600080932F0185E699E09093350180933401C5
+:100370008EE699E09093370180933601089581E6E7
+:1003800092E0DED780EAADCF82E492E0D9D780E177
+:10039000A8CF80E6A6CFDF93CF930F92CDB7DEB77D
+:1003A00089839CD400D000D0EDB7FEB7319623E10D
+:1003B00032E0ADB7BEB712963C932E931197898168
+:1003C000828313829ED70F900F900F900F9080E939
+:1003D00088DFFFCF90912B012DB73EB728503040DA
+:1003E0000FB6F8943EBF0FBE2DBFEDB7FEB73196E6
+:1003F0002DEB31E0ADB7BEB712963C932E9311971B
+:100400008283138264831582968317827AD72DB7ED
+:100410003EB7285F3F4F0FB6F8943EBF0FBE2DBFCB
+:1004200080E95FCF1F93DF93CF9300D00F92CDB7BA
+:10043000DEB780912B018B3009F087C086EA91E00E
+:100440007FD730D1182F8823E9F0813019F48CE759
+:1004500091E002C085E691E073D700D000D0EDB7FF
+:10046000FEB731962BE431E0ADB7BEB712963C93A0
+:100470002E9311971283138244D70F900F900F90F1
+:100480000F904AC081E082D3882341F000D000D091
+:10049000EDB7FEB7319628E031E00EC080911C0127
+:1004A00060911D0189D3882379F000D000D0EDB789
+:1004B000FEB7319621EB30E0ADB7BEB712963C9354
+:1004C0002E9311978283D7CF20911E0182E28093D1
+:1004D000230181E08093240180E091E09093260144
+:1004E00080932501209327011092280183E090E05A
+:1004F00090932A0180932901DE011196E0E0F1E05A
+:1005000083E001900D928150E1F71092A700CE0197
+:100510000196B7D5882329F080E9E3DE10922B01FC
+:1005200014C082E080936E009CE797BD84BD85BDBA
+:100530003E9A81EF8093900089E08093910088E952
+:1005400090E0FED68CE080932B010F900F900F90DF
+:10055000CF91DF911F910895C9DE8EE792E0F0D62A
+:1005600080E1BFDE78945EDFA2D6FDCF1F920F92AE
+:100570000FB60F920BB60F9211241F932F933F9338
+:100580004F935F936F937F938F939F93AF93BF939B
+:10059000EF93FF931091A700177081E08093A7005D
+:1005A0008091A9008F7B8093A9008091A60080FF95
+:1005B0002BC08091AF004091AF008091A60085FDD7
+:1005C00005C08091A6008E778093A600842F99277E
+:1005D00087FD909520E830E082279327909399003B
+:1005E00080939800413144F4493044F4453044F458
+:1005F000433044F480E007C080EF05C080EB03C0C7
+:1006000080E301C080E16DDE8091A9008064809369
+:10061000A9001093A700FF91EF91BF91AF919F9117
+:100620008F917F916F915F914F913F912F911F918A
+:100630000F900BBE0F900FBE0F901F901895FC01EE
+:100640008181843049F48581813031F48681813023
+:1006500019F48781882311F082E0089580E00895DD
+:10066000FC018181843049F48581813031F48681B7
+:10067000823019F48781882311F082E0089580E0A8
+:100680000895FC018181853029F483818370813054
+:1006900019F404C0843021F082E0089580E00895C8
+:1006A00081E00895AF92BF92CF92DF92EF92FF92D6
+:1006B0000F931F93DF93CF93CDB7DEB7C450D240D3
+:1006C0000FB6F894DEBF0FBECDBFAE014B5F5F4FDC
+:1006D0005A83498323E0E22EF12CEC0EFD1E81E0CB
+:1006E000B70120E032E009D4853009F45CC08630DF
+:1006F00061F0882361F400E010E0CC24DD24570190
+:100700007E010894E11CF11C07C083E04FC081E02A
+:100710004DC09C01032F182FC114D10441F0C50115
+:10072000B70141E453E040D4882351F41CC0C50113
+:10073000B7014FE153E038D48823B9F5C980DA8096
+:10074000C501B70140E353E02FD4882349F0C50128
+:10075000B7014FE153E028D4882339F5C980DA8006
+:1007600009811A8135C0E981FA81828187FF30C011
+:10077000902F812F309769F2D80112968C911297A1
+:1007800080931C0113968C9180931D0122812093EC
+:100790001E010481158181E061E040E194E0E92ED1
+:1007A00022D280E003C082E001C084E0CC5FDD4F54
+:1007B0000FB6F894DEBF0FBECDBFCF91DF911F9172
+:1007C0000F91FF90EF90DF90CF90BF90AF90089582
+:1007D000902F812F9ECF80919E0090E0817090702D
+:1007E0002091A0002D7F2093A00020919E002260E8
+:1007F00020939E0020919E0021FDFCCF20919E0021
+:10080000216020939E002091A00030E02072307083
+:100810004091A0004F7D4093A00040919F004F7DEC
+:1008200040939F004AE050919F0055FF0BC04091BC
+:100830009F004F7D40939F0040919F004D7F4093CC
+:100840009F0008C0EFECF7E03197F1F700C000001F
+:10085000415049F72115310529F02091A00020626F
+:100860002093A000009729F480919E008E7F8093B2
+:100870009E008091A00082608093A0000895409126
+:100880009E0050E0417050702091A00030E0207236
+:1008900030709091A0009F7D9093A00090919F0058
+:1008A0009F7D90939F0090919E00916090939E00F9
+:1008B00026C090919F0095FF06C090919F009F7D5C
+:1008C00090939F00815090912B019230D9F090919C
+:1008D000A60094FF09C01092F5008091A6008F7EBB
+:1008E0008093A60082E00FC09091A60091FF07C000
+:1008F0008091A6008D7F8093A60083E004C08823AA
+:10090000C1F601C081E04115510529F490919E0086
+:100910009E7F90939E002115310529F09091A000B3
+:1009200090629093A0000895EF920F931F93DF932E
+:10093000CF93CDB7DEB728970FB6F894DEBF0FBEC2
+:10094000CDBF80912B01863009F499C0873070F4B7
+:100950008330C9F1843020F4813009F00BC113C019
+:100960008430C9F1853009F005C160C0883009F4D0
+:10097000A0C0883008F48FC0893009F4B9C08A302B
+:1009800009F0F8C0DEC0009120011091210101158D
+:10099000110509F4EFC081E072DF682F882331F080
+:1009A00080911F0180932B0181E0E0C00150104035
+:1009B00010932101009320010115110509F0DAC0FF
+:1009C00080911F01C3C088EE93E090932101809332
+:1009D000200184E0BBC080912001909121019C0105
+:1009E000215030403093210120932001009739F0AD
+:1009F0008FEC97E00197F1F700C00000BBC077983B
+:100A00008091D80080618093D8008091DD008B7F39
+:100A10008093DD008091D70080618093D700809122
+:100A2000DD0082608093DD0085E090C080919F00B2
+:100A300080FFA0C080919F008E7F80939F00809157
+:100A40009F008D7F80939F008091DF008D7F80933A
+:100A5000DF008091DE0082608093DE0080919E0046
+:100A6000816080939E0026D181E080932B0184E6F3
+:100A700090E0909321018093200186E05FC0ABDE7F
+:100A800081E080932B0188EC90E09093210180938A
+:100A9000200187E053C080E060E040E020E000E417
+:100AA00010E0EE24A0D08091AC0087FF5BC088E00E
+:100AB0004DC0A3E2B1E0E3E1F1E088E001900D92E6
+:100AC0008150E1F7CE010196DCD2682F882309F02E
+:100AD0004CC0888580931B017EDE81E080932B01D2
+:100AE00088EC90E0909321018093200189E026C05A
+:100AF00000911B0180E060E040E020E010E0EE2487
+:100B000072D08091AC0087FF2DC0A3E2B1E0EBE092
+:100B1000F1E088E001900D928150E1F780E090E0F3
+:100B2000B0D2682F882309F581E080932B0184E6F9
+:100B300090E090932101809320018AE080931F012F
+:100B400019C081E08093A10024DC8BE080932B010D
+:100B500011C040DC8091DD0081608093DD0014DCF9
+:100B6000D5D008C060E084E001C083E090912B0103
+:100B7000923079F728960FB6F894DEBF0FBECDBF3E
+:100B8000CF91DF911F910F91EF9008951092230163
+:100B900099E09093240180932501109226011092F0
+:100BA00028011092270110922A0110922901109217
+:100BB000A70080E090E065C2E3E2F1E091E090936D
+:100BC00023019BE09093240160932501138280937D
+:100BD0002701158210922A01109229011092A70074
+:100BE00080E090E04EC2EF920F931F935E2D6295CE
+:100BF000660F660F607C642B2F70622B982F5260FB
+:100C00004DC09093A7009817B1F428E030E040E081
+:100C100003C04F5F220F331F2017310710F44530F8
+:100C2000C1F7242F2295207F252BA62F40E070E0CE
+:100C3000E1E2F0E00CC0A091AA002091AB00F0919D
+:100C4000AD00E091A9007091A5004091AE003091F7
+:100C5000A90030623093A90021FF1FC03091A90084
+:100C60003E7F3093A9003091AB0032703093AB00DF
+:100C70003091A90031603093A900A093AA0020937D
+:100C8000AB00F093AD00E093A9007093A5004093F2
+:100C9000AE002091AC0027FF08C09F5F973008F49A
+:100CA000B0CF8093A70081E001C080E01F910F9139
+:100CB000EF9008951092F80080E08093A7001092C2
+:100CC000AE001092A6001092AB009091A9009E7FFA
+:100CD0009093A9008F5F873081F708956ED075D00B
+:100CE000E0EEF0E0808181608083E8EDF0E08081DB
+:100CF0008F77808319BCA7EDB0E08C918E7F8C93A9
+:100D000080818F7E808310922201089556D05DD01D
+:100D10008091D800982F9F779093D8008068809317
+:100D2000D8008091D8008F7D8093D8008091D70023
+:100D30008F778093D7008CE089BD89B5826089BDAB
+:100D400009B400FEFDCF82E080932B0180E4809304
+:100D50001B018091D80080648093D8008091DD00D1
+:100D600081608093DD008091DD0084608093DD00F0
+:100D70008091D7008F7E8093D7006F9A779A809169
+:100D8000DE0081608093DE008091DE0084608093CD
+:100D9000DE008091E0008E7F8093E0008091D8009B
+:100DA00080618093D8000895E7EDF0E08081816054
+:100DB000808381E080932201A9CFE8EDF0E080817B
+:100DC0008C7F80831092A00008951092DA00109218
+:100DD0009F0008951F920F920FB60F920BB60F92BD
+:100DE00011242F933F934F935F936F937F938F9330
+:100DF0009F93AF93BF93EF93FF9380919F0085FFE5
+:100E00000AC08091A00085FF06C080919F008F7D61
+:100E100080939F000CD180919F0081FF15C080912D
+:100E2000A00081FF11C080919F008D7F80939F0063
+:100E300080919F008E7F80939F008091A0008D7F86
+:100E40008093A000A1DA62DF8091DF0081FF15C0EE
+:100E50008091DE0081FF11C08091DF008D7F809343
+:100E6000DF0077988091DD0081608093DD0080E075
+:100E700092DA8ADA82E080932B018091DF0080FF92
+:100E800017C08091DE0080FF13C08091DF008E7F4D
+:100E90008093DF008091DE008E7F8093DE006FDA2A
+:100EA0008091A00082608093A00083E080932B015A
+:100EB0008091DF0082FF0EC08091DE0082FF0AC0B9
+:100EC0008091DF008B7F8093DF0082E060E082DA38
+:100ED0005BDA1CDFFF91EF91BF91AF919F918F91F2
+:100EE0007F916F915F914F913F912F910F900BBE2A
+:100EF0000F900FBE0F901F901895CF92DF92EF9238
+:100F0000FF920F931F93DF93CF93CDB7DEB729974F
+:100F10000FB6F894DEBF0FBECDBF6B018A01790119
+:100F200090E89093230196E09093240190E001973C
+:100F300092609093260180932501109228011092CF
+:100F4000270189E090E090932A0180932901109273
+:100F5000A700CE01019695D08823B9F48B819C819E
+:100F6000F60191838083E816F90670F090932A01C8
+:100F700080932901C80185D0882339F4F801918133
+:100F8000923019F086E001C085E029960FB6F894FA
+:100F9000DEBF0FBECDBFCF91DF911F910F91FF90AC
+:100FA000EF90DF90CF900895AF92BF92CF92DF92F3
+:100FB000EF92FF920F931F93CF93DF938C01EB017E
+:100FC0006A0123C0E881F9815F01208130E0C70117
+:100FD0002E153F0508F4C901E80FF91FF983E883CE
+:100FE000F80120813181281B390B318320838881CE
+:100FF0009981F6010995823041F0813069F4A88227
+:10100000B982F801F182E08207C0F801E080F18046
+:10101000E114F104B9F682E0DF91CF911F910F91B5
+:10102000FF90EF90DF90CF90BF90AF90089508951C
+:101030001F93CF93DF93182FC8EED3E007C081E052
+:101040001EDC8823D1F42097B9F02197112329F4CD
+:101050008091A60083FFF3CF0DC0113029F4809159
+:10106000A60080FFECCF06C0123049F78091A600A1
+:1010700082FFE5CF80E001C084E0DF91CF911F9136
+:101080000895EF92FF920F931F93CF93DF938C01FC
+:10109000E0909E00FF2481E0E822FF24C091290116
+:1010A000D0912A0180919E00816080939E0081E012
+:1010B000E6DB882309F0E2C08091AA008F7C809350
+:1010C000AA001092F5008091A6008F7E8093A60062
+:1010D0008091A9008F7B8093A90080912301809348
+:1010E000AF00809124018093AF0090912501809101
+:1010F00026019093AF008093AF00909127018091DB
+:1011000028019093AF008093AF00909129018091C6
+:101110002A019093AF008093AF008091A60087775B
+:101120008093A60080E084DF882309F0A7C0809127
+:10113000A90080648093A90081E0A1DB882309F0E5
+:101140009DC08091230187FF4FC08091AA008F7CB2
+:1011500080618093AA000115110561F52DC0809171
+:10116000A9008F7B8093A90081E062DF882309F0CA
+:1011700085C08091F6009091F700009749F4C0E097
+:10118000D0E006C08091AF00F80181938F012197D4
+:101190008091F6009091F700009711F0209791F759
+:1011A0008091A90080648093A9008091A6008E7729
+:1011B0008093A600209799F68091AA008F7C806288
+:1011C0008093AA008091A9008F7B8093A90082E080
+:1011D0002FDF882309F052C08091A6008B7780937F
+:1011E000A60082E025DF4AC00115110599F1809122
+:1011F000AA008F7C80628093AA008091A9008F7BD7
+:101200008093A9001CC082E013DF8823B9F5F801A0
+:1012100006C081918F018093AF00219759F08F0113
+:101220002091F6003091F70080911B0190E0281783
+:10123000390778F38091A6008B778093A6002097DA
+:1012400011F782E0F5DE8823C9F48091A90080645B
+:101250008093A9008091AA008F7C80618093AA006E
+:101260008091A9008F7B8093A90081E0E1DE882333
+:1012700029F49091A6009E779093A6009091A900E2
+:1012800090649093A900E114F10429F490919E00D8
+:101290009E7F90939E0091E09093A8001092A800EA
+:1012A000DF91CF911F910F91FF90EF9008951F93C1
+:1012B000CF93DF93C7EAD0E018811770188234DB30
+:1012C0001883DF91CF911F9108959091C80095FFE9
+:1012D000FCCF8093CE0080E090E008958091C8001C
+:1012E00087FF08C08091C80087FF07C02091CE000B
+:1012F00030E005C02EEF3FEF02C02FEF3FEFC901F6
+:101300000895DF93CF93CDB7DEB7FE013596619197
+:10131000719180913C0190913D01DC0113962C91DB
+:101320001397286013962C93AF0142D0E0913C01B3
+:10133000F0913D012381277F2383CF91DF91089591
+:10134000EF92FF920F931F93CF93DF938C01E09165
+:101350003C01F0913D01838181FF20C0C0E0D0E0DD
+:101360000CC0DB011896ED91FC9119970995009737
+:1013700011F0CFEFDFEF0F5F1F4FF8018491609105
+:101380003C0170913D01882361F7DB011896ED91D6
+:10139000FC9119978AE00995009711F0CFEFDFEFE4
+:1013A000CE01DF91CF911F910F91FF90EF900895A3
+:1013B0002F923F924F925F926F927F928F929F9265
+:1013C000AF92BF92CF92DF92EF92FF920F931F9353
+:1013D000DF93CF93CDB7DEB72C970FB6F894DEBF6F
+:1013E0000FBECDBF6C011B018A01FC011782168262
+:1013F000838181FFC4C12E010894411C511CF60158
+:101400009381F10193FD859193FF81911F018823C1
+:1014100009F4B1C1853239F493FD859193FF81912F
+:101420001F01853221F490E0B601DBD1E8CFEE2434
+:10143000FF2420E02032B0F48B3269F08C3228F4A3
+:10144000803251F0833271F40BC08D3239F0803329
+:1014500049F421602CC02260246029C0286027C084
+:10146000206125C027FD2CC0382F30533A3098F426
+:1014700026FF08C08E2D880FE82EEE0CEE0CE80E2D
+:10148000E30E15C08F2D880FF82EFF0CFF0CF80E01
+:10149000F30E20620CC08E3221F426FD6CC1206454
+:1014A00006C08C3611F4206802C0883649F4F10178
+:1014B00093FD859193FF81911F01882309F0BACF95
+:1014C000982F9554933018F09052933028F40C5F75
+:1014D0001F4FFFE3F9830DC0833631F0833771F07E
+:1014E000833509F05CC021C0F801808189830E5FDB
+:1014F0001F4F420171E0A72EB12C15C062E0662E8D
+:10150000712C600E711EF8018080918026FF03C04F
+:101510006E2D70E002C06FEF7FEFC4012C8756D1B3
+:101520005C0183012C852F7716C052E0652E712C4B
+:10153000600E711EF8018080918026FF03C06E2D21
+:1015400070E002C06FEF7FEFC4012C8734D15C01E3
+:101550002C852068830123FD1EC007C080E290E037
+:10156000B6012C873ED1FA942C858F2D90E0A816D9
+:10157000B906A0F310C0F40127FD859127FF8191E2
+:101580004F0190E0B6012C872CD12C85F110FA94F4
+:101590000894A108B108A114B10469F7E9C0843620
+:1015A00011F0893641F527FF08C0F801608171818B
+:1015B000828193810C5F1F4F09C0F80160817181A6
+:1015C000882777FD8095982F0E5F1F4F4FE6B42E2A
+:1015D000B22297FF09C090958095709561957F4FD5
+:1015E0008F4F9F4FF0E8BF2AA2012AE030E025D1BB
+:1015F000782E741844C0853731F43FEEB32EB222F2
+:101600002AE030E025C099EFB92EB2228F36C1F022
+:10161000803720F4883509F0AEC00DC0803721F046
+:10162000883709F0A8C002C020E1B22AB4FE0BC07E
+:1016300084E0B82A08C0B4FE09C0E6E0BE2A06C0AD
+:1016400028E030E005C020E130E002C020E132E0D7
+:10165000B7FE08C0F80160817181828193810C5FBF
+:101660001F4F07C0F8016081718180E090E00E5F3C
+:101670001F4FA201E2D0782E7418FFE7BF22B6FEFA
+:101680000BC02EEFB2227E1438F4B4FE07C0B2FCB9
+:1016900005C08FEEB82202C0A72C01C0AE2C8B2D46
+:1016A00090E0B4FE0DC0FE01E70DF11D2081203356
+:1016B00019F4E9EEBE2209C0A394B2FE06C004C02C
+:1016C00086789070009709F0A3948B2C9924B3FC32
+:1016D00013C0B0FE0EC0AF1428F4E72CEF0CEA18CC
+:1016E000AF2C07C0E72C05C080E290E0B60179D0AE
+:1016F000A394AF14C8F304C0AF1410F4FA1801C0D7
+:10170000FF2484FE0EC080E390E0B6016AD082FE22
+:101710001DC081FE03C088E590E010C088E790E01E
+:101720000DC0C40186789070009781F081FC02C0E2
+:1017300080E201C08BE2B7FC8DE290E0B60151D0AF
+:1017400005C080E390E0B6014CD0EA947E14C8F363
+:101750007A94F201E70DF11D808190E0B60141D04D
+:101760007720B1F705C080E290E0B6013AD0FA9454
+:10177000FF20C9F744CEF6012681378102C02FEF42
+:101780003FEFC9012C960FB6F894DEBF0FBECDBF58
+:10179000CF91DF911F910F91FF90EF90DF90CF904D
+:1017A000BF90AF909F908F907F906F905F904F9081
+:1017B0003F902F900895FC010590615070400110FA
+:1017C000D8F7809590958E0F9F1F0895FC0161506A
+:1017D000704001900110D8F7809590958E0F9F1F53
+:1017E00008950F931F93CF93DF938C01EB018B81AF
+:1017F00081FF1BC082FF0DC02E813F818C819D81A6
+:101800002817390764F4E881F9810193F983E883A3
+:1018100006C0E885F985802F0995009731F48E81FF
+:101820009F8101969F838E8302C00FEF1FEFC80137
+:10183000DF91CF911F910F910895FA01AA272830C7
+:1018400051F1203181F1E8946F936E7F6E5F7F4F8D
+:101850008F4F9F4FAF4FB1E03ED0B4E03CD0670F09
+:10186000781F891F9A1FA11D680F791F8A1F911D5C
+:10187000A11D6A0F711D811D911DA11D20D009F4AC
+:1018800068943F912AE0269F11243019305D3193EE
+:10189000DEF6CF010895462F4770405D4193B3E0D7
+:1018A0000FD0C9F7F6CF462F4F70405D4A3318F07E
+:1018B000495D31FD4052419302D0A9F7EACFB4E02F
+:1018C000A6959795879577956795BA95C9F70097E7
+:1018D0006105710508959B01AC010A2E0694579588
+:1018E000479537952795BA95C9F7620F731F841FDF
+:0A18F000951FA01D0895F894FFCF86
+:1018FA0080BB008006000100001200000501000004
+:0C190A0000000080060001000008004002
+:00000001FF
diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.lss b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.lss new file mode 100644 index 000000000..152917403 --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.lss @@ -0,0 +1,5024 @@ +
+AudioInputHost.elf: file format elf32-avr
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 .data 0000001c 00800100 000018fa 0000198e 2**0
+ CONTENTS, ALLOC, LOAD, DATA
+ 1 .text 000018fa 00000000 00000000 00000094 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 2 .bss 00000024 0080011c 0080011c 000019aa 2**0
+ ALLOC
+ 3 .stab 00000e28 00000000 00000000 000019ac 2**2
+ CONTENTS, READONLY, DEBUGGING
+ 4 .stabstr 0000026b 00000000 00000000 000027d4 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 5 .debug_aranges 000003b0 00000000 00000000 00002a3f 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 6 .debug_pubnames 0000089a 00000000 00000000 00002def 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 7 .debug_info 000056c7 00000000 00000000 00003689 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 8 .debug_abbrev 00001b65 00000000 00000000 00008d50 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 9 .debug_line 000053bf 00000000 00000000 0000a8b5 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 10 .debug_frame 00000540 00000000 00000000 0000fc74 2**2
+ CONTENTS, READONLY, DEBUGGING
+ 11 .debug_str 000026bf 00000000 00000000 000101b4 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 12 .debug_loc 00003422 00000000 00000000 00012873 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 13 .debug_pubtypes 00000a86 00000000 00000000 00015c95 2**0
+ CONTENTS, READONLY, DEBUGGING
+ 14 .debug_ranges 00000490 00000000 00000000 0001671b 2**0
+ CONTENTS, READONLY, DEBUGGING
+
+Disassembly of section .text:
+
+00000000 <__vectors>:
+ 0: 51 c1 rjmp .+674 ; 0x2a4 <__ctors_end>
+ 2: 00 00 nop
+ 4: 6d c1 rjmp .+730 ; 0x2e0 <__bad_interrupt>
+ 6: 00 00 nop
+ 8: 6b c1 rjmp .+726 ; 0x2e0 <__bad_interrupt>
+ a: 00 00 nop
+ c: 69 c1 rjmp .+722 ; 0x2e0 <__bad_interrupt>
+ e: 00 00 nop
+ 10: 67 c1 rjmp .+718 ; 0x2e0 <__bad_interrupt>
+ 12: 00 00 nop
+ 14: 65 c1 rjmp .+714 ; 0x2e0 <__bad_interrupt>
+ 16: 00 00 nop
+ 18: 63 c1 rjmp .+710 ; 0x2e0 <__bad_interrupt>
+ 1a: 00 00 nop
+ 1c: 61 c1 rjmp .+706 ; 0x2e0 <__bad_interrupt>
+ 1e: 00 00 nop
+ 20: 5f c1 rjmp .+702 ; 0x2e0 <__bad_interrupt>
+ 22: 00 00 nop
+ 24: 5d c1 rjmp .+698 ; 0x2e0 <__bad_interrupt>
+ 26: 00 00 nop
+ 28: d5 c6 rjmp .+3498 ; 0xdd4 <__vector_10>
+ 2a: 00 00 nop
+ 2c: 59 c1 rjmp .+690 ; 0x2e0 <__bad_interrupt>
+ 2e: 00 00 nop
+ 30: 57 c1 rjmp .+686 ; 0x2e0 <__bad_interrupt>
+ 32: 00 00 nop
+ 34: 55 c1 rjmp .+682 ; 0x2e0 <__bad_interrupt>
+ 36: 00 00 nop
+ 38: 53 c1 rjmp .+678 ; 0x2e0 <__bad_interrupt>
+ 3a: 00 00 nop
+ 3c: 51 c1 rjmp .+674 ; 0x2e0 <__bad_interrupt>
+ 3e: 00 00 nop
+ 40: 4f c1 rjmp .+670 ; 0x2e0 <__bad_interrupt>
+ 42: 00 00 nop
+ 44: 4d c1 rjmp .+666 ; 0x2e0 <__bad_interrupt>
+ 46: 00 00 nop
+ 48: 4b c1 rjmp .+662 ; 0x2e0 <__bad_interrupt>
+ 4a: 00 00 nop
+ 4c: 49 c1 rjmp .+658 ; 0x2e0 <__bad_interrupt>
+ 4e: 00 00 nop
+ 50: 47 c1 rjmp .+654 ; 0x2e0 <__bad_interrupt>
+ 52: 00 00 nop
+ 54: 8b c2 rjmp .+1302 ; 0x56c <__vector_21>
+ 56: 00 00 nop
+ 58: 43 c1 rjmp .+646 ; 0x2e0 <__bad_interrupt>
+ 5a: 00 00 nop
+ 5c: 41 c1 rjmp .+642 ; 0x2e0 <__bad_interrupt>
+ 5e: 00 00 nop
+ 60: 3f c1 rjmp .+638 ; 0x2e0 <__bad_interrupt>
+ 62: 00 00 nop
+ 64: 3d c1 rjmp .+634 ; 0x2e0 <__bad_interrupt>
+ 66: 00 00 nop
+ 68: 3b c1 rjmp .+630 ; 0x2e0 <__bad_interrupt>
+ 6a: 00 00 nop
+ 6c: 39 c1 rjmp .+626 ; 0x2e0 <__bad_interrupt>
+ 6e: 00 00 nop
+ 70: 37 c1 rjmp .+622 ; 0x2e0 <__bad_interrupt>
+ 72: 00 00 nop
+ 74: 35 c1 rjmp .+618 ; 0x2e0 <__bad_interrupt>
+ 76: 00 00 nop
+ 78: 33 c1 rjmp .+614 ; 0x2e0 <__bad_interrupt>
+ 7a: 00 00 nop
+ 7c: 31 c1 rjmp .+610 ; 0x2e0 <__bad_interrupt>
+ 7e: 00 00 nop
+ 80: 2f c1 rjmp .+606 ; 0x2e0 <__bad_interrupt>
+ 82: 00 00 nop
+ 84: 2d c1 rjmp .+602 ; 0x2e0 <__bad_interrupt>
+ 86: 00 00 nop
+ 88: 2b c1 rjmp .+598 ; 0x2e0 <__bad_interrupt>
+ 8a: 00 00 nop
+ 8c: 29 c1 rjmp .+594 ; 0x2e0 <__bad_interrupt>
+ 8e: 00 00 nop
+ 90: 27 c1 rjmp .+590 ; 0x2e0 <__bad_interrupt>
+ 92: 00 00 nop
+ 94: 25 c1 rjmp .+586 ; 0x2e0 <__bad_interrupt>
+ 96: 00 00 nop
+
+00000098 <__c.3939>:
+ 98: 4d 69 63 72 6f 70 68 6f 6e 65 20 45 6e 75 6d 65 Microphone Enume
+ a8: 72 61 74 65 64 2e 0d 0a 00 rated....
+
+000000b1 <__c.3935>:
+ b1: 1b 5b 33 31 6d 43 6f 75 6c 64 20 6e 6f 74 20 73 .[31mCould not s
+ c1: 65 74 20 61 6c 74 65 72 6e 61 74 69 76 65 20 73 et alternative s
+ d1: 74 72 65 61 6d 69 6e 67 20 69 6e 74 65 72 66 61 treaming interfa
+ e1: 63 65 20 73 65 74 74 69 6e 67 2e 0d 0a 20 2d 2d ce setting... --
+ f1: 20 45 72 72 6f 72 20 43 6f 64 65 3a 20 25 64 0d Error Code: %d.
+ 101: 0a 1b 5b 33 37 6d 00 ..[37m.
+
+00000108 <__c.3933>:
+ 108: 1b 5b 33 31 6d 43 6f 6e 74 72 6f 6c 20 45 72 72 .[31mControl Err
+ 118: 6f 72 20 28 53 65 74 20 43 6f 6e 66 69 67 75 72 or (Set Configur
+ 128: 61 74 69 6f 6e 29 2e 0d 0a 20 2d 2d 20 45 72 72 ation)... -- Err
+ 138: 6f 72 20 43 6f 64 65 3a 20 25 64 0d 0a 1b 5b 33 or Code: %d...[3
+ 148: 37 6d 00 7m.
+
+0000014b <__c.3930>:
+ 14b: 20 2d 2d 20 45 72 72 6f 72 20 43 6f 64 65 3a 20 -- Error Code:
+ 15b: 25 64 0d 0a 1b 5b 33 37 6d 00 %d...[37m.
+
+00000165 <__c.3928>:
+ 165: 1b 5b 33 31 6d 49 6e 76 61 6c 69 64 20 44 65 76 .[31mInvalid Dev
+ 175: 69 63 65 2e 0d 0a 00 ice....
+
+0000017c <__c.3926>:
+ 17c: 1b 5b 33 31 6d 43 6f 6e 74 72 6f 6c 20 45 72 72 .[31mControl Err
+ 18c: 6f 72 20 28 47 65 74 20 43 6f 6e 66 69 67 75 72 or (Get Configur
+ 19c: 61 74 69 6f 6e 29 2e 0d 0a 00 ation)....
+
+000001a6 <__c.3924>:
+ 1a6: 47 65 74 74 69 6e 67 20 43 6f 6e 66 69 67 20 44 Getting Config D
+ 1b6: 61 74 61 2e 0d 0a 00 ata....
+
+000001bd <__c.3917>:
+ 1bd: 1b 5b 33 31 6d 44 65 76 20 45 6e 75 6d 20 45 72 .[31mDev Enum Er
+ 1cd: 72 6f 72 0d 0a 20 2d 2d 20 45 72 72 6f 72 20 43 ror.. -- Error C
+ 1dd: 6f 64 65 20 25 64 0d 0a 20 2d 2d 20 53 75 62 20 ode %d.. -- Sub
+ 1ed: 45 72 72 6f 72 20 43 6f 64 65 20 25 64 0d 0a 20 Error Code %d..
+ 1fd: 2d 2d 20 49 6e 20 53 74 61 74 65 20 25 64 0d 0a -- In State %d..
+ 20d: 1b 5b 33 37 6d 00 .[37m.
+
+00000213 <__c.3910>:
+ 213: 1b 5b 33 31 6d 48 6f 73 74 20 4d 6f 64 65 20 45 .[31mHost Mode E
+ 223: 72 72 6f 72 0d 0a 20 2d 2d 20 45 72 72 6f 72 20 rror.. -- Error
+ 233: 43 6f 64 65 20 25 64 0d 0a 1b 5b 33 37 6d 00 Code %d...[37m.
+
+00000242 <__c.3902>:
+ 242: 1b 5b 33 32 6d 44 65 76 69 63 65 20 55 6e 61 74 .[32mDevice Unat
+ 252: 74 61 63 68 65 64 2e 0d 0a 1b 5b 33 37 6d 00 tached....[37m.
+
+00000261 <__c.3897>:
+ 261: 1b 5b 33 32 6d 44 65 76 69 63 65 20 41 74 74 61 .[32mDevice Atta
+ 271: 63 68 65 64 2e 0d 0a 1b 5b 33 37 6d 00 ched....[37m.
+
+0000027e <__c.3888>:
+ 27e: 1b 5b 33 36 6d 41 75 64 69 6f 20 48 6f 73 74 20 .[36mAudio Host
+ 28e: 44 65 6d 6f 20 72 75 6e 6e 69 6e 67 2e 0d 0a 1b Demo running....
+ 29e: 5b 33 37 6d 00 00 [37m..
+
+000002a4 <__ctors_end>:
+ 2a4: 11 24 eor r1, r1
+ 2a6: 1f be out 0x3f, r1 ; 63
+ 2a8: cf ef ldi r28, 0xFF ; 255
+ 2aa: d0 e2 ldi r29, 0x20 ; 32
+ 2ac: de bf out 0x3e, r29 ; 62
+ 2ae: cd bf out 0x3d, r28 ; 61
+
+000002b0 <__do_copy_data>:
+ 2b0: 11 e0 ldi r17, 0x01 ; 1
+ 2b2: a0 e0 ldi r26, 0x00 ; 0
+ 2b4: b1 e0 ldi r27, 0x01 ; 1
+ 2b6: ea ef ldi r30, 0xFA ; 250
+ 2b8: f8 e1 ldi r31, 0x18 ; 24
+ 2ba: 00 e0 ldi r16, 0x00 ; 0
+ 2bc: 0b bf out 0x3b, r16 ; 59
+ 2be: 02 c0 rjmp .+4 ; 0x2c4 <__do_copy_data+0x14>
+ 2c0: 07 90 elpm r0, Z+
+ 2c2: 0d 92 st X+, r0
+ 2c4: ac 31 cpi r26, 0x1C ; 28
+ 2c6: b1 07 cpc r27, r17
+ 2c8: d9 f7 brne .-10 ; 0x2c0 <__do_copy_data+0x10>
+
+000002ca <__do_clear_bss>:
+ 2ca: 11 e0 ldi r17, 0x01 ; 1
+ 2cc: ac e1 ldi r26, 0x1C ; 28
+ 2ce: b1 e0 ldi r27, 0x01 ; 1
+ 2d0: 01 c0 rjmp .+2 ; 0x2d4 <.do_clear_bss_start>
+
+000002d2 <.do_clear_bss_loop>:
+ 2d2: 1d 92 st X+, r1
+
+000002d4 <.do_clear_bss_start>:
+ 2d4: a0 34 cpi r26, 0x40 ; 64
+ 2d6: b1 07 cpc r27, r17
+ 2d8: e1 f7 brne .-8 ; 0x2d2 <.do_clear_bss_loop>
+ 2da: 3e d1 rcall .+636 ; 0x558 <main>
+ 2dc: 0c 94 7b 0c jmp 0x18f6 ; 0x18f6 <_exit>
+
+000002e0 <__bad_interrupt>:
+ 2e0: 8f ce rjmp .-738 ; 0x0 <__vectors>
+
+000002e2 <LEDs_SetAllLEDs>:
+ PORTD &= ~LEDMask;
+ }
+
+ static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
+ {
+ PORTD = ((PORTD & ~LEDS_ALL_LEDS) | LEDMask);
+ 2e2: 9b b1 in r25, 0x0b ; 11
+ 2e4: 9f 70 andi r25, 0x0F ; 15
+ 2e6: 98 2b or r25, r24
+ 2e8: 9b b9 out 0x0b, r25 ; 11
+ }
+ 2ea: 08 95 ret
+
+000002ec <SetupHardware>:
+
+/** Configures the board hardware and chip peripherals for the demo's functionality. */
+void SetupHardware(void)
+{
+ /* Disable watchdog if enabled by bootloader/fuses */
+ MCUSR &= ~(1 << WDRF);
+ 2ec: 84 b7 in r24, 0x34 ; 52
+ 2ee: 87 7f andi r24, 0xF7 ; 247
+ 2f0: 84 bf out 0x34, r24 ; 52
+ wdt_disable();
+ 2f2: 28 e1 ldi r18, 0x18 ; 24
+ 2f4: 0f b6 in r0, 0x3f ; 63
+ 2f6: f8 94 cli
+ 2f8: 20 93 60 00 sts 0x0060, r18
+ 2fc: 10 92 60 00 sts 0x0060, r1
+ 300: 0f be out 0x3f, r0 ; 63
+The type of x is clock_div_t.
+*/
+void clock_prescale_set(clock_div_t __x)
+{
+ uint8_t __tmp = _BV(CLKPCE);
+ __asm__ __volatile__ (
+ 302: 90 e0 ldi r25, 0x00 ; 0
+ 304: 80 e8 ldi r24, 0x80 ; 128
+ 306: 0f b6 in r0, 0x3f ; 63
+ 308: f8 94 cli
+ 30a: 80 93 61 00 sts 0x0061, r24
+ 30e: 90 93 61 00 sts 0x0061, r25
+ 312: 0f be out 0x3f, r0 ; 63
+ * \param[in] DoubleSpeed Enables double speed mode when set, halving the sample time to double the baud rate.
+ */
+ static inline void Serial_Init(const uint32_t BaudRate,
+ const bool DoubleSpeed)
+ {
+ UBRR1 = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
+ 314: 83 e3 ldi r24, 0x33 ; 51
+ 316: 90 e0 ldi r25, 0x00 ; 0
+ 318: 90 93 cd 00 sts 0x00CD, r25
+ 31c: 80 93 cc 00 sts 0x00CC, r24
+
+ UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
+ 320: 86 e0 ldi r24, 0x06 ; 6
+ 322: 80 93 ca 00 sts 0x00CA, r24
+ UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
+ 326: 10 92 c8 00 sts 0x00C8, r1
+ UCSR1B = ((1 << TXEN1) | (1 << RXEN1));
+ 32a: 20 93 c9 00 sts 0x00C9, r18
+
+ DDRD |= (1 << 3);
+ 32e: 53 9a sbi 0x0a, 3 ; 10
+ PORTD |= (1 << 2);
+ 330: 5a 9a sbi 0x0b, 2 ; 11
+
+ /* Inline Functions: */
+ #if !defined(__DOXYGEN__)
+ static inline void LEDs_Init(void)
+ {
+ DDRD |= LEDS_ALL_LEDS;
+ 332: 8a b1 in r24, 0x0a ; 10
+ 334: 80 6f ori r24, 0xF0 ; 240
+ 336: 8a b9 out 0x0a, r24 ; 10
+ PORTD &= ~LEDS_ALL_LEDS;
+ 338: 8b b1 in r24, 0x0b ; 11
+ 33a: 8f 70 andi r24, 0x0F ; 15
+ 33c: 8b b9 out 0x0b, r24 ; 11
+ clock_prescale_set(clock_div_1);
+
+ /* Hardware Initialization */
+ Serial_Init(9600, false);
+ LEDs_Init();
+ USB_Init();
+ 33e: 34 d5 rcall .+2664 ; 0xda8 <USB_Init>
+ static inline void Serial_CreateStream(FILE* Stream)
+ {
+ if (!(Stream))
+ {
+ Stream = &USARTSerialStream;
+ stdin = Stream;
+ 340: ec e2 ldi r30, 0x2C ; 44
+ 342: f1 e0 ldi r31, 0x01 ; 1
+ 344: f0 93 3b 01 sts 0x013B, r31
+ 348: e0 93 3a 01 sts 0x013A, r30
+ stdout = Stream;
+ 34c: f0 93 3d 01 sts 0x013D, r31
+ 350: e0 93 3c 01 sts 0x013C, r30
+ }
+
+ *Stream = (FILE)FDEV_SETUP_STREAM(Serial_putchar, Serial_getchar, _FDEV_SETUP_RW);
+ 354: 8e e0 ldi r24, 0x0E ; 14
+ 356: df 01 movw r26, r30
+ 358: 1d 92 st X+, r1
+ 35a: 8a 95 dec r24
+ 35c: e9 f7 brne .-6 ; 0x358 <SetupHardware+0x6c>
+ 35e: 83 e0 ldi r24, 0x03 ; 3
+ 360: 80 93 2f 01 sts 0x012F, r24
+ 364: 85 e6 ldi r24, 0x65 ; 101
+ 366: 99 e0 ldi r25, 0x09 ; 9
+ 368: 90 93 35 01 sts 0x0135, r25
+ 36c: 80 93 34 01 sts 0x0134, r24
+ 370: 8e e6 ldi r24, 0x6E ; 110
+ 372: 99 e0 ldi r25, 0x09 ; 9
+ 374: 90 93 37 01 sts 0x0137, r25
+ 378: 80 93 36 01 sts 0x0136, r24
+
+ /* Create a stdio stream for the serial port for stdin and stdout */
+ Serial_CreateStream(NULL);
+}
+ 37c: 08 95 ret
+
+0000037e <EVENT_USB_Host_DeviceAttached>:
+/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and
+ * starts the library USB task to begin the enumeration and USB management process.
+ */
+void EVENT_USB_Host_DeviceAttached(void)
+{
+ puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE));
+ 37e: 81 e6 ldi r24, 0x61 ; 97
+ 380: 92 e0 ldi r25, 0x02 ; 2
+ 382: de d7 rcall .+4028 ; 0x1340 <puts_P>
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
+ 384: 80 ea ldi r24, 0xA0 ; 160
+}
+ 386: ad cf rjmp .-166 ; 0x2e2 <LEDs_SetAllLEDs>
+
+00000388 <EVENT_USB_Host_DeviceUnattached>:
+/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and
+ * stops the library USB task management process.
+ */
+void EVENT_USB_Host_DeviceUnattached(void)
+{
+ puts_P(PSTR(ESC_FG_GREEN "Device Unattached.\r\n" ESC_FG_WHITE));
+ 388: 82 e4 ldi r24, 0x42 ; 66
+ 38a: 92 e0 ldi r25, 0x02 ; 2
+ 38c: d9 d7 rcall .+4018 ; 0x1340 <puts_P>
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+ 38e: 80 e1 ldi r24, 0x10 ; 16
+}
+ 390: a8 cf rjmp .-176 ; 0x2e2 <LEDs_SetAllLEDs>
+
+00000392 <EVENT_USB_Host_DeviceEnumerationComplete>:
+/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully
+ * enumerated by the host and is now ready to be used by the application.
+ */
+void EVENT_USB_Host_DeviceEnumerationComplete(void)
+{
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);
+ 392: 80 e6 ldi r24, 0x60 ; 96
+}
+ 394: a6 cf rjmp .-180 ; 0x2e2 <LEDs_SetAllLEDs>
+
+00000396 <EVENT_USB_Host_HostError>:
+
+/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */
+void EVENT_USB_Host_HostError(const uint8_t ErrorCode)
+{
+ 396: df 93 push r29
+ 398: cf 93 push r28
+ 39a: 0f 92 push r0
+ 39c: cd b7 in r28, 0x3d ; 61
+ 39e: de b7 in r29, 0x3e ; 62
+ USB_Disable();
+ 3a0: 89 83 std Y+1, r24 ; 0x01
+ 3a2: 9c d4 rcall .+2360 ; 0xcdc <USB_Disable>
+
+ printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n"
+ 3a4: 00 d0 rcall .+0 ; 0x3a6 <EVENT_USB_Host_HostError+0x10>
+ 3a6: 00 d0 rcall .+0 ; 0x3a8 <EVENT_USB_Host_HostError+0x12>
+ 3a8: ed b7 in r30, 0x3d ; 61
+ 3aa: fe b7 in r31, 0x3e ; 62
+ 3ac: 31 96 adiw r30, 0x01 ; 1
+ 3ae: 23 e1 ldi r18, 0x13 ; 19
+ 3b0: 32 e0 ldi r19, 0x02 ; 2
+ 3b2: ad b7 in r26, 0x3d ; 61
+ 3b4: be b7 in r27, 0x3e ; 62
+ 3b6: 12 96 adiw r26, 0x02 ; 2
+ 3b8: 3c 93 st X, r19
+ 3ba: 2e 93 st -X, r18
+ 3bc: 11 97 sbiw r26, 0x01 ; 1
+ 3be: 89 81 ldd r24, Y+1 ; 0x01
+ 3c0: 82 83 std Z+2, r24 ; 0x02
+ 3c2: 13 82 std Z+3, r1 ; 0x03
+ 3c4: 9e d7 rcall .+3900 ; 0x1302 <printf_P>
+ " -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode);
+
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+ 3c6: 0f 90 pop r0
+ 3c8: 0f 90 pop r0
+ 3ca: 0f 90 pop r0
+ 3cc: 0f 90 pop r0
+ 3ce: 80 e9 ldi r24, 0x90 ; 144
+ 3d0: 88 df rcall .-240 ; 0x2e2 <LEDs_SetAllLEDs>
+ 3d2: ff cf rjmp .-2 ; 0x3d2 <EVENT_USB_Host_HostError+0x3c>
+
+000003d4 <EVENT_USB_Host_DeviceEnumerationFailed>:
+ * enumerating an attached USB device.
+ */
+void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode,
+ const uint8_t SubErrorCode)
+{
+ printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n"
+ 3d4: 90 91 2b 01 lds r25, 0x012B
+ 3d8: 2d b7 in r18, 0x3d ; 61
+ 3da: 3e b7 in r19, 0x3e ; 62
+ 3dc: 28 50 subi r18, 0x08 ; 8
+ 3de: 30 40 sbci r19, 0x00 ; 0
+ 3e0: 0f b6 in r0, 0x3f ; 63
+ 3e2: f8 94 cli
+ 3e4: 3e bf out 0x3e, r19 ; 62
+ 3e6: 0f be out 0x3f, r0 ; 63
+ 3e8: 2d bf out 0x3d, r18 ; 61
+ 3ea: ed b7 in r30, 0x3d ; 61
+ 3ec: fe b7 in r31, 0x3e ; 62
+ 3ee: 31 96 adiw r30, 0x01 ; 1
+ 3f0: 2d eb ldi r18, 0xBD ; 189
+ 3f2: 31 e0 ldi r19, 0x01 ; 1
+ 3f4: ad b7 in r26, 0x3d ; 61
+ 3f6: be b7 in r27, 0x3e ; 62
+ 3f8: 12 96 adiw r26, 0x02 ; 2
+ 3fa: 3c 93 st X, r19
+ 3fc: 2e 93 st -X, r18
+ 3fe: 11 97 sbiw r26, 0x01 ; 1
+ 400: 82 83 std Z+2, r24 ; 0x02
+ 402: 13 82 std Z+3, r1 ; 0x03
+ 404: 64 83 std Z+4, r22 ; 0x04
+ 406: 15 82 std Z+5, r1 ; 0x05
+ 408: 96 83 std Z+6, r25 ; 0x06
+ 40a: 17 82 std Z+7, r1 ; 0x07
+ 40c: 7a d7 rcall .+3828 ; 0x1302 <printf_P>
+ " -- Error Code %d\r\n"
+ " -- Sub Error Code %d\r\n"
+ " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState);
+
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+ 40e: 2d b7 in r18, 0x3d ; 61
+ 410: 3e b7 in r19, 0x3e ; 62
+ 412: 28 5f subi r18, 0xF8 ; 248
+ 414: 3f 4f sbci r19, 0xFF ; 255
+ 416: 0f b6 in r0, 0x3f ; 63
+ 418: f8 94 cli
+ 41a: 3e bf out 0x3e, r19 ; 62
+ 41c: 0f be out 0x3f, r0 ; 63
+ 41e: 2d bf out 0x3d, r18 ; 61
+ 420: 80 e9 ldi r24, 0x90 ; 144
+}
+ 422: 5f cf rjmp .-322 ; 0x2e2 <LEDs_SetAllLEDs>
+
+00000424 <Audio_Task>:
+
+void Audio_Task(void)
+{
+ 424: 1f 93 push r17
+ 426: df 93 push r29
+ 428: cf 93 push r28
+ 42a: 00 d0 rcall .+0 ; 0x42c <Audio_Task+0x8>
+ 42c: 0f 92 push r0
+ 42e: cd b7 in r28, 0x3d ; 61
+ 430: de b7 in r29, 0x3e ; 62
+ uint8_t ErrorCode;
+
+ switch (USB_HostState)
+ 432: 80 91 2b 01 lds r24, 0x012B
+ 436: 8b 30 cpi r24, 0x0B ; 11
+ 438: 09 f0 breq .+2 ; 0x43c <Audio_Task+0x18>
+ 43a: 87 c0 rjmp .+270 ; 0x54a <Audio_Task+0x126>
+ {
+ case HOST_STATE_Addressed:
+ puts_P(PSTR("Getting Config Data.\r\n"));
+ 43c: 86 ea ldi r24, 0xA6 ; 166
+ 43e: 91 e0 ldi r25, 0x01 ; 1
+ 440: 7f d7 rcall .+3838 ; 0x1340 <puts_P>
+
+ /* Get and process the configuration descriptor data */
+ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead)
+ 442: 30 d1 rcall .+608 ; 0x6a4 <ProcessConfigurationDescriptor>
+ 444: 18 2f mov r17, r24
+ 446: 88 23 and r24, r24
+ 448: e9 f0 breq .+58 ; 0x484 <Audio_Task+0x60>
+ {
+ if (ErrorCode == ControlError)
+ 44a: 81 30 cpi r24, 0x01 ; 1
+ 44c: 19 f4 brne .+6 ; 0x454 <Audio_Task+0x30>
+ puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n"));
+ 44e: 8c e7 ldi r24, 0x7C ; 124
+ 450: 91 e0 ldi r25, 0x01 ; 1
+ 452: 02 c0 rjmp .+4 ; 0x458 <Audio_Task+0x34>
+ else
+ puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n"));
+ 454: 85 e6 ldi r24, 0x65 ; 101
+ 456: 91 e0 ldi r25, 0x01 ; 1
+ 458: 73 d7 rcall .+3814 ; 0x1340 <puts_P>
+
+ printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
+ 45a: 00 d0 rcall .+0 ; 0x45c <Audio_Task+0x38>
+ 45c: 00 d0 rcall .+0 ; 0x45e <Audio_Task+0x3a>
+ 45e: ed b7 in r30, 0x3d ; 61
+ 460: fe b7 in r31, 0x3e ; 62
+ 462: 31 96 adiw r30, 0x01 ; 1
+ 464: 2b e4 ldi r18, 0x4B ; 75
+ 466: 31 e0 ldi r19, 0x01 ; 1
+ 468: ad b7 in r26, 0x3d ; 61
+ 46a: be b7 in r27, 0x3e ; 62
+ 46c: 12 96 adiw r26, 0x02 ; 2
+ 46e: 3c 93 st X, r19
+ 470: 2e 93 st -X, r18
+ 472: 11 97 sbiw r26, 0x01 ; 1
+ 474: 12 83 std Z+2, r17 ; 0x02
+ 476: 13 82 std Z+3, r1 ; 0x03
+ 478: 44 d7 rcall .+3720 ; 0x1302 <printf_P>
+
+ /* Indicate error status */
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+ 47a: 0f 90 pop r0
+ 47c: 0f 90 pop r0
+ 47e: 0f 90 pop r0
+ 480: 0f 90 pop r0
+ 482: 4a c0 rjmp .+148 ; 0x518 <Audio_Task+0xf4>
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ break;
+ }
+
+ /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */
+ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful)
+ 484: 81 e0 ldi r24, 0x01 ; 1
+ 486: 82 d3 rcall .+1796 ; 0xb8c <USB_Host_SetDeviceConfiguration>
+ 488: 88 23 and r24, r24
+ 48a: 41 f0 breq .+16 ; 0x49c <Audio_Task+0x78>
+ {
+ printf_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n"
+ 48c: 00 d0 rcall .+0 ; 0x48e <Audio_Task+0x6a>
+ 48e: 00 d0 rcall .+0 ; 0x490 <Audio_Task+0x6c>
+ 490: ed b7 in r30, 0x3d ; 61
+ 492: fe b7 in r31, 0x3e ; 62
+ 494: 31 96 adiw r30, 0x01 ; 1
+ 496: 28 e0 ldi r18, 0x08 ; 8
+ 498: 31 e0 ldi r19, 0x01 ; 1
+ 49a: 0e c0 rjmp .+28 ; 0x4b8 <Audio_Task+0x94>
+ /* Wait until USB device disconnected */
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ break;
+ }
+
+ if ((ErrorCode = USB_Host_SetInterfaceAltSetting(StreamingInterfaceIndex,
+ 49c: 80 91 1c 01 lds r24, 0x011C
+ 4a0: 60 91 1d 01 lds r22, 0x011D
+ 4a4: 89 d3 rcall .+1810 ; 0xbb8 <USB_Host_SetInterfaceAltSetting>
+ 4a6: 88 23 and r24, r24
+ 4a8: 79 f0 breq .+30 ; 0x4c8 <Audio_Task+0xa4>
+ StreamingInterfaceAltSetting)) != HOST_SENDCONTROL_Successful)
+ {
+ printf_P(PSTR(ESC_FG_RED "Could not set alternative streaming interface setting.\r\n"
+ 4aa: 00 d0 rcall .+0 ; 0x4ac <Audio_Task+0x88>
+ 4ac: 00 d0 rcall .+0 ; 0x4ae <Audio_Task+0x8a>
+ 4ae: ed b7 in r30, 0x3d ; 61
+ 4b0: fe b7 in r31, 0x3e ; 62
+ 4b2: 31 96 adiw r30, 0x01 ; 1
+ 4b4: 21 eb ldi r18, 0xB1 ; 177
+ 4b6: 30 e0 ldi r19, 0x00 ; 0
+ 4b8: ad b7 in r26, 0x3d ; 61
+ 4ba: be b7 in r27, 0x3e ; 62
+ 4bc: 12 96 adiw r26, 0x02 ; 2
+ 4be: 3c 93 st X, r19
+ 4c0: 2e 93 st -X, r18
+ 4c2: 11 97 sbiw r26, 0x01 ; 1
+ 4c4: 82 83 std Z+2, r24 ; 0x02
+ 4c6: d7 cf rjmp .-82 ; 0x476 <Audio_Task+0x52>
+ /* Wait until USB device disconnected */
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ break;
+ }
+
+ USB_ControlRequest = (USB_Request_Header_t)
+ 4c8: 20 91 1e 01 lds r18, 0x011E
+ 4cc: 82 e2 ldi r24, 0x22 ; 34
+ 4ce: 80 93 23 01 sts 0x0123, r24
+ 4d2: 81 e0 ldi r24, 0x01 ; 1
+ 4d4: 80 93 24 01 sts 0x0124, r24
+ 4d8: 80 e0 ldi r24, 0x00 ; 0
+ 4da: 91 e0 ldi r25, 0x01 ; 1
+ 4dc: 90 93 26 01 sts 0x0126, r25
+ 4e0: 80 93 25 01 sts 0x0125, r24
+ 4e4: 20 93 27 01 sts 0x0127, r18
+ 4e8: 10 92 28 01 sts 0x0128, r1
+ 4ec: 83 e0 ldi r24, 0x03 ; 3
+ 4ee: 90 e0 ldi r25, 0x00 ; 0
+ 4f0: 90 93 2a 01 sts 0x012A, r25
+ 4f4: 80 93 29 01 sts 0x0129, r24
+ .wValue = 0x0100,
+ .wIndex = StreamingEndpointAddress,
+ .wLength = sizeof(USB_Audio_SampleFreq_t),
+ };
+
+ USB_Audio_SampleFreq_t SampleRate = AUDIO_SAMPLE_FREQ(48000);
+ 4f8: de 01 movw r26, r28
+ 4fa: 11 96 adiw r26, 0x01 ; 1
+ 4fc: e0 e0 ldi r30, 0x00 ; 0
+ 4fe: f1 e0 ldi r31, 0x01 ; 1
+ 500: 83 e0 ldi r24, 0x03 ; 3
+ 502: 01 90 ld r0, Z+
+ 504: 0d 92 st X+, r0
+ 506: 81 50 subi r24, 0x01 ; 1
+ 508: e1 f7 brne .-8 ; 0x502 <Audio_Task+0xde>
+ * \param[in] PipeNumber Index of the pipe to select.
+ */
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber)
+ {
+ UPNUM = PipeNumber;
+ 50a: 10 92 a7 00 sts 0x00A7, r1
+
+ /* Select the control pipe for the request transfer */
+ Pipe_SelectPipe(PIPE_CONTROLPIPE);
+
+ /* Set the sample rate on the streaming interface endpoint */
+ if ((ErrorCode = USB_Host_SendControlRequest(&SampleRate)) != HOST_SENDCONTROL_Successful)
+ 50e: ce 01 movw r24, r28
+ 510: 01 96 adiw r24, 0x01 ; 1
+ 512: b7 d5 rcall .+2926 ; 0x1082 <USB_Host_SendControlRequest>
+ 514: 88 23 and r24, r24
+ 516: 29 f0 breq .+10 ; 0x522 <Audio_Task+0xfe>
+ {
+ /* Indicate error status */
+ LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
+ 518: 80 e9 ldi r24, 0x90 ; 144
+ 51a: e3 de rcall .-570 ; 0x2e2 <LEDs_SetAllLEDs>
+
+ /* Wait until USB device disconnected */
+ USB_HostState = HOST_STATE_WaitForDeviceRemoval;
+ 51c: 10 92 2b 01 sts 0x012B, r1
+ break;
+ 520: 14 c0 rjmp .+40 ; 0x54a <Audio_Task+0x126>
+ }
+
+ /* Sample reload timer initialization */
+ TIMSK0 = (1 << OCIE0A);
+ 522: 82 e0 ldi r24, 0x02 ; 2
+ 524: 80 93 6e 00 sts 0x006E, r24
+ OCR0A = ((F_CPU / 8 / 8000) - 1);
+ 528: 9c e7 ldi r25, 0x7C ; 124
+ 52a: 97 bd out 0x27, r25 ; 39
+ TCCR0A = (1 << WGM01); // CTC mode
+ 52c: 84 bd out 0x24, r24 ; 36
+ TCCR0B = (1 << CS01); // Fcpu/8 speed
+ 52e: 85 bd out 0x25, r24 ; 37
+
+ /* Set speaker as output */
+ DDRC |= (1 << 6);
+ 530: 3e 9a sbi 0x07, 6 ; 7
+
+ /* PWM speaker timer initialization */
+ TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
+ 532: 81 ef ldi r24, 0xF1 ; 241
+ 534: 80 93 90 00 sts 0x0090, r24
+ | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
+ TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, F_CPU speed
+ 538: 89 e0 ldi r24, 0x09 ; 9
+ 53a: 80 93 91 00 sts 0x0091, r24
+
+ puts_P(PSTR("Microphone Enumerated.\r\n"));
+ 53e: 88 e9 ldi r24, 0x98 ; 152
+ 540: 90 e0 ldi r25, 0x00 ; 0
+ 542: fe d6 rcall .+3580 ; 0x1340 <puts_P>
+
+ USB_HostState = HOST_STATE_Configured;
+ 544: 8c e0 ldi r24, 0x0C ; 12
+ 546: 80 93 2b 01 sts 0x012B, r24
+ break;
+ case HOST_STATE_Configured:
+ break;
+ }
+}
+ 54a: 0f 90 pop r0
+ 54c: 0f 90 pop r0
+ 54e: 0f 90 pop r0
+ 550: cf 91 pop r28
+ 552: df 91 pop r29
+ 554: 1f 91 pop r17
+ 556: 08 95 ret
+
+00000558 <main>:
+/** Main program entry point. This routine configures the hardware required by the application, then
+ * enters a loop to run the application tasks in sequence.
+ */
+int main(void)
+{
+ SetupHardware();
+ 558: c9 de rcall .-622 ; 0x2ec <SetupHardware>
+
+ puts_P(PSTR(ESC_FG_CYAN "Audio Host Demo running.\r\n" ESC_FG_WHITE));
+ 55a: 8e e7 ldi r24, 0x7E ; 126
+ 55c: 92 e0 ldi r25, 0x02 ; 2
+ 55e: f0 d6 rcall .+3552 ; 0x1340 <puts_P>
+
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
+ 560: 80 e1 ldi r24, 0x10 ; 16
+ 562: bf de rcall .-642 ; 0x2e2 <LEDs_SetAllLEDs>
+ sei();
+ 564: 78 94 sei
+
+ for (;;)
+ {
+ Audio_Task();
+ 566: 5e df rcall .-324 ; 0x424 <Audio_Task>
+ USB_USBTask();
+ 568: a2 d6 rcall .+3396 ; 0x12ae <USB_USBTask>
+ 56a: fd cf rjmp .-6 ; 0x566 <main+0xe>
+
+0000056c <__vector_21>:
+ }
+}
+
+/** ISR to handle the reloading of the PWM timer with the next sample. */
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)
+{
+ 56c: 1f 92 push r1
+ 56e: 0f 92 push r0
+ 570: 0f b6 in r0, 0x3f ; 63
+ 572: 0f 92 push r0
+ 574: 0b b6 in r0, 0x3b ; 59
+ 576: 0f 92 push r0
+ 578: 11 24 eor r1, r1
+ 57a: 1f 93 push r17
+ 57c: 2f 93 push r18
+ 57e: 3f 93 push r19
+ 580: 4f 93 push r20
+ 582: 5f 93 push r21
+ 584: 6f 93 push r22
+ 586: 7f 93 push r23
+ 588: 8f 93 push r24
+ 58a: 9f 93 push r25
+ 58c: af 93 push r26
+ 58e: bf 93 push r27
+ 590: ef 93 push r30
+ 592: ff 93 push r31
+ * \return Index of the currently selected pipe.
+ */
+ static inline uint8_t Pipe_GetCurrentPipe(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline uint8_t Pipe_GetCurrentPipe(void)
+ {
+ return (UPNUM & PIPE_PIPENUM_MASK);
+ 594: 10 91 a7 00 lds r17, 0x00A7
+ 598: 17 70 andi r17, 0x07 ; 7
+ * \param[in] PipeNumber Index of the pipe to select.
+ */
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber)
+ {
+ UPNUM = PipeNumber;
+ 59a: 81 e0 ldi r24, 0x01 ; 1
+ 59c: 80 93 a7 00 sts 0x00A7, r24
+
+ /** Unfreezes the selected pipe, allowing it to communicate with an attached device. */
+ static inline void Pipe_Unfreeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Unfreeze(void)
+ {
+ UPCONX &= ~(1 << PFREEZE);
+ 5a0: 80 91 a9 00 lds r24, 0x00A9
+ 5a4: 8f 7b andi r24, 0xBF ; 191
+ 5a6: 80 93 a9 00 sts 0x00A9, r24
+ * \return Boolean \c true if the current pipe has received an IN packet, \c false otherwise.
+ */
+ static inline bool Pipe_IsINReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Pipe_IsINReceived(void)
+ {
+ return ((UPINTX & (1 << RXINI)) ? true : false);
+ 5aa: 80 91 a6 00 lds r24, 0x00A6
+
+ Pipe_SelectPipe(AUDIO_DATA_IN_PIPE);
+ Pipe_Unfreeze();
+
+ /* Check if the current pipe can be read from (contains a packet) and the device is sending data */
+ if (Pipe_IsINReceived())
+ 5ae: 80 ff sbrs r24, 0
+ 5b0: 2b c0 rjmp .+86 ; 0x608 <__vector_21+0x9c>
+ {
+ uint16_t Value;
+ uint8_t Bytes[2];
+ } Data;
+
+ Data.Bytes[0] = UPDATX;
+ 5b2: 80 91 af 00 lds r24, 0x00AF
+ Data.Bytes[1] = UPDATX;
+ 5b6: 40 91 af 00 lds r20, 0x00AF
+ * on its direction.
+ */
+ static inline bool Pipe_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Pipe_IsReadWriteAllowed(void)
+ {
+ return ((UPINTX & (1 << RWAL)) ? true : false);
+ 5ba: 80 91 a6 00 lds r24, 0x00A6
+ {
+ /* Retrieve the signed 16-bit audio sample, convert to 8-bit */
+ int8_t Sample_8Bit = (Pipe_Read_16_LE() >> 8);
+
+ /* Check to see if the bank is now empty */
+ if (!(Pipe_IsReadWriteAllowed()))
+ 5be: 85 fd sbrc r24, 5
+ 5c0: 05 c0 rjmp .+10 ; 0x5cc <__vector_21+0x60>
+ * \ingroup Group_PipePacketManagement_AVR8
+ */
+ static inline void Pipe_ClearIN(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ClearIN(void)
+ {
+ UPINTX &= ~((1 << RXINI) | (1 << FIFOCON));
+ 5c2: 80 91 a6 00 lds r24, 0x00A6
+ 5c6: 8e 77 andi r24, 0x7E ; 126
+ 5c8: 80 93 a6 00 sts 0x00A6, r24
+ /* Acknowledge the packet, clear the bank ready for the next packet */
+ Pipe_ClearIN();
+ }
+
+ /* Load the sample into the PWM timer channel */
+ OCR3A = (Sample_8Bit ^ (1 << 7));
+ 5cc: 84 2f mov r24, r20
+ 5ce: 99 27 eor r25, r25
+ 5d0: 87 fd sbrc r24, 7
+ 5d2: 90 95 com r25
+ 5d4: 20 e8 ldi r18, 0x80 ; 128
+ 5d6: 30 e0 ldi r19, 0x00 ; 0
+ 5d8: 82 27 eor r24, r18
+ 5da: 93 27 eor r25, r19
+ 5dc: 90 93 99 00 sts 0x0099, r25
+ 5e0: 80 93 98 00 sts 0x0098, r24
+
+ uint8_t LEDMask = LEDS_NO_LEDS;
+
+ /* Turn on LEDs as the sample amplitude increases */
+ if (Sample_8Bit > 16)
+ 5e4: 41 31 cpi r20, 0x11 ; 17
+ 5e6: 44 f4 brge .+16 ; 0x5f8 <__vector_21+0x8c>
+ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4);
+ else if (Sample_8Bit > 8)
+ 5e8: 49 30 cpi r20, 0x09 ; 9
+ 5ea: 44 f4 brge .+16 ; 0x5fc <__vector_21+0x90>
+ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3);
+ else if (Sample_8Bit > 4)
+ 5ec: 45 30 cpi r20, 0x05 ; 5
+ 5ee: 44 f4 brge .+16 ; 0x600 <__vector_21+0x94>
+ LEDMask = (LEDS_LED1 | LEDS_LED2);
+ else if (Sample_8Bit > 2)
+ 5f0: 43 30 cpi r20, 0x03 ; 3
+ 5f2: 44 f4 brge .+16 ; 0x604 <__vector_21+0x98>
+ }
+
+ /* Load the sample into the PWM timer channel */
+ OCR3A = (Sample_8Bit ^ (1 << 7));
+
+ uint8_t LEDMask = LEDS_NO_LEDS;
+ 5f4: 80 e0 ldi r24, 0x00 ; 0
+ 5f6: 07 c0 rjmp .+14 ; 0x606 <__vector_21+0x9a>
+
+ /* Turn on LEDs as the sample amplitude increases */
+ if (Sample_8Bit > 16)
+ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4);
+ 5f8: 80 ef ldi r24, 0xF0 ; 240
+ 5fa: 05 c0 rjmp .+10 ; 0x606 <__vector_21+0x9a>
+ else if (Sample_8Bit > 8)
+ LEDMask = (LEDS_LED1 | LEDS_LED2 | LEDS_LED3);
+ 5fc: 80 eb ldi r24, 0xB0 ; 176
+ 5fe: 03 c0 rjmp .+6 ; 0x606 <__vector_21+0x9a>
+ else if (Sample_8Bit > 4)
+ LEDMask = (LEDS_LED1 | LEDS_LED2);
+ 600: 80 e3 ldi r24, 0x30 ; 48
+ 602: 01 c0 rjmp .+2 ; 0x606 <__vector_21+0x9a>
+ else if (Sample_8Bit > 2)
+ LEDMask = (LEDS_LED1);
+ 604: 80 e1 ldi r24, 0x10 ; 16
+
+ LEDs_SetAllLEDs(LEDMask);
+ 606: 6d de rcall .-806 ; 0x2e2 <LEDs_SetAllLEDs>
+
+ /** Freezes the selected pipe, preventing it from communicating with an attached device. */
+ static inline void Pipe_Freeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Freeze(void)
+ {
+ UPCONX |= (1 << PFREEZE);
+ 608: 80 91 a9 00 lds r24, 0x00A9
+ 60c: 80 64 ori r24, 0x40 ; 64
+ 60e: 80 93 a9 00 sts 0x00A9, r24
+ * \param[in] PipeNumber Index of the pipe to select.
+ */
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber)
+ {
+ UPNUM = PipeNumber;
+ 612: 10 93 a7 00 sts 0x00A7, r17
+ }
+
+ Pipe_Freeze();
+
+ Pipe_SelectPipe(PrevPipe);
+}
+ 616: ff 91 pop r31
+ 618: ef 91 pop r30
+ 61a: bf 91 pop r27
+ 61c: af 91 pop r26
+ 61e: 9f 91 pop r25
+ 620: 8f 91 pop r24
+ 622: 7f 91 pop r23
+ 624: 6f 91 pop r22
+ 626: 5f 91 pop r21
+ 628: 4f 91 pop r20
+ 62a: 3f 91 pop r19
+ 62c: 2f 91 pop r18
+ 62e: 1f 91 pop r17
+ 630: 0f 90 pop r0
+ 632: 0b be out 0x3b, r0 ; 59
+ 634: 0f 90 pop r0
+ 636: 0f be out 0x3f, r0 ; 63
+ 638: 0f 90 pop r0
+ 63a: 1f 90 pop r1
+ 63c: 18 95 reti
+
+0000063e <DComp_NextAudioControlInterface>:
+ /* Valid data found, return success */
+ return SuccessfulConfigRead;
+}
+
+uint8_t DComp_NextAudioControlInterface(void* CurrentDescriptor)
+{
+ 63e: fc 01 movw r30, r24
+ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+ if (Header->Type == DTYPE_Interface)
+ 640: 81 81 ldd r24, Z+1 ; 0x01
+ 642: 84 30 cpi r24, 0x04 ; 4
+ 644: 49 f4 brne .+18 ; 0x658 <DComp_NextAudioControlInterface+0x1a>
+ {
+ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t);
+
+ if ((Interface->Class == AUDIO_CSCP_AudioClass) &&
+ 646: 85 81 ldd r24, Z+5 ; 0x05
+ 648: 81 30 cpi r24, 0x01 ; 1
+ 64a: 31 f4 brne .+12 ; 0x658 <DComp_NextAudioControlInterface+0x1a>
+ 64c: 86 81 ldd r24, Z+6 ; 0x06
+ 64e: 81 30 cpi r24, 0x01 ; 1
+ 650: 19 f4 brne .+6 ; 0x658 <DComp_NextAudioControlInterface+0x1a>
+ (Interface->SubClass == AUDIO_CSCP_ControlSubclass) &&
+ 652: 87 81 ldd r24, Z+7 ; 0x07
+ 654: 88 23 and r24, r24
+ 656: 11 f0 breq .+4 ; 0x65c <DComp_NextAudioControlInterface+0x1e>
+ {
+ return DESCRIPTOR_SEARCH_Found;
+ }
+ }
+
+ return DESCRIPTOR_SEARCH_NotFound;
+ 658: 82 e0 ldi r24, 0x02 ; 2
+ 65a: 08 95 ret
+
+ if ((Interface->Class == AUDIO_CSCP_AudioClass) &&
+ (Interface->SubClass == AUDIO_CSCP_ControlSubclass) &&
+ (Interface->Protocol == AUDIO_CSCP_ControlProtocol))
+ {
+ return DESCRIPTOR_SEARCH_Found;
+ 65c: 80 e0 ldi r24, 0x00 ; 0
+ }
+ }
+
+ return DESCRIPTOR_SEARCH_NotFound;
+}
+ 65e: 08 95 ret
+
+00000660 <DComp_NextAudioStreamInterface>:
+
+uint8_t DComp_NextAudioStreamInterface(void* CurrentDescriptor)
+{
+ 660: fc 01 movw r30, r24
+ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+ if (Header->Type == DTYPE_Interface)
+ 662: 81 81 ldd r24, Z+1 ; 0x01
+ 664: 84 30 cpi r24, 0x04 ; 4
+ 666: 49 f4 brne .+18 ; 0x67a <DComp_NextAudioStreamInterface+0x1a>
+ {
+ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t);
+
+ if ((Interface->Class == AUDIO_CSCP_AudioClass) &&
+ 668: 85 81 ldd r24, Z+5 ; 0x05
+ 66a: 81 30 cpi r24, 0x01 ; 1
+ 66c: 31 f4 brne .+12 ; 0x67a <DComp_NextAudioStreamInterface+0x1a>
+ 66e: 86 81 ldd r24, Z+6 ; 0x06
+ 670: 82 30 cpi r24, 0x02 ; 2
+ 672: 19 f4 brne .+6 ; 0x67a <DComp_NextAudioStreamInterface+0x1a>
+ (Interface->SubClass == AUDIO_CSCP_AudioStreamingSubclass) &&
+ 674: 87 81 ldd r24, Z+7 ; 0x07
+ 676: 88 23 and r24, r24
+ 678: 11 f0 breq .+4 ; 0x67e <DComp_NextAudioStreamInterface+0x1e>
+ {
+ return DESCRIPTOR_SEARCH_Found;
+ }
+ }
+
+ return DESCRIPTOR_SEARCH_NotFound;
+ 67a: 82 e0 ldi r24, 0x02 ; 2
+ 67c: 08 95 ret
+
+ if ((Interface->Class == AUDIO_CSCP_AudioClass) &&
+ (Interface->SubClass == AUDIO_CSCP_AudioStreamingSubclass) &&
+ (Interface->Protocol == AUDIO_CSCP_StreamingProtocol))
+ {
+ return DESCRIPTOR_SEARCH_Found;
+ 67e: 80 e0 ldi r24, 0x00 ; 0
+ }
+ }
+
+ return DESCRIPTOR_SEARCH_NotFound;
+}
+ 680: 08 95 ret
+
+00000682 <DComp_NextAudioInterfaceDataEndpoint>:
+
+uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor)
+{
+ 682: fc 01 movw r30, r24
+ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+ if (Header->Type == DTYPE_Endpoint)
+ 684: 81 81 ldd r24, Z+1 ; 0x01
+ 686: 85 30 cpi r24, 0x05 ; 5
+ 688: 29 f4 brne .+10 ; 0x694 <DComp_NextAudioInterfaceDataEndpoint+0x12>
+ {
+ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t);
+
+ if ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_ISOCHRONOUS)
+ 68a: 83 81 ldd r24, Z+3 ; 0x03
+ 68c: 83 70 andi r24, 0x03 ; 3
+ 68e: 81 30 cpi r24, 0x01 ; 1
+ 690: 19 f4 brne .+6 ; 0x698 <DComp_NextAudioInterfaceDataEndpoint+0x16>
+ 692: 04 c0 rjmp .+8 ; 0x69c <DComp_NextAudioInterfaceDataEndpoint+0x1a>
+ return DESCRIPTOR_SEARCH_Found;
+ }
+ else if (Header->Type == DTYPE_Interface)
+ 694: 84 30 cpi r24, 0x04 ; 4
+ 696: 21 f0 breq .+8 ; 0x6a0 <DComp_NextAudioInterfaceDataEndpoint+0x1e>
+ {
+ return DESCRIPTOR_SEARCH_Fail;
+ }
+
+ return DESCRIPTOR_SEARCH_NotFound;
+ 698: 82 e0 ldi r24, 0x02 ; 2
+ 69a: 08 95 ret
+ if (Header->Type == DTYPE_Endpoint)
+ {
+ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t);
+
+ if ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_ISOCHRONOUS)
+ return DESCRIPTOR_SEARCH_Found;
+ 69c: 80 e0 ldi r24, 0x00 ; 0
+ 69e: 08 95 ret
+ }
+ else if (Header->Type == DTYPE_Interface)
+ {
+ return DESCRIPTOR_SEARCH_Fail;
+ 6a0: 81 e0 ldi r24, 0x01 ; 1
+ }
+
+ return DESCRIPTOR_SEARCH_NotFound;
+}
+ 6a2: 08 95 ret
+
+000006a4 <ProcessConfigurationDescriptor>:
+uint8_t StreamingInterfaceIndex = 0;
+uint8_t StreamingInterfaceAltSetting = 0;
+uint8_t StreamingEndpointAddress = 0;
+
+uint8_t ProcessConfigurationDescriptor(void)
+{
+ 6a4: af 92 push r10
+ 6a6: bf 92 push r11
+ 6a8: cf 92 push r12
+ 6aa: df 92 push r13
+ 6ac: ef 92 push r14
+ 6ae: ff 92 push r15
+ 6b0: 0f 93 push r16
+ 6b2: 1f 93 push r17
+ 6b4: df 93 push r29
+ 6b6: cf 93 push r28
+ 6b8: cd b7 in r28, 0x3d ; 61
+ 6ba: de b7 in r29, 0x3e ; 62
+ 6bc: c4 50 subi r28, 0x04 ; 4
+ 6be: d2 40 sbci r29, 0x02 ; 2
+ 6c0: 0f b6 in r0, 0x3f ; 63
+ 6c2: f8 94 cli
+ 6c4: de bf out 0x3e, r29 ; 62
+ 6c6: 0f be out 0x3f, r0 ; 63
+ 6c8: cd bf out 0x3d, r28 ; 61
+ uint8_t ConfigDescriptorData[512];
+ void* CurrConfigLocation = ConfigDescriptorData;
+ 6ca: ae 01 movw r20, r28
+ 6cc: 4b 5f subi r20, 0xFB ; 251
+ 6ce: 5f 4f sbci r21, 0xFF ; 255
+ 6d0: 5a 83 std Y+2, r21 ; 0x02
+ 6d2: 49 83 std Y+1, r20 ; 0x01
+ USB_Descriptor_Interface_t* AudioControlInterface = NULL;
+ USB_Descriptor_Interface_t* AudioStreamingInterface = NULL;
+ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL;
+
+ /* Retrieve the entire configuration descriptor into the allocated buffer */
+ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData)))
+ 6d4: 23 e0 ldi r18, 0x03 ; 3
+ 6d6: e2 2e mov r14, r18
+ 6d8: f1 2c mov r15, r1
+ 6da: ec 0e add r14, r28
+ 6dc: fd 1e adc r15, r29
+ 6de: 81 e0 ldi r24, 0x01 ; 1
+ 6e0: b7 01 movw r22, r14
+ 6e2: 20 e0 ldi r18, 0x00 ; 0
+ 6e4: 32 e0 ldi r19, 0x02 ; 2
+ 6e6: 09 d4 rcall .+2066 ; 0xefa <USB_Host_GetDeviceConfigDescriptor>
+ 6e8: 85 30 cpi r24, 0x05 ; 5
+ 6ea: 09 f4 brne .+2 ; 0x6ee <ProcessConfigurationDescriptor+0x4a>
+ 6ec: 5c c0 rjmp .+184 ; 0x7a6 <ProcessConfigurationDescriptor+0x102>
+ 6ee: 86 30 cpi r24, 0x06 ; 6
+ 6f0: 61 f0 breq .+24 ; 0x70a <ProcessConfigurationDescriptor+0x66>
+ 6f2: 88 23 and r24, r24
+ 6f4: 61 f4 brne .+24 ; 0x70e <ProcessConfigurationDescriptor+0x6a>
+ 6f6: 00 e0 ldi r16, 0x00 ; 0
+ 6f8: 10 e0 ldi r17, 0x00 ; 0
+ 6fa: cc 24 eor r12, r12
+ 6fc: dd 24 eor r13, r13
+ 6fe: 57 01 movw r10, r14
+ 700: 7e 01 movw r14, r28
+ 702: 08 94 sec
+ 704: e1 1c adc r14, r1
+ 706: f1 1c adc r15, r1
+ 708: 07 c0 rjmp .+14 ; 0x718 <ProcessConfigurationDescriptor+0x74>
+ {
+ case HOST_GETCONFIG_Successful:
+ break;
+ case HOST_GETCONFIG_InvalidData:
+ return InvalidConfigDataReturned;
+ 70a: 83 e0 ldi r24, 0x03 ; 3
+ 70c: 4f c0 rjmp .+158 ; 0x7ac <ProcessConfigurationDescriptor+0x108>
+ case HOST_GETCONFIG_BuffOverflow:
+ return DescriptorTooLarge;
+ default:
+ return ControlError;
+ 70e: 81 e0 ldi r24, 0x01 ; 1
+ 710: 4d c0 rjmp .+154 ; 0x7ac <ProcessConfigurationDescriptor+0x108>
+ USB_Descriptor_Interface_t* AudioControlInterface = NULL;
+ USB_Descriptor_Interface_t* AudioStreamingInterface = NULL;
+ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL;
+
+ /* Retrieve the entire configuration descriptor into the allocated buffer */
+ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData)))
+ 712: 9c 01 movw r18, r24
+ 714: 03 2f mov r16, r19
+ 716: 18 2f mov r17, r24
+ return ControlError;
+ }
+
+ while (!(DataINEndpoint))
+ {
+ if (!(AudioControlInterface) ||
+ 718: c1 14 cp r12, r1
+ 71a: d1 04 cpc r13, r1
+ 71c: 41 f0 breq .+16 ; 0x72e <ProcessConfigurationDescriptor+0x8a>
+ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ 71e: c5 01 movw r24, r10
+ 720: b7 01 movw r22, r14
+ 722: 41 e4 ldi r20, 0x41 ; 65
+ 724: 53 e0 ldi r21, 0x03 ; 3
+ 726: 40 d4 rcall .+2176 ; 0xfa8 <USB_GetNextDescriptorComp>
+ return ControlError;
+ }
+
+ while (!(DataINEndpoint))
+ {
+ if (!(AudioControlInterface) ||
+ 728: 88 23 and r24, r24
+ 72a: 51 f4 brne .+20 ; 0x740 <ProcessConfigurationDescriptor+0x9c>
+ 72c: 1c c0 rjmp .+56 ; 0x766 <ProcessConfigurationDescriptor+0xc2>
+ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ DComp_NextAudioInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+ {
+ if (!(AudioControlInterface))
+ {
+ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ 72e: c5 01 movw r24, r10
+ 730: b7 01 movw r22, r14
+ 732: 4f e1 ldi r20, 0x1F ; 31
+ 734: 53 e0 ldi r21, 0x03 ; 3
+ 736: 38 d4 rcall .+2160 ; 0xfa8 <USB_GetNextDescriptorComp>
+ 738: 88 23 and r24, r24
+ 73a: b9 f5 brne .+110 ; 0x7aa <ProcessConfigurationDescriptor+0x106>
+ /* Descriptor not found, error out */
+ return NoCompatibleInterfaceFound;
+ }
+
+ /* Save the interface in case we need to refer back to it later */
+ AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t);
+ 73c: c9 80 ldd r12, Y+1 ; 0x01
+ 73e: da 80 ldd r13, Y+2 ; 0x02
+ }
+
+ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ 740: c5 01 movw r24, r10
+ 742: b7 01 movw r22, r14
+ 744: 40 e3 ldi r20, 0x30 ; 48
+ 746: 53 e0 ldi r21, 0x03 ; 3
+ 748: 2f d4 rcall .+2142 ; 0xfa8 <USB_GetNextDescriptorComp>
+ 74a: 88 23 and r24, r24
+ 74c: 49 f0 breq .+18 ; 0x760 <ProcessConfigurationDescriptor+0xbc>
+ DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+ {
+ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ 74e: c5 01 movw r24, r10
+ 750: b7 01 movw r22, r14
+ 752: 4f e1 ldi r20, 0x1F ; 31
+ 754: 53 e0 ldi r21, 0x03 ; 3
+ 756: 28 d4 rcall .+2128 ; 0xfa8 <USB_GetNextDescriptorComp>
+ 758: 88 23 and r24, r24
+ 75a: 39 f5 brne .+78 ; 0x7aa <ProcessConfigurationDescriptor+0x106>
+ /* Descriptor not found, error out */
+ return NoCompatibleInterfaceFound;
+ }
+
+ /* Save the interface in case we need to refer back to it later */
+ AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t);
+ 75c: c9 80 ldd r12, Y+1 ; 0x01
+ 75e: da 80 ldd r13, Y+2 ; 0x02
+ }
+
+ /* Save the interface in case we need to refer back to it later */
+ AudioStreamingInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t);
+ 760: 09 81 ldd r16, Y+1 ; 0x01
+ 762: 1a 81 ldd r17, Y+2 ; 0x02
+
+ /* Skip the remainder of the loop as we have not found an endpoint yet */
+ continue;
+ 764: 35 c0 rjmp .+106 ; 0x7d0 <ProcessConfigurationDescriptor+0x12c>
+ }
+
+ /* Retrieve the endpoint address from the endpoint descriptor */
+ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t);
+ 766: e9 81 ldd r30, Y+1 ; 0x01
+ 768: fa 81 ldd r31, Y+2 ; 0x02
+
+ /* If the endpoint is a IN type endpoint */
+ if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)
+ 76a: 82 81 ldd r24, Z+2 ; 0x02
+ 76c: 87 ff sbrs r24, 7
+ 76e: 30 c0 rjmp .+96 ; 0x7d0 <ProcessConfigurationDescriptor+0x12c>
+ 770: 90 2f mov r25, r16
+ 772: 81 2f mov r24, r17
+ return DescriptorTooLarge;
+ default:
+ return ControlError;
+ }
+
+ while (!(DataINEndpoint))
+ 774: 30 97 sbiw r30, 0x00 ; 0
+ 776: 69 f2 breq .-102 ; 0x712 <ProcessConfigurationDescriptor+0x6e>
+ /* If the endpoint is a IN type endpoint */
+ if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)
+ DataINEndpoint = EndpointData;
+ }
+
+ StreamingInterfaceIndex = AudioStreamingInterface->InterfaceNumber;
+ 778: d8 01 movw r26, r16
+ 77a: 12 96 adiw r26, 0x02 ; 2
+ 77c: 8c 91 ld r24, X
+ 77e: 12 97 sbiw r26, 0x02 ; 2
+ 780: 80 93 1c 01 sts 0x011C, r24
+ StreamingInterfaceAltSetting = AudioStreamingInterface->AlternateSetting;
+ 784: 13 96 adiw r26, 0x03 ; 3
+ 786: 8c 91 ld r24, X
+ 788: 80 93 1d 01 sts 0x011D, r24
+ StreamingEndpointAddress = DataINEndpoint->EndpointAddress;
+ 78c: 22 81 ldd r18, Z+2 ; 0x02
+ 78e: 20 93 1e 01 sts 0x011E, r18
+
+ /* Configure the HID data IN pipe */
+ Pipe_ConfigurePipe(AUDIO_DATA_IN_PIPE, EP_TYPE_ISOCHRONOUS, PIPE_TOKEN_IN,
+ 792: 04 81 ldd r16, Z+4 ; 0x04
+ 794: 15 81 ldd r17, Z+5 ; 0x05
+ 796: 81 e0 ldi r24, 0x01 ; 1
+ 798: 61 e0 ldi r22, 0x01 ; 1
+ 79a: 40 e1 ldi r20, 0x10 ; 16
+ 79c: 94 e0 ldi r25, 0x04 ; 4
+ 79e: e9 2e mov r14, r25
+ 7a0: 22 d2 rcall .+1092 ; 0xbe6 <Pipe_ConfigurePipe>
+ DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, PIPE_BANK_DOUBLE);
+
+ /* Valid data found, return success */
+ return SuccessfulConfigRead;
+ 7a2: 80 e0 ldi r24, 0x00 ; 0
+ 7a4: 03 c0 rjmp .+6 ; 0x7ac <ProcessConfigurationDescriptor+0x108>
+ case HOST_GETCONFIG_Successful:
+ break;
+ case HOST_GETCONFIG_InvalidData:
+ return InvalidConfigDataReturned;
+ case HOST_GETCONFIG_BuffOverflow:
+ return DescriptorTooLarge;
+ 7a6: 82 e0 ldi r24, 0x02 ; 2
+ 7a8: 01 c0 rjmp .+2 ; 0x7ac <ProcessConfigurationDescriptor+0x108>
+ {
+ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ DComp_NextAudioControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+ {
+ /* Descriptor not found, error out */
+ return NoCompatibleInterfaceFound;
+ 7aa: 84 e0 ldi r24, 0x04 ; 4
+ Pipe_ConfigurePipe(AUDIO_DATA_IN_PIPE, EP_TYPE_ISOCHRONOUS, PIPE_TOKEN_IN,
+ DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, PIPE_BANK_DOUBLE);
+
+ /* Valid data found, return success */
+ return SuccessfulConfigRead;
+}
+ 7ac: cc 5f subi r28, 0xFC ; 252
+ 7ae: dd 4f sbci r29, 0xFD ; 253
+ 7b0: 0f b6 in r0, 0x3f ; 63
+ 7b2: f8 94 cli
+ 7b4: de bf out 0x3e, r29 ; 62
+ 7b6: 0f be out 0x3f, r0 ; 63
+ 7b8: cd bf out 0x3d, r28 ; 61
+ 7ba: cf 91 pop r28
+ 7bc: df 91 pop r29
+ 7be: 1f 91 pop r17
+ 7c0: 0f 91 pop r16
+ 7c2: ff 90 pop r15
+ 7c4: ef 90 pop r14
+ 7c6: df 90 pop r13
+ 7c8: cf 90 pop r12
+ 7ca: bf 90 pop r11
+ 7cc: af 90 pop r10
+ 7ce: 08 95 ret
+ USB_Descriptor_Interface_t* AudioControlInterface = NULL;
+ USB_Descriptor_Interface_t* AudioStreamingInterface = NULL;
+ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL;
+
+ /* Retrieve the entire configuration descriptor into the allocated buffer */
+ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData)))
+ 7d0: 90 2f mov r25, r16
+ 7d2: 81 2f mov r24, r17
+ 7d4: 9e cf rjmp .-196 ; 0x712 <ProcessConfigurationDescriptor+0x6e>
+
+000007d6 <USB_Host_ResetDevice>:
+ * \return Boolean \c true if the bus is currently suspended, \c false otherwise.
+ */
+ static inline bool USB_Host_IsBusSuspended(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool USB_Host_IsBusSuspended(void)
+ {
+ return ((UHCON & (1 << SOFEN)) ? false : true);
+ 7d6: 80 91 9e 00 lds r24, 0x009E
+ 7da: 90 e0 ldi r25, 0x00 ; 0
+ 7dc: 81 70 andi r24, 0x01 ; 1
+ 7de: 90 70 andi r25, 0x00 ; 0
+ break;
+ case USB_INT_DCONNI:
+ UHIEN &= ~(1 << DCONNE);
+ break;
+ case USB_INT_DDISCI:
+ UHIEN &= ~(1 << DDISCE);
+ 7e0: 20 91 a0 00 lds r18, 0x00A0
+ 7e4: 2d 7f andi r18, 0xFD ; 253
+ 7e6: 20 93 a0 00 sts 0x00A0, r18
+ * woken up automatically and the bus resumed after the reset has been correctly issued.
+ */
+ static inline void USB_Host_ResetBus(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_ResetBus(void)
+ {
+ UHCON |= (1 << RESET);
+ 7ea: 20 91 9e 00 lds r18, 0x009E
+ 7ee: 22 60 ori r18, 0x02 ; 2
+ 7f0: 20 93 9e 00 sts 0x009E, r18
+ * \return Boolean \c true if no bus reset is currently being sent, \c false otherwise.
+ */
+ static inline bool USB_Host_IsBusResetComplete(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool USB_Host_IsBusResetComplete(void)
+ {
+ return ((UHCON & (1 << RESET)) ? false : true);
+ 7f4: 20 91 9e 00 lds r18, 0x009E
+ bool BusSuspended = USB_Host_IsBusSuspended();
+
+ USB_INT_Disable(USB_INT_DDISCI);
+
+ USB_Host_ResetBus();
+ while (!(USB_Host_IsBusResetComplete()));
+ 7f8: 21 fd sbrc r18, 1
+ 7fa: fc cf rjmp .-8 ; 0x7f4 <USB_Host_ResetDevice+0x1e>
+ * host and attached device may occur.
+ */
+ static inline void USB_Host_ResumeBus(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_ResumeBus(void)
+ {
+ UHCON |= (1 << SOFEN);
+ 7fc: 20 91 9e 00 lds r18, 0x009E
+ 800: 21 60 ori r18, 0x01 ; 1
+ 802: 20 93 9e 00 sts 0x009E, r18
+ case USB_INT_RXSTPI:
+ return (UEIENX & (1 << RXSTPE));
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ return (UHIEN & (1 << HSOFE));
+ 806: 20 91 a0 00 lds r18, 0x00A0
+ 80a: 30 e0 ldi r19, 0x00 ; 0
+ 80c: 20 72 andi r18, 0x20 ; 32
+ 80e: 30 70 andi r19, 0x00 ; 0
+ UEIENX &= ~(1 << RXSTPE);
+ break;
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHIEN &= ~(1 << HSOFE);
+ 810: 40 91 a0 00 lds r20, 0x00A0
+ 814: 4f 7d andi r20, 0xDF ; 223
+ 816: 40 93 a0 00 sts 0x00A0, r20
+ UEINTX &= ~(1 << RXSTPI);
+ break;
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHINT &= ~(1 << HSOFI);
+ 81a: 40 91 9f 00 lds r20, 0x009F
+ 81e: 4f 7d andi r20, 0xDF ; 223
+ 820: 40 93 9f 00 sts 0x009F, r20
+ 824: 4a e0 ldi r20, 0x0A ; 10
+ case USB_INT_RXSTPI:
+ return (UEINTX & (1 << RXSTPI));
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ return (UHINT & (1 << HSOFI));
+ 826: 50 91 9f 00 lds r21, 0x009F
+ /* Workaround for powerless-pull-up devices. After a USB bus reset,
+ all disconnection interrupts are suppressed while a USB frame is
+ looked for - if it is found within 10ms, the device is still
+ present. */
+
+ if (USB_INT_HasOccurred(USB_INT_HSOFI))
+ 82a: 55 ff sbrs r21, 5
+ 82c: 0b c0 rjmp .+22 ; 0x844 <USB_Host_ResetDevice+0x6e>
+ UEINTX &= ~(1 << RXSTPI);
+ break;
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHINT &= ~(1 << HSOFI);
+ 82e: 40 91 9f 00 lds r20, 0x009F
+ 832: 4f 7d andi r20, 0xDF ; 223
+ 834: 40 93 9f 00 sts 0x009F, r20
+ break;
+ case USB_INT_DCONNI:
+ UHINT &= ~(1 << DCONNI);
+ break;
+ case USB_INT_DDISCI:
+ UHINT &= ~(1 << DDISCI);
+ 838: 40 91 9f 00 lds r20, 0x009F
+ 83c: 4d 7f andi r20, 0xFD ; 253
+ 83e: 40 93 9f 00 sts 0x009F, r20
+ 842: 08 c0 rjmp .+16 ; 0x854 <USB_Host_ResetDevice+0x7e>
+ #else
+ //round up by default
+ __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+ #endif
+
+ __builtin_avr_delay_cycles(__ticks_dc);
+ 844: ef ec ldi r30, 0xCF ; 207
+ 846: f7 e0 ldi r31, 0x07 ; 7
+ 848: 31 97 sbiw r30, 0x01 ; 1
+ 84a: f1 f7 brne .-4 ; 0x848 <USB_Host_ResetDevice+0x72>
+ 84c: 00 c0 rjmp .+0 ; 0x84e <USB_Host_ResetDevice+0x78>
+ 84e: 00 00 nop
+ 850: 41 50 subi r20, 0x01 ; 1
+ bool HSOFIEnabled = USB_INT_IsEnabled(USB_INT_HSOFI);
+
+ USB_INT_Disable(USB_INT_HSOFI);
+ USB_INT_Clear(USB_INT_HSOFI);
+
+ for (uint8_t MSRem = 10; MSRem != 0; MSRem--)
+ 852: 49 f7 brne .-46 ; 0x826 <USB_Host_ResetDevice+0x50>
+ }
+
+ Delay_MS(1);
+ }
+
+ if (HSOFIEnabled)
+ 854: 21 15 cp r18, r1
+ 856: 31 05 cpc r19, r1
+ 858: 29 f0 breq .+10 ; 0x864 <USB_Host_ResetDevice+0x8e>
+ UEIENX |= (1 << RXSTPE);
+ break;
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHIEN |= (1 << HSOFE);
+ 85a: 20 91 a0 00 lds r18, 0x00A0
+ 85e: 20 62 ori r18, 0x20 ; 32
+ 860: 20 93 a0 00 sts 0x00A0, r18
+ USB_INT_Enable(USB_INT_HSOFI);
+
+ if (BusSuspended)
+ 864: 00 97 sbiw r24, 0x00 ; 0
+ 866: 29 f4 brne .+10 ; 0x872 <USB_Host_ResetDevice+0x9c>
+ * messages to the device.
+ */
+ static inline void USB_Host_SuspendBus(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_SuspendBus(void)
+ {
+ UHCON &= ~(1 << SOFEN);
+ 868: 80 91 9e 00 lds r24, 0x009E
+ 86c: 8e 7f andi r24, 0xFE ; 254
+ 86e: 80 93 9e 00 sts 0x009E, r24
+ break;
+ case USB_INT_DCONNI:
+ UHIEN |= (1 << DCONNE);
+ break;
+ case USB_INT_DDISCI:
+ UHIEN |= (1 << DDISCE);
+ 872: 80 91 a0 00 lds r24, 0x00A0
+ 876: 82 60 ori r24, 0x02 ; 2
+ 878: 80 93 a0 00 sts 0x00A0, r24
+ USB_Host_SuspendBus();
+
+ USB_INT_Enable(USB_INT_DDISCI);
+}
+ 87c: 08 95 ret
+
+0000087e <USB_Host_WaitMS>:
+ * \return Boolean \c true if the bus is currently suspended, \c false otherwise.
+ */
+ static inline bool USB_Host_IsBusSuspended(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool USB_Host_IsBusSuspended(void)
+ {
+ return ((UHCON & (1 << SOFEN)) ? false : true);
+ 87e: 40 91 9e 00 lds r20, 0x009E
+ 882: 50 e0 ldi r21, 0x00 ; 0
+ 884: 41 70 andi r20, 0x01 ; 1
+ 886: 50 70 andi r21, 0x00 ; 0
+ case USB_INT_RXSTPI:
+ return (UEIENX & (1 << RXSTPE));
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ return (UHIEN & (1 << HSOFE));
+ 888: 20 91 a0 00 lds r18, 0x00A0
+ 88c: 30 e0 ldi r19, 0x00 ; 0
+ 88e: 20 72 andi r18, 0x20 ; 32
+ 890: 30 70 andi r19, 0x00 ; 0
+ UEIENX &= ~(1 << RXSTPE);
+ break;
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHIEN &= ~(1 << HSOFE);
+ 892: 90 91 a0 00 lds r25, 0x00A0
+ 896: 9f 7d andi r25, 0xDF ; 223
+ 898: 90 93 a0 00 sts 0x00A0, r25
+ UEINTX &= ~(1 << RXSTPI);
+ break;
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHINT &= ~(1 << HSOFI);
+ 89c: 90 91 9f 00 lds r25, 0x009F
+ 8a0: 9f 7d andi r25, 0xDF ; 223
+ 8a2: 90 93 9f 00 sts 0x009F, r25
+ * host and attached device may occur.
+ */
+ static inline void USB_Host_ResumeBus(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_ResumeBus(void)
+ {
+ UHCON |= (1 << SOFEN);
+ 8a6: 90 91 9e 00 lds r25, 0x009E
+ 8aa: 91 60 ori r25, 0x01 ; 1
+ 8ac: 90 93 9e 00 sts 0x009E, r25
+ USB_INT_Disable(USB_INT_HSOFI);
+ USB_INT_Clear(USB_INT_HSOFI);
+
+ USB_Host_ResumeBus();
+
+ while (MS)
+ 8b0: 26 c0 rjmp .+76 ; 0x8fe <USB_Host_WaitMS+0x80>
+ case USB_INT_RXSTPI:
+ return (UEINTX & (1 << RXSTPI));
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ return (UHINT & (1 << HSOFI));
+ 8b2: 90 91 9f 00 lds r25, 0x009F
+ {
+ if (USB_INT_HasOccurred(USB_INT_HSOFI))
+ 8b6: 95 ff sbrs r25, 5
+ 8b8: 06 c0 rjmp .+12 ; 0x8c6 <USB_Host_WaitMS+0x48>
+ UEINTX &= ~(1 << RXSTPI);
+ break;
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHINT &= ~(1 << HSOFI);
+ 8ba: 90 91 9f 00 lds r25, 0x009F
+ 8be: 9f 7d andi r25, 0xDF ; 223
+ 8c0: 90 93 9f 00 sts 0x009F, r25
+ {
+ USB_INT_Clear(USB_INT_HSOFI);
+ MS--;
+ 8c4: 81 50 subi r24, 0x01 ; 1
+ }
+
+ if ((USB_HostState == HOST_STATE_Unattached) || (USB_CurrentMode != USB_MODE_Host))
+ 8c6: 90 91 2b 01 lds r25, 0x012B
+ 8ca: 92 30 cpi r25, 0x02 ; 2
+ 8cc: d9 f0 breq .+54 ; 0x904 <USB_Host_WaitMS+0x86>
+ * \return Boolean \c true if an error has occurred on the selected pipe, \c false otherwise.
+ */
+ static inline bool Pipe_IsError(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Pipe_IsError(void)
+ {
+ return ((UPINTX & (1 << PERRI)) ? true : false);
+ 8ce: 90 91 a6 00 lds r25, 0x00A6
+ ErrorCode = HOST_WAITERROR_DeviceDisconnect;
+
+ break;
+ }
+
+ if (Pipe_IsError() == true)
+ 8d2: 94 ff sbrs r25, 4
+ 8d4: 09 c0 rjmp .+18 ; 0x8e8 <USB_Host_WaitMS+0x6a>
+
+ /** Clears the error flags for the currently selected pipe. */
+ static inline void Pipe_ClearError(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ClearError(void)
+ {
+ UPERRX = 0;
+ 8d6: 10 92 f5 00 sts 0x00F5, r1
+ UPINTX &= ~(1 << PERRI);
+ 8da: 80 91 a6 00 lds r24, 0x00A6
+ 8de: 8f 7e andi r24, 0xEF ; 239
+ 8e0: 80 93 a6 00 sts 0x00A6, r24
+ {
+ Pipe_ClearError();
+ ErrorCode = HOST_WAITERROR_PipeError;
+ 8e4: 82 e0 ldi r24, 0x02 ; 2
+
+ break;
+ 8e6: 0f c0 rjmp .+30 ; 0x906 <USB_Host_WaitMS+0x88>
+ * \return Boolean \c true if the current pipe has been stalled by the attached device, \c false otherwise.
+ */
+ static inline bool Pipe_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Pipe_IsStalled(void)
+ {
+ return ((UPINTX & (1 << RXSTALLI)) ? true : false);
+ 8e8: 90 91 a6 00 lds r25, 0x00A6
+ }
+
+ if (Pipe_IsStalled() == true)
+ 8ec: 91 ff sbrs r25, 1
+ 8ee: 07 c0 rjmp .+14 ; 0x8fe <USB_Host_WaitMS+0x80>
+ * \ingroup Group_PipePacketManagement_AVR8
+ */
+ static inline void Pipe_ClearStall(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ClearStall(void)
+ {
+ UPINTX &= ~(1 << RXSTALLI);
+ 8f0: 80 91 a6 00 lds r24, 0x00A6
+ 8f4: 8d 7f andi r24, 0xFD ; 253
+ 8f6: 80 93 a6 00 sts 0x00A6, r24
+ {
+ Pipe_ClearStall();
+ ErrorCode = HOST_WAITERROR_SetupStalled;
+ 8fa: 83 e0 ldi r24, 0x03 ; 3
+
+ break;
+ 8fc: 04 c0 rjmp .+8 ; 0x906 <USB_Host_WaitMS+0x88>
+ USB_INT_Disable(USB_INT_HSOFI);
+ USB_INT_Clear(USB_INT_HSOFI);
+
+ USB_Host_ResumeBus();
+
+ while (MS)
+ 8fe: 88 23 and r24, r24
+ 900: c1 f6 brne .-80 ; 0x8b2 <USB_Host_WaitMS+0x34>
+ 902: 01 c0 rjmp .+2 ; 0x906 <USB_Host_WaitMS+0x88>
+ MS--;
+ }
+
+ if ((USB_HostState == HOST_STATE_Unattached) || (USB_CurrentMode != USB_MODE_Host))
+ {
+ ErrorCode = HOST_WAITERROR_DeviceDisconnect;
+ 904: 81 e0 ldi r24, 0x01 ; 1
+
+ break;
+ }
+ }
+
+ if (BusSuspended)
+ 906: 41 15 cp r20, r1
+ 908: 51 05 cpc r21, r1
+ 90a: 29 f4 brne .+10 ; 0x916 <USB_Host_WaitMS+0x98>
+ * messages to the device.
+ */
+ static inline void USB_Host_SuspendBus(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_SuspendBus(void)
+ {
+ UHCON &= ~(1 << SOFEN);
+ 90c: 90 91 9e 00 lds r25, 0x009E
+ 910: 9e 7f andi r25, 0xFE ; 254
+ 912: 90 93 9e 00 sts 0x009E, r25
+ USB_Host_SuspendBus();
+
+ if (HSOFIEnabled)
+ 916: 21 15 cp r18, r1
+ 918: 31 05 cpc r19, r1
+ 91a: 29 f0 breq .+10 ; 0x926 <USB_Host_WaitMS+0xa8>
+ UEIENX |= (1 << RXSTPE);
+ break;
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHIEN |= (1 << HSOFE);
+ 91c: 90 91 a0 00 lds r25, 0x00A0
+ 920: 90 62 ori r25, 0x20 ; 32
+ 922: 90 93 a0 00 sts 0x00A0, r25
+ USB_INT_Enable(USB_INT_HSOFI);
+
+ return ErrorCode;
+}
+ 926: 08 95 ret
+
+00000928 <USB_Host_ProcessNextHostState>:
+
+#define __INCLUDE_FROM_HOST_C
+#include "../Host.h"
+
+void USB_Host_ProcessNextHostState(void)
+{
+ 928: ef 92 push r14
+ 92a: 0f 93 push r16
+ 92c: 1f 93 push r17
+ 92e: df 93 push r29
+ 930: cf 93 push r28
+ 932: cd b7 in r28, 0x3d ; 61
+ 934: de b7 in r29, 0x3e ; 62
+ 936: 28 97 sbiw r28, 0x08 ; 8
+ 938: 0f b6 in r0, 0x3f ; 63
+ 93a: f8 94 cli
+ 93c: de bf out 0x3e, r29 ; 62
+ 93e: 0f be out 0x3f, r0 ; 63
+ 940: cd bf out 0x3d, r28 ; 61
+ uint8_t SubErrorCode = HOST_ENUMERROR_NoError;
+
+ static uint16_t WaitMSRemaining;
+ static uint8_t PostWaitState;
+
+ switch (USB_HostState)
+ 942: 80 91 2b 01 lds r24, 0x012B
+ 946: 86 30 cpi r24, 0x06 ; 6
+ 948: 09 f4 brne .+2 ; 0x94c <USB_Host_ProcessNextHostState+0x24>
+ 94a: 99 c0 rjmp .+306 ; 0xa7e <USB_Host_ProcessNextHostState+0x156>
+ 94c: 87 30 cpi r24, 0x07 ; 7
+ 94e: 70 f4 brcc .+28 ; 0x96c <USB_Host_ProcessNextHostState+0x44>
+ 950: 83 30 cpi r24, 0x03 ; 3
+ 952: c9 f1 breq .+114 ; 0x9c6 <USB_Host_ProcessNextHostState+0x9e>
+ 954: 84 30 cpi r24, 0x04 ; 4
+ 956: 20 f4 brcc .+8 ; 0x960 <USB_Host_ProcessNextHostState+0x38>
+ 958: 81 30 cpi r24, 0x01 ; 1
+ 95a: 09 f0 breq .+2 ; 0x95e <USB_Host_ProcessNextHostState+0x36>
+ 95c: 0b c1 rjmp .+534 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ 95e: 13 c0 rjmp .+38 ; 0x986 <USB_Host_ProcessNextHostState+0x5e>
+ 960: 84 30 cpi r24, 0x04 ; 4
+ 962: c9 f1 breq .+114 ; 0x9d6 <USB_Host_ProcessNextHostState+0xae>
+ 964: 85 30 cpi r24, 0x05 ; 5
+ 966: 09 f0 breq .+2 ; 0x96a <USB_Host_ProcessNextHostState+0x42>
+ 968: 05 c1 rjmp .+522 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ 96a: 60 c0 rjmp .+192 ; 0xa2c <USB_Host_ProcessNextHostState+0x104>
+ 96c: 88 30 cpi r24, 0x08 ; 8
+ 96e: 09 f4 brne .+2 ; 0x972 <USB_Host_ProcessNextHostState+0x4a>
+ 970: a0 c0 rjmp .+320 ; 0xab2 <USB_Host_ProcessNextHostState+0x18a>
+ 972: 88 30 cpi r24, 0x08 ; 8
+ 974: 08 f4 brcc .+2 ; 0x978 <USB_Host_ProcessNextHostState+0x50>
+ 976: 8f c0 rjmp .+286 ; 0xa96 <USB_Host_ProcessNextHostState+0x16e>
+ 978: 89 30 cpi r24, 0x09 ; 9
+ 97a: 09 f4 brne .+2 ; 0x97e <USB_Host_ProcessNextHostState+0x56>
+ 97c: b9 c0 rjmp .+370 ; 0xaf0 <USB_Host_ProcessNextHostState+0x1c8>
+ 97e: 8a 30 cpi r24, 0x0A ; 10
+ 980: 09 f0 breq .+2 ; 0x984 <USB_Host_ProcessNextHostState+0x5c>
+ 982: f8 c0 rjmp .+496 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ 984: de c0 rjmp .+444 ; 0xb42 <USB_Host_ProcessNextHostState+0x21a>
+ {
+ case HOST_STATE_WaitForDevice:
+ if (WaitMSRemaining)
+ 986: 00 91 20 01 lds r16, 0x0120
+ 98a: 10 91 21 01 lds r17, 0x0121
+ 98e: 01 15 cp r16, r1
+ 990: 11 05 cpc r17, r1
+ 992: 09 f4 brne .+2 ; 0x996 <USB_Host_ProcessNextHostState+0x6e>
+ 994: ef c0 rjmp .+478 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ {
+ if ((SubErrorCode = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
+ 996: 81 e0 ldi r24, 0x01 ; 1
+ 998: 72 df rcall .-284 ; 0x87e <USB_Host_WaitMS>
+ 99a: 68 2f mov r22, r24
+ 99c: 88 23 and r24, r24
+ 99e: 31 f0 breq .+12 ; 0x9ac <USB_Host_ProcessNextHostState+0x84>
+ {
+ USB_HostState = PostWaitState;
+ 9a0: 80 91 1f 01 lds r24, 0x011F
+ 9a4: 80 93 2b 01 sts 0x012B, r24
+ ErrorCode = HOST_ENUMERROR_WaitStage;
+ 9a8: 81 e0 ldi r24, 0x01 ; 1
+ break;
+ 9aa: e0 c0 rjmp .+448 ; 0xb6c <USB_Host_ProcessNextHostState+0x244>
+ }
+
+ if (!(--WaitMSRemaining))
+ 9ac: 01 50 subi r16, 0x01 ; 1
+ 9ae: 10 40 sbci r17, 0x00 ; 0
+ 9b0: 10 93 21 01 sts 0x0121, r17
+ 9b4: 00 93 20 01 sts 0x0120, r16
+ 9b8: 01 15 cp r16, r1
+ 9ba: 11 05 cpc r17, r1
+ 9bc: 09 f0 breq .+2 ; 0x9c0 <USB_Host_ProcessNextHostState+0x98>
+ 9be: da c0 rjmp .+436 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ USB_HostState = PostWaitState;
+ 9c0: 80 91 1f 01 lds r24, 0x011F
+ 9c4: c3 c0 rjmp .+390 ; 0xb4c <USB_Host_ProcessNextHostState+0x224>
+ }
+
+ break;
+ case HOST_STATE_Powered:
+ WaitMSRemaining = HOST_DEVICE_SETTLE_DELAY_MS;
+ 9c6: 88 ee ldi r24, 0xE8 ; 232
+ 9c8: 93 e0 ldi r25, 0x03 ; 3
+ 9ca: 90 93 21 01 sts 0x0121, r25
+ 9ce: 80 93 20 01 sts 0x0120, r24
+
+ USB_HostState = HOST_STATE_Powered_WaitForDeviceSettle;
+ 9d2: 84 e0 ldi r24, 0x04 ; 4
+ 9d4: bb c0 rjmp .+374 ; 0xb4c <USB_Host_ProcessNextHostState+0x224>
+ break;
+ case HOST_STATE_Powered_WaitForDeviceSettle:
+ if (WaitMSRemaining--)
+ 9d6: 80 91 20 01 lds r24, 0x0120
+ 9da: 90 91 21 01 lds r25, 0x0121
+ 9de: 9c 01 movw r18, r24
+ 9e0: 21 50 subi r18, 0x01 ; 1
+ 9e2: 30 40 sbci r19, 0x00 ; 0
+ 9e4: 30 93 21 01 sts 0x0121, r19
+ 9e8: 20 93 20 01 sts 0x0120, r18
+ 9ec: 00 97 sbiw r24, 0x00 ; 0
+ 9ee: 39 f0 breq .+14 ; 0x9fe <USB_Host_ProcessNextHostState+0xd6>
+ 9f0: 8f ec ldi r24, 0xCF ; 207
+ 9f2: 97 e0 ldi r25, 0x07 ; 7
+ 9f4: 01 97 sbiw r24, 0x01 ; 1
+ 9f6: f1 f7 brne .-4 ; 0x9f4 <USB_Host_ProcessNextHostState+0xcc>
+ 9f8: 00 c0 rjmp .+0 ; 0x9fa <USB_Host_ProcessNextHostState+0xd2>
+ 9fa: 00 00 nop
+ 9fc: bb c0 rjmp .+374 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ }
+
+ static inline void USB_Host_VBUS_Manual_Off(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_VBUS_Manual_Off(void)
+ {
+ PORTE &= ~(1 << 7);
+ 9fe: 77 98 cbi 0x0e, 7 ; 14
+
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
+ static inline void USB_OTGPAD_On(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_OTGPAD_On(void)
+ {
+ USBCON |= (1 << OTGPADE);
+ a00: 80 91 d8 00 lds r24, 0x00D8
+ a04: 80 61 ori r24, 0x10 ; 16
+ a06: 80 93 d8 00 sts 0x00D8, r24
+ }
+
+ static inline void USB_Host_VBUS_Auto_Enable(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_VBUS_Auto_Enable(void)
+ {
+ OTGCON &= ~(1 << VBUSHWC);
+ a0a: 80 91 dd 00 lds r24, 0x00DD
+ a0e: 8b 7f andi r24, 0xFB ; 251
+ a10: 80 93 dd 00 sts 0x00DD, r24
+ UHWCON |= (1 << UVCONE);
+ a14: 80 91 d7 00 lds r24, 0x00D7
+ a18: 80 61 ori r24, 0x10 ; 16
+ a1a: 80 93 d7 00 sts 0x00D7, r24
+ }
+
+ static inline void USB_Host_VBUS_Auto_On(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_VBUS_Auto_On(void)
+ {
+ OTGCON |= (1 << VBUSREQ);
+ a1e: 80 91 dd 00 lds r24, 0x00DD
+ a22: 82 60 ori r24, 0x02 ; 2
+ a24: 80 93 dd 00 sts 0x00DD, r24
+
+ USB_OTGPAD_On();
+ USB_Host_VBUS_Auto_Enable();
+ USB_Host_VBUS_Auto_On();
+
+ USB_HostState = HOST_STATE_Powered_WaitForConnect;
+ a28: 85 e0 ldi r24, 0x05 ; 5
+ a2a: 90 c0 rjmp .+288 ; 0xb4c <USB_Host_ProcessNextHostState+0x224>
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ return (UHINT & (1 << HSOFI));
+ case USB_INT_DCONNI:
+ return (UHINT & (1 << DCONNI));
+ a2c: 80 91 9f 00 lds r24, 0x009F
+ }
+
+ break;
+ case HOST_STATE_Powered_WaitForConnect:
+ if (USB_INT_HasOccurred(USB_INT_DCONNI))
+ a30: 80 ff sbrs r24, 0
+ a32: a0 c0 rjmp .+320 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHINT &= ~(1 << HSOFI);
+ break;
+ case USB_INT_DCONNI:
+ UHINT &= ~(1 << DCONNI);
+ a34: 80 91 9f 00 lds r24, 0x009F
+ a38: 8e 7f andi r24, 0xFE ; 254
+ a3a: 80 93 9f 00 sts 0x009F, r24
+ break;
+ case USB_INT_DDISCI:
+ UHINT &= ~(1 << DDISCI);
+ a3e: 80 91 9f 00 lds r24, 0x009F
+ a42: 8d 7f andi r24, 0xFD ; 253
+ a44: 80 93 9f 00 sts 0x009F, r24
+ break;
+ case USB_INT_BCERRI:
+ OTGINT &= ~(1 << BCERRI);
+ break;
+ case USB_INT_VBERRI:
+ OTGINT &= ~(1 << VBERRI);
+ a48: 80 91 df 00 lds r24, 0x00DF
+ a4c: 8d 7f andi r24, 0xFD ; 253
+ a4e: 80 93 df 00 sts 0x00DF, r24
+ break;
+ case USB_INT_BCERRI:
+ OTGIEN |= (1 << BCERRE);
+ break;
+ case USB_INT_VBERRI:
+ OTGIEN |= (1 << VBERRE);
+ a52: 80 91 de 00 lds r24, 0x00DE
+ a56: 82 60 ori r24, 0x02 ; 2
+ a58: 80 93 de 00 sts 0x00DE, r24
+ * host and attached device may occur.
+ */
+ static inline void USB_Host_ResumeBus(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_ResumeBus(void)
+ {
+ UHCON |= (1 << SOFEN);
+ a5c: 80 91 9e 00 lds r24, 0x009E
+ a60: 81 60 ori r24, 0x01 ; 1
+ a62: 80 93 9e 00 sts 0x009E, r24
+
+ USB_INT_Clear(USB_INT_VBERRI);
+ USB_INT_Enable(USB_INT_VBERRI);
+
+ USB_Host_ResumeBus();
+ Pipe_ClearPipes();
+ a66: 26 d1 rcall .+588 ; 0xcb4 <Pipe_ClearPipes>
+
+ HOST_TASK_NONBLOCK_WAIT(100, HOST_STATE_Powered_DoReset);
+ a68: 81 e0 ldi r24, 0x01 ; 1
+ a6a: 80 93 2b 01 sts 0x012B, r24
+ a6e: 84 e6 ldi r24, 0x64 ; 100
+ a70: 90 e0 ldi r25, 0x00 ; 0
+ a72: 90 93 21 01 sts 0x0121, r25
+ a76: 80 93 20 01 sts 0x0120, r24
+ a7a: 86 e0 ldi r24, 0x06 ; 6
+ a7c: 5f c0 rjmp .+190 ; 0xb3c <USB_Host_ProcessNextHostState+0x214>
+ }
+
+ break;
+ case HOST_STATE_Powered_DoReset:
+ USB_Host_ResetDevice();
+ a7e: ab de rcall .-682 ; 0x7d6 <USB_Host_ResetDevice>
+
+ HOST_TASK_NONBLOCK_WAIT(200, HOST_STATE_Powered_ConfigPipe);
+ a80: 81 e0 ldi r24, 0x01 ; 1
+ a82: 80 93 2b 01 sts 0x012B, r24
+ a86: 88 ec ldi r24, 0xC8 ; 200
+ a88: 90 e0 ldi r25, 0x00 ; 0
+ a8a: 90 93 21 01 sts 0x0121, r25
+ a8e: 80 93 20 01 sts 0x0120, r24
+ a92: 87 e0 ldi r24, 0x07 ; 7
+ a94: 53 c0 rjmp .+166 ; 0xb3c <USB_Host_ProcessNextHostState+0x214>
+ break;
+ case HOST_STATE_Powered_ConfigPipe:
+ Pipe_ConfigurePipe(PIPE_CONTROLPIPE, EP_TYPE_CONTROL,
+ a96: 80 e0 ldi r24, 0x00 ; 0
+ a98: 60 e0 ldi r22, 0x00 ; 0
+ a9a: 40 e0 ldi r20, 0x00 ; 0
+ a9c: 20 e0 ldi r18, 0x00 ; 0
+ a9e: 00 e4 ldi r16, 0x40 ; 64
+ aa0: 10 e0 ldi r17, 0x00 ; 0
+ aa2: ee 24 eor r14, r14
+ aa4: a0 d0 rcall .+320 ; 0xbe6 <Pipe_ConfigurePipe>
+ * \return Boolean \c true if the selected pipe is configured, \c false otherwise.
+ */
+ static inline bool Pipe_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Pipe_IsConfigured(void)
+ {
+ return ((UPSTAX & (1 << CFGOK)) ? true : false);
+ aa6: 80 91 ac 00 lds r24, 0x00AC
+ PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP,
+ PIPE_CONTROLPIPE_DEFAULT_SIZE, PIPE_BANK_SINGLE);
+
+ if (!(Pipe_IsConfigured()))
+ aaa: 87 ff sbrs r24, 7
+ aac: 5b c0 rjmp .+182 ; 0xb64 <USB_Host_ProcessNextHostState+0x23c>
+ ErrorCode = HOST_ENUMERROR_PipeConfigError;
+ SubErrorCode = 0;
+ break;
+ }
+
+ USB_HostState = HOST_STATE_Default;
+ aae: 88 e0 ldi r24, 0x08 ; 8
+ ab0: 4d c0 rjmp .+154 ; 0xb4c <USB_Host_ProcessNextHostState+0x224>
+ break;
+ case HOST_STATE_Default:
+ USB_ControlRequest = (USB_Request_Header_t)
+ ab2: a3 e2 ldi r26, 0x23 ; 35
+ ab4: b1 e0 ldi r27, 0x01 ; 1
+ ab6: e3 e1 ldi r30, 0x13 ; 19
+ ab8: f1 e0 ldi r31, 0x01 ; 1
+ aba: 88 e0 ldi r24, 0x08 ; 8
+ abc: 01 90 ld r0, Z+
+ abe: 0d 92 st X+, r0
+ ac0: 81 50 subi r24, 0x01 ; 1
+ ac2: e1 f7 brne .-8 ; 0xabc <USB_Host_ProcessNextHostState+0x194>
+ .wLength = 8,
+ };
+
+ uint8_t DataBuffer[8];
+
+ if ((SubErrorCode = USB_Host_SendControlRequest(DataBuffer)) != HOST_SENDCONTROL_Successful)
+ ac4: ce 01 movw r24, r28
+ ac6: 01 96 adiw r24, 0x01 ; 1
+ ac8: dc d2 rcall .+1464 ; 0x1082 <USB_Host_SendControlRequest>
+ aca: 68 2f mov r22, r24
+ acc: 88 23 and r24, r24
+ ace: 09 f0 breq .+2 ; 0xad2 <USB_Host_ProcessNextHostState+0x1aa>
+ ad0: 4c c0 rjmp .+152 ; 0xb6a <USB_Host_ProcessNextHostState+0x242>
+ {
+ ErrorCode = HOST_ENUMERROR_ControlError;
+ break;
+ }
+
+ USB_ControlPipeSize = DataBuffer[offsetof(USB_Descriptor_Device_t, Endpoint0Size)];
+ ad2: 88 85 ldd r24, Y+8 ; 0x08
+ ad4: 80 93 1b 01 sts 0x011B, r24
+
+ USB_Host_ResetDevice();
+ ad8: 7e de rcall .-772 ; 0x7d6 <USB_Host_ResetDevice>
+
+ HOST_TASK_NONBLOCK_WAIT(200, HOST_STATE_Default_PostReset);
+ ada: 81 e0 ldi r24, 0x01 ; 1
+ adc: 80 93 2b 01 sts 0x012B, r24
+ ae0: 88 ec ldi r24, 0xC8 ; 200
+ ae2: 90 e0 ldi r25, 0x00 ; 0
+ ae4: 90 93 21 01 sts 0x0121, r25
+ ae8: 80 93 20 01 sts 0x0120, r24
+ aec: 89 e0 ldi r24, 0x09 ; 9
+ aee: 26 c0 rjmp .+76 ; 0xb3c <USB_Host_ProcessNextHostState+0x214>
+ break;
+ case HOST_STATE_Default_PostReset:
+ Pipe_ConfigurePipe(PIPE_CONTROLPIPE, EP_TYPE_CONTROL,
+ af0: 00 91 1b 01 lds r16, 0x011B
+ af4: 80 e0 ldi r24, 0x00 ; 0
+ af6: 60 e0 ldi r22, 0x00 ; 0
+ af8: 40 e0 ldi r20, 0x00 ; 0
+ afa: 20 e0 ldi r18, 0x00 ; 0
+ afc: 10 e0 ldi r17, 0x00 ; 0
+ afe: ee 24 eor r14, r14
+ b00: 72 d0 rcall .+228 ; 0xbe6 <Pipe_ConfigurePipe>
+ b02: 80 91 ac 00 lds r24, 0x00AC
+ PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP,
+ USB_ControlPipeSize, PIPE_BANK_SINGLE);
+
+ if (!(Pipe_IsConfigured()))
+ b06: 87 ff sbrs r24, 7
+ b08: 2d c0 rjmp .+90 ; 0xb64 <USB_Host_ProcessNextHostState+0x23c>
+ ErrorCode = HOST_ENUMERROR_PipeConfigError;
+ SubErrorCode = 0;
+ break;
+ }
+
+ USB_ControlRequest = (USB_Request_Header_t)
+ b0a: a3 e2 ldi r26, 0x23 ; 35
+ b0c: b1 e0 ldi r27, 0x01 ; 1
+ b0e: eb e0 ldi r30, 0x0B ; 11
+ b10: f1 e0 ldi r31, 0x01 ; 1
+ b12: 88 e0 ldi r24, 0x08 ; 8
+ b14: 01 90 ld r0, Z+
+ b16: 0d 92 st X+, r0
+ b18: 81 50 subi r24, 0x01 ; 1
+ b1a: e1 f7 brne .-8 ; 0xb14 <USB_Host_ProcessNextHostState+0x1ec>
+ .wValue = USB_HOST_DEVICEADDRESS,
+ .wIndex = 0,
+ .wLength = 0,
+ };
+
+ if ((SubErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
+ b1c: 80 e0 ldi r24, 0x00 ; 0
+ b1e: 90 e0 ldi r25, 0x00 ; 0
+ b20: b0 d2 rcall .+1376 ; 0x1082 <USB_Host_SendControlRequest>
+ b22: 68 2f mov r22, r24
+ b24: 88 23 and r24, r24
+ b26: 09 f5 brne .+66 ; 0xb6a <USB_Host_ProcessNextHostState+0x242>
+ {
+ ErrorCode = HOST_ENUMERROR_ControlError;
+ break;
+ }
+
+ HOST_TASK_NONBLOCK_WAIT(100, HOST_STATE_Default_PostAddressSet);
+ b28: 81 e0 ldi r24, 0x01 ; 1
+ b2a: 80 93 2b 01 sts 0x012B, r24
+ b2e: 84 e6 ldi r24, 0x64 ; 100
+ b30: 90 e0 ldi r25, 0x00 ; 0
+ b32: 90 93 21 01 sts 0x0121, r25
+ b36: 80 93 20 01 sts 0x0120, r24
+ b3a: 8a e0 ldi r24, 0x0A ; 10
+ b3c: 80 93 1f 01 sts 0x011F, r24
+ break;
+ b40: 19 c0 rjmp .+50 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ }
+
+ static inline void USB_Host_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_SetDeviceAddress(const uint8_t Address)
+ {
+ UHADDR = (Address & 0x7F);
+ b42: 81 e0 ldi r24, 0x01 ; 1
+ b44: 80 93 a1 00 sts 0x00A1, r24
+ case HOST_STATE_Default_PostAddressSet:
+ USB_Host_SetDeviceAddress(USB_HOST_DEVICEADDRESS);
+
+ EVENT_USB_Host_DeviceEnumerationComplete();
+ b48: 24 dc rcall .-1976 ; 0x392 <EVENT_USB_Host_DeviceEnumerationComplete>
+ USB_HostState = HOST_STATE_Addressed;
+ b4a: 8b e0 ldi r24, 0x0B ; 11
+ b4c: 80 93 2b 01 sts 0x012B, r24
+ break;
+ b50: 11 c0 rjmp .+34 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ }
+
+ if ((ErrorCode != HOST_ENUMERROR_NoError) && (USB_HostState != HOST_STATE_Unattached))
+ {
+ EVENT_USB_Host_DeviceEnumerationFailed(ErrorCode, SubErrorCode);
+ b52: 40 dc rcall .-1920 ; 0x3d4 <EVENT_USB_Host_DeviceEnumerationFailed>
+ }
+
+ static inline void USB_Host_VBUS_Auto_Off(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_VBUS_Auto_Off(void)
+ {
+ OTGCON |= (1 << VBUSRQC);
+ b54: 80 91 dd 00 lds r24, 0x00DD
+ b58: 81 60 ori r24, 0x01 ; 1
+ b5a: 80 93 dd 00 sts 0x00DD, r24
+
+ USB_Host_VBUS_Auto_Off();
+
+ EVENT_USB_Host_DeviceUnattached();
+ b5e: 14 dc rcall .-2008 ; 0x388 <EVENT_USB_Host_DeviceUnattached>
+
+ USB_ResetInterface();
+ b60: d5 d0 rcall .+426 ; 0xd0c <USB_ResetInterface>
+ b62: 08 c0 rjmp .+16 ; 0xb74 <USB_Host_ProcessNextHostState+0x24c>
+ USB_ControlPipeSize, PIPE_BANK_SINGLE);
+
+ if (!(Pipe_IsConfigured()))
+ {
+ ErrorCode = HOST_ENUMERROR_PipeConfigError;
+ SubErrorCode = 0;
+ b64: 60 e0 ldi r22, 0x00 ; 0
+ PIPE_TOKEN_SETUP, ENDPOINT_CONTROLEP,
+ USB_ControlPipeSize, PIPE_BANK_SINGLE);
+
+ if (!(Pipe_IsConfigured()))
+ {
+ ErrorCode = HOST_ENUMERROR_PipeConfigError;
+ b66: 84 e0 ldi r24, 0x04 ; 4
+ b68: 01 c0 rjmp .+2 ; 0xb6c <USB_Host_ProcessNextHostState+0x244>
+ .wLength = 0,
+ };
+
+ if ((SubErrorCode = USB_Host_SendControlRequest(NULL)) != HOST_SENDCONTROL_Successful)
+ {
+ ErrorCode = HOST_ENUMERROR_ControlError;
+ b6a: 83 e0 ldi r24, 0x03 ; 3
+ EVENT_USB_Host_DeviceEnumerationComplete();
+ USB_HostState = HOST_STATE_Addressed;
+ break;
+ }
+
+ if ((ErrorCode != HOST_ENUMERROR_NoError) && (USB_HostState != HOST_STATE_Unattached))
+ b6c: 90 91 2b 01 lds r25, 0x012B
+ b70: 92 30 cpi r25, 0x02 ; 2
+ b72: 79 f7 brne .-34 ; 0xb52 <USB_Host_ProcessNextHostState+0x22a>
+
+ EVENT_USB_Host_DeviceUnattached();
+
+ USB_ResetInterface();
+ }
+}
+ b74: 28 96 adiw r28, 0x08 ; 8
+ b76: 0f b6 in r0, 0x3f ; 63
+ b78: f8 94 cli
+ b7a: de bf out 0x3e, r29 ; 62
+ b7c: 0f be out 0x3f, r0 ; 63
+ b7e: cd bf out 0x3d, r28 ; 61
+ b80: cf 91 pop r28
+ b82: df 91 pop r29
+ b84: 1f 91 pop r17
+ b86: 0f 91 pop r16
+ b88: ef 90 pop r14
+ b8a: 08 95 ret
+
+00000b8c <USB_Host_SetDeviceConfiguration>:
+ USB_INT_Enable(USB_INT_DDISCI);
+}
+
+uint8_t USB_Host_SetDeviceConfiguration(const uint8_t ConfigNumber)
+{
+ USB_ControlRequest = (USB_Request_Header_t)
+ b8c: 10 92 23 01 sts 0x0123, r1
+ b90: 99 e0 ldi r25, 0x09 ; 9
+ b92: 90 93 24 01 sts 0x0124, r25
+ b96: 80 93 25 01 sts 0x0125, r24
+ b9a: 10 92 26 01 sts 0x0126, r1
+ b9e: 10 92 28 01 sts 0x0128, r1
+ ba2: 10 92 27 01 sts 0x0127, r1
+ ba6: 10 92 2a 01 sts 0x012A, r1
+ baa: 10 92 29 01 sts 0x0129, r1
+ * \param[in] PipeNumber Index of the pipe to select.
+ */
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber)
+ {
+ UPNUM = PipeNumber;
+ bae: 10 92 a7 00 sts 0x00A7, r1
+ .wLength = 0,
+ };
+
+ Pipe_SelectPipe(PIPE_CONTROLPIPE);
+
+ return USB_Host_SendControlRequest(NULL);
+ bb2: 80 e0 ldi r24, 0x00 ; 0
+ bb4: 90 e0 ldi r25, 0x00 ; 0
+}
+ bb6: 65 c2 rjmp .+1226 ; 0x1082 <USB_Host_SendControlRequest>
+
+00000bb8 <USB_Host_SetInterfaceAltSetting>:
+}
+
+uint8_t USB_Host_SetInterfaceAltSetting(const uint8_t InterfaceNum,
+ const uint8_t AltSetting)
+{
+ USB_ControlRequest = (USB_Request_Header_t)
+ bb8: e3 e2 ldi r30, 0x23 ; 35
+ bba: f1 e0 ldi r31, 0x01 ; 1
+ bbc: 91 e0 ldi r25, 0x01 ; 1
+ bbe: 90 93 23 01 sts 0x0123, r25
+ bc2: 9b e0 ldi r25, 0x0B ; 11
+ bc4: 90 93 24 01 sts 0x0124, r25
+ bc8: 60 93 25 01 sts 0x0125, r22
+ bcc: 13 82 std Z+3, r1 ; 0x03
+ bce: 80 93 27 01 sts 0x0127, r24
+ bd2: 15 82 std Z+5, r1 ; 0x05
+ bd4: 10 92 2a 01 sts 0x012A, r1
+ bd8: 10 92 29 01 sts 0x0129, r1
+ bdc: 10 92 a7 00 sts 0x00A7, r1
+ .wLength = 0,
+ };
+
+ Pipe_SelectPipe(PIPE_CONTROLPIPE);
+
+ return USB_Host_SendControlRequest(NULL);
+ be0: 80 e0 ldi r24, 0x00 ; 0
+ be2: 90 e0 ldi r25, 0x00 ; 0
+}
+ be4: 4e c2 rjmp .+1180 ; 0x1082 <USB_Host_SendControlRequest>
+
+00000be6 <Pipe_ConfigurePipe>:
+ const uint8_t Type,
+ const uint8_t Token,
+ const uint8_t EndpointNumber,
+ const uint16_t Size,
+ const uint8_t Banks)
+{
+ be6: ef 92 push r14
+ be8: 0f 93 push r16
+ bea: 1f 93 push r17
+ bec: 5e 2d mov r21, r14
+
+ Pipe_SelectPipe(PNum);
+
+ if (PNum == Number)
+ {
+ UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
+ bee: 62 95 swap r22
+ bf0: 66 0f add r22, r22
+ bf2: 66 0f add r22, r22
+ bf4: 60 7c andi r22, 0xC0 ; 192
+ bf6: 64 2b or r22, r20
+ bf8: 2f 70 andi r18, 0x0F ; 15
+ bfa: 62 2b or r22, r18
+
+ Pipe_SetInfiniteINRequests();
+
+ return Pipe_IsConfigured();
+#else
+ for (uint8_t PNum = Number; PNum < PIPE_TOTAL_PIPES; PNum++)
+ bfc: 98 2f mov r25, r24
+ Pipe_SelectPipe(PNum);
+
+ if (PNum == Number)
+ {
+ UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
+ UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
+ bfe: 52 60 ori r21, 0x02 ; 2
+
+ Pipe_SetInfiniteINRequests();
+
+ return Pipe_IsConfigured();
+#else
+ for (uint8_t PNum = Number; PNum < PIPE_TOTAL_PIPES; PNum++)
+ c00: 4d c0 rjmp .+154 ; 0xc9c <Pipe_ConfigurePipe+0xb6>
+ * \param[in] PipeNumber Index of the pipe to select.
+ */
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber)
+ {
+ UPNUM = PipeNumber;
+ c02: 90 93 a7 00 sts 0x00A7, r25
+ uint8_t UPINRQXTemp;
+ uint8_t UPIENXTemp;
+
+ Pipe_SelectPipe(PNum);
+
+ if (PNum == Number)
+ c06: 98 17 cp r25, r24
+ c08: b1 f4 brne .+44 ; 0xc36 <Pipe_ConfigurePipe+0x50>
+ c0a: 28 e0 ldi r18, 0x08 ; 8
+ c0c: 30 e0 ldi r19, 0x00 ; 0
+ c0e: 40 e0 ldi r20, 0x00 ; 0
+ c10: 03 c0 rjmp .+6 ; 0xc18 <Pipe_ConfigurePipe+0x32>
+ uint8_t MaskVal = 0;
+ uint16_t CheckBytes = 8;
+
+ while ((CheckBytes < Bytes) && (CheckBytes < PIPE_MAX_SIZE))
+ {
+ MaskVal++;
+ c12: 4f 5f subi r20, 0xFF ; 255
+ CheckBytes <<= 1;
+ c14: 22 0f add r18, r18
+ c16: 33 1f adc r19, r19
+ static inline uint8_t Pipe_BytesToEPSizeMask(const uint16_t Bytes)
+ {
+ uint8_t MaskVal = 0;
+ uint16_t CheckBytes = 8;
+
+ while ((CheckBytes < Bytes) && (CheckBytes < PIPE_MAX_SIZE))
+ c18: 20 17 cp r18, r16
+ c1a: 31 07 cpc r19, r17
+ c1c: 10 f4 brcc .+4 ; 0xc22 <Pipe_ConfigurePipe+0x3c>
+ c1e: 45 30 cpi r20, 0x05 ; 5
+ c20: c1 f7 brne .-16 ; 0xc12 <Pipe_ConfigurePipe+0x2c>
+ {
+ MaskVal++;
+ CheckBytes <<= 1;
+ }
+
+ return (MaskVal << EPSIZE0);
+ c22: 24 2f mov r18, r20
+ c24: 22 95 swap r18
+ c26: 20 7f andi r18, 0xF0 ; 240
+ {
+ UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
+ UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
+ c28: 25 2b or r18, r21
+
+ Pipe_SelectPipe(PNum);
+
+ if (PNum == Number)
+ {
+ UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
+ c2a: a6 2f mov r26, r22
+ UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
+ UPCFG2XTemp = 0;
+ UPCONXTemp = ((1 << PEN) | (1 << INMODE));
+ UPINRQXTemp = 0;
+ UPIENXTemp = 0;
+ c2c: 40 e0 ldi r20, 0x00 ; 0
+ {
+ UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
+ UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
+ UPCFG2XTemp = 0;
+ UPCONXTemp = ((1 << PEN) | (1 << INMODE));
+ UPINRQXTemp = 0;
+ c2e: 70 e0 ldi r23, 0x00 ; 0
+ if (PNum == Number)
+ {
+ UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
+ UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
+ UPCFG2XTemp = 0;
+ UPCONXTemp = ((1 << PEN) | (1 << INMODE));
+ c30: e1 e2 ldi r30, 0x21 ; 33
+
+ if (PNum == Number)
+ {
+ UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
+ UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
+ UPCFG2XTemp = 0;
+ c32: f0 e0 ldi r31, 0x00 ; 0
+ c34: 0c c0 rjmp .+24 ; 0xc4e <Pipe_ConfigurePipe+0x68>
+ UPINRQXTemp = 0;
+ UPIENXTemp = 0;
+ }
+ else
+ {
+ UPCFG0XTemp = UPCFG0X;
+ c36: a0 91 aa 00 lds r26, 0x00AA
+ UPCFG1XTemp = UPCFG1X;
+ c3a: 20 91 ab 00 lds r18, 0x00AB
+ UPCFG2XTemp = UPCFG2X;
+ c3e: f0 91 ad 00 lds r31, 0x00AD
+ UPCONXTemp = UPCONX;
+ c42: e0 91 a9 00 lds r30, 0x00A9
+ UPINRQXTemp = UPINRQX;
+ c46: 70 91 a5 00 lds r23, 0x00A5
+ UPIENXTemp = UPIENX;
+ c4a: 40 91 ae 00 lds r20, 0x00AE
+
+ /** Configures the currently selected pipe to allow for an unlimited number of IN requests. */
+ static inline void Pipe_SetInfiniteINRequests(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SetInfiniteINRequests(void)
+ {
+ UPCONX |= (1 << INMODE);
+ c4e: 30 91 a9 00 lds r19, 0x00A9
+ c52: 30 62 ori r19, 0x20 ; 32
+ c54: 30 93 a9 00 sts 0x00A9, r19
+ }
+
+ Pipe_SetInfiniteINRequests();
+
+ if (!(UPCFG1XTemp & (1 << ALLOC)))
+ c58: 21 ff sbrs r18, 1
+ c5a: 1f c0 rjmp .+62 ; 0xc9a <Pipe_ConfigurePipe+0xb4>
+ * from an attached device.
+ */
+ static inline void Pipe_DisablePipe(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_DisablePipe(void)
+ {
+ UPCONX &= ~(1 << PEN);
+ c5c: 30 91 a9 00 lds r19, 0x00A9
+ c60: 3e 7f andi r19, 0xFE ; 254
+ c62: 30 93 a9 00 sts 0x00A9, r19
+ continue;
+
+ Pipe_DisablePipe();
+ UPCFG1X &= (1 << ALLOC);
+ c66: 30 91 ab 00 lds r19, 0x00AB
+ c6a: 32 70 andi r19, 0x02 ; 2
+ c6c: 30 93 ab 00 sts 0x00AB, r19
+ * \pre The currently selected pipe must first be configured properly via \ref Pipe_ConfigurePipe().
+ */
+ static inline void Pipe_EnablePipe(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_EnablePipe(void)
+ {
+ UPCONX |= (1 << PEN);
+ c70: 30 91 a9 00 lds r19, 0x00A9
+ c74: 31 60 ori r19, 0x01 ; 1
+ c76: 30 93 a9 00 sts 0x00A9, r19
+
+ Pipe_EnablePipe();
+ UPCFG0X = UPCFG0XTemp;
+ c7a: a0 93 aa 00 sts 0x00AA, r26
+ UPCFG1X = UPCFG1XTemp;
+ c7e: 20 93 ab 00 sts 0x00AB, r18
+ UPCFG2X = UPCFG2XTemp;
+ c82: f0 93 ad 00 sts 0x00AD, r31
+ UPCONX = UPCONXTemp;
+ c86: e0 93 a9 00 sts 0x00A9, r30
+ UPINRQX = UPINRQXTemp;
+ c8a: 70 93 a5 00 sts 0x00A5, r23
+ UPIENX = UPIENXTemp;
+ c8e: 40 93 ae 00 sts 0x00AE, r20
+ * \return Boolean \c true if the selected pipe is configured, \c false otherwise.
+ */
+ static inline bool Pipe_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Pipe_IsConfigured(void)
+ {
+ return ((UPSTAX & (1 << CFGOK)) ? true : false);
+ c92: 20 91 ac 00 lds r18, 0x00AC
+
+ if (!(Pipe_IsConfigured()))
+ c96: 27 ff sbrs r18, 7
+ c98: 08 c0 rjmp .+16 ; 0xcaa <Pipe_ConfigurePipe+0xc4>
+
+ Pipe_SetInfiniteINRequests();
+
+ return Pipe_IsConfigured();
+#else
+ for (uint8_t PNum = Number; PNum < PIPE_TOTAL_PIPES; PNum++)
+ c9a: 9f 5f subi r25, 0xFF ; 255
+ c9c: 97 30 cpi r25, 0x07 ; 7
+ c9e: 08 f4 brcc .+2 ; 0xca2 <Pipe_ConfigurePipe+0xbc>
+ ca0: b0 cf rjmp .-160 ; 0xc02 <Pipe_ConfigurePipe+0x1c>
+ * \param[in] PipeNumber Index of the pipe to select.
+ */
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber)
+ {
+ UPNUM = PipeNumber;
+ ca2: 80 93 a7 00 sts 0x00A7, r24
+ if (!(Pipe_IsConfigured()))
+ return false;
+ }
+
+ Pipe_SelectPipe(Number);
+ return true;
+ ca6: 81 e0 ldi r24, 0x01 ; 1
+ ca8: 01 c0 rjmp .+2 ; 0xcac <Pipe_ConfigurePipe+0xc6>
+ UPCONX = UPCONXTemp;
+ UPINRQX = UPINRQXTemp;
+ UPIENX = UPIENXTemp;
+
+ if (!(Pipe_IsConfigured()))
+ return false;
+ caa: 80 e0 ldi r24, 0x00 ; 0
+ }
+
+ Pipe_SelectPipe(Number);
+ return true;
+#endif
+}
+ cac: 1f 91 pop r17
+ cae: 0f 91 pop r16
+ cb0: ef 90 pop r14
+ cb2: 08 95 ret
+
+00000cb4 <Pipe_ClearPipes>:
+
+void Pipe_ClearPipes(void)
+{
+ UPINT = 0;
+ cb4: 10 92 f8 00 sts 0x00F8, r1
+
+ for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)
+ cb8: 80 e0 ldi r24, 0x00 ; 0
+ cba: 80 93 a7 00 sts 0x00A7, r24
+ {
+ Pipe_SelectPipe(PNum);
+ UPIENX = 0;
+ cbe: 10 92 ae 00 sts 0x00AE, r1
+ UPINTX = 0;
+ cc2: 10 92 a6 00 sts 0x00A6, r1
+ UPCFG1X = 0;
+ cc6: 10 92 ab 00 sts 0x00AB, r1
+ * from an attached device.
+ */
+ static inline void Pipe_DisablePipe(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_DisablePipe(void)
+ {
+ UPCONX &= ~(1 << PEN);
+ cca: 90 91 a9 00 lds r25, 0x00A9
+ cce: 9e 7f andi r25, 0xFE ; 254
+ cd0: 90 93 a9 00 sts 0x00A9, r25
+
+void Pipe_ClearPipes(void)
+{
+ UPINT = 0;
+
+ for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)
+ cd4: 8f 5f subi r24, 0xFF ; 255
+ cd6: 87 30 cpi r24, 0x07 ; 7
+ cd8: 81 f7 brne .-32 ; 0xcba <Pipe_ClearPipes+0x6>
+ UPIENX = 0;
+ UPINTX = 0;
+ UPCFG1X = 0;
+ Pipe_DisablePipe();
+ }
+}
+ cda: 08 95 ret
+
+00000cdc <USB_Disable>:
+ USB_ResetInterface();
+}
+
+void USB_Disable(void)
+{
+ USB_INT_DisableAllInterrupts();
+ cdc: 6e d0 rcall .+220 ; 0xdba <USB_INT_DisableAllInterrupts>
+ USB_INT_ClearAllInterrupts();
+ cde: 75 d0 rcall .+234 ; 0xdca <USB_INT_ClearAllInterrupts>
+ * enumerating the device once attached until \ref USB_Attach() is called.
+ */
+ static inline void USB_Detach(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Detach(void)
+ {
+ UDCON |= (1 << DETACH);
+ ce0: e0 ee ldi r30, 0xE0 ; 224
+ ce2: f0 e0 ldi r31, 0x00 ; 0
+ ce4: 80 81 ld r24, Z
+ ce6: 81 60 ori r24, 0x01 ; 1
+ ce8: 80 83 st Z, r24
+ }
+
+ static inline void USB_Controller_Disable(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Controller_Disable(void)
+ {
+ USBCON &= ~(1 << USBE);
+ cea: e8 ed ldi r30, 0xD8 ; 216
+ cec: f0 e0 ldi r31, 0x00 ; 0
+ cee: 80 81 ld r24, Z
+ cf0: 8f 77 andi r24, 0x7F ; 127
+ cf2: 80 83 st Z, r24
+ }
+
+ static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_PLL_Off(void)
+ {
+ PLLCSR = 0;
+ cf4: 19 bc out 0x29, r1 ; 41
+
+ static inline void USB_REG_Off(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_REG_Off(void)
+ {
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
+ UHWCON &= ~(1 << UVREGE);
+ cf6: a7 ed ldi r26, 0xD7 ; 215
+ cf8: b0 e0 ldi r27, 0x00 ; 0
+ cfa: 8c 91 ld r24, X
+ cfc: 8e 7f andi r24, 0xFE ; 254
+ cfe: 8c 93 st X, r24
+ }
+
+ static inline void USB_OTGPAD_Off(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_OTGPAD_Off(void)
+ {
+ USBCON &= ~(1 << OTGPADE);
+ d00: 80 81 ld r24, Z
+ d02: 8f 7e andi r24, 0xEF ; 239
+ d04: 80 83 st Z, r24
+
+ #if defined(USB_CAN_BE_BOTH)
+ USB_CurrentMode = USB_MODE_None;
+ #endif
+
+ USB_IsInitialized = false;
+ d06: 10 92 22 01 sts 0x0122, r1
+}
+ d0a: 08 95 ret
+
+00000d0c <USB_ResetInterface>:
+{
+ #if defined(USB_CAN_BE_BOTH)
+ bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0);
+ #endif
+
+ USB_INT_DisableAllInterrupts();
+ d0c: 56 d0 rcall .+172 ; 0xdba <USB_INT_DisableAllInterrupts>
+ USB_INT_ClearAllInterrupts();
+ d0e: 5d d0 rcall .+186 ; 0xdca <USB_INT_ClearAllInterrupts>
+ }
+
+ static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Controller_Reset(void)
+ {
+ const uint8_t Temp = USBCON;
+ d10: 80 91 d8 00 lds r24, 0x00D8
+
+ USBCON = (Temp & ~(1 << USBE));
+ d14: 98 2f mov r25, r24
+ d16: 9f 77 andi r25, 0x7F ; 127
+ d18: 90 93 d8 00 sts 0x00D8, r25
+ USBCON = (Temp | (1 << USBE));
+ d1c: 80 68 ori r24, 0x80 ; 128
+ d1e: 80 93 d8 00 sts 0x00D8, r24
+ }
+
+ static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_CLK_Unfreeze(void)
+ {
+ USBCON &= ~(1 << FRZCLK);
+ d22: 80 91 d8 00 lds r24, 0x00D8
+ d26: 8f 7d andi r24, 0xDF ; 223
+ d28: 80 93 d8 00 sts 0x00D8, r24
+ #endif
+ }
+ else if (USB_CurrentMode == USB_MODE_Host)
+ {
+ #if defined(USB_CAN_BE_HOST)
+ UHWCON &= ~(1 << UIMOD);
+ d2c: 80 91 d7 00 lds r24, 0x00D7
+ d30: 8f 77 andi r24, 0x7F ; 127
+ d32: 80 93 d7 00 sts 0x00D7, r24
+
+ /* Inline Functions: */
+ static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_PLL_On(void)
+ {
+ PLLCSR = USB_PLL_PSC;
+ d36: 8c e0 ldi r24, 0x0C ; 12
+ d38: 89 bd out 0x29, r24 ; 41
+ PLLCSR |= (1 << PLLE);
+ d3a: 89 b5 in r24, 0x29 ; 41
+ d3c: 82 60 ori r24, 0x02 ; 2
+ d3e: 89 bd out 0x29, r24 ; 41
+
+ if (!(USB_Options & USB_OPT_MANUAL_PLL))
+ {
+ #if defined(USB_CAN_BE_HOST)
+ USB_PLL_On();
+ while (!(USB_PLL_IsReady()));
+ d40: 09 b4 in r0, 0x29 ; 41
+ d42: 00 fe sbrs r0, 0
+ d44: fd cf rjmp .-6 ; 0xd40 <USB_ResetInterface+0x34>
+#endif
+
+#if defined(USB_CAN_BE_HOST)
+static void USB_Init_Host(void)
+{
+ USB_HostState = HOST_STATE_Unattached;
+ d46: 82 e0 ldi r24, 0x02 ; 2
+ d48: 80 93 2b 01 sts 0x012B, r24
+ USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;
+ d4c: 80 e4 ldi r24, 0x40 ; 64
+ d4e: 80 93 1b 01 sts 0x011B, r24
+ #if !defined(__DOXYGEN__)
+ /* Macros: */
+ static inline void USB_Host_HostMode_On(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_HostMode_On(void)
+ {
+ USBCON |= (1 << HOST);
+ d52: 80 91 d8 00 lds r24, 0x00D8
+ d56: 80 64 ori r24, 0x40 ; 64
+ d58: 80 93 d8 00 sts 0x00D8, r24
+ }
+
+ static inline void USB_Host_VBUS_Auto_Off(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_VBUS_Auto_Off(void)
+ {
+ OTGCON |= (1 << VBUSRQC);
+ d5c: 80 91 dd 00 lds r24, 0x00DD
+ d60: 81 60 ori r24, 0x01 ; 1
+ d62: 80 93 dd 00 sts 0x00DD, r24
+ }
+
+ static inline void USB_Host_VBUS_Manual_Enable(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_VBUS_Manual_Enable(void)
+ {
+ OTGCON |= (1 << VBUSHWC);
+ d66: 80 91 dd 00 lds r24, 0x00DD
+ d6a: 84 60 ori r24, 0x04 ; 4
+ d6c: 80 93 dd 00 sts 0x00DD, r24
+ UHWCON &= ~(1 << UVCONE);
+ d70: 80 91 d7 00 lds r24, 0x00D7
+ d74: 8f 7e andi r24, 0xEF ; 239
+ d76: 80 93 d7 00 sts 0x00D7, r24
+
+ DDRE |= (1 << 7);
+ d7a: 6f 9a sbi 0x0d, 7 ; 13
+ }
+
+ static inline void USB_Host_VBUS_Manual_On(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_VBUS_Manual_On(void)
+ {
+ PORTE |= (1 << 7);
+ d7c: 77 9a sbi 0x0e, 7 ; 14
+ break;
+ case USB_INT_VBERRI:
+ OTGIEN |= (1 << VBERRE);
+ break;
+ case USB_INT_SRPI:
+ OTGIEN |= (1 << SRPE);
+ d7e: 80 91 de 00 lds r24, 0x00DE
+ d82: 81 60 ori r24, 0x01 ; 1
+ d84: 80 93 de 00 sts 0x00DE, r24
+ break;
+ case USB_INT_RSTI:
+ UHIEN |= (1 << RSTE);
+ break;
+ case USB_INT_BCERRI:
+ OTGIEN |= (1 << BCERRE);
+ d88: 80 91 de 00 lds r24, 0x00DE
+ d8c: 84 60 ori r24, 0x04 ; 4
+ d8e: 80 93 de 00 sts 0x00DE, r24
+ * register and despite the datasheet making no mention of its requirement in host mode.
+ */
+ static inline void USB_Attach(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Attach(void)
+ {
+ UDCON &= ~(1 << DETACH);
+ d92: 80 91 e0 00 lds r24, 0x00E0
+ d96: 8e 7f andi r24, 0xFE ; 254
+ d98: 80 93 e0 00 sts 0x00E0, r24
+
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
+ static inline void USB_OTGPAD_On(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_OTGPAD_On(void)
+ {
+ USBCON |= (1 << OTGPADE);
+ d9c: 80 91 d8 00 lds r24, 0x00D8
+ da0: 80 61 ori r24, 0x10 ; 16
+ da2: 80 93 d8 00 sts 0x00D8, r24
+ }
+
+ #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
+ USB_OTGPAD_On();
+ #endif
+}
+ da6: 08 95 ret
+
+00000da8 <USB_Init>:
+
+ static inline void USB_REG_On(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_REG_On(void)
+ {
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
+ UHWCON |= (1 << UVREGE);
+ da8: e7 ed ldi r30, 0xD7 ; 215
+ daa: f0 e0 ldi r31, 0x00 ; 0
+ dac: 80 81 ld r24, Z
+ dae: 81 60 ori r24, 0x01 ; 1
+ db0: 80 83 st Z, r24
+ UHWCON &= ~(1 << UIDE);
+ USB_CurrentMode = Mode;
+ }
+ #endif
+
+ USB_IsInitialized = true;
+ db2: 81 e0 ldi r24, 0x01 ; 1
+ db4: 80 93 22 01 sts 0x0122, r24
+
+ USB_ResetInterface();
+}
+ db8: a9 cf rjmp .-174 ; 0xd0c <USB_ResetInterface>
+
+00000dba <USB_INT_DisableAllInterrupts>:
+#include "../USBInterrupt.h"
+
+void USB_INT_DisableAllInterrupts(void)
+{
+ #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
+ USBCON &= ~((1 << VBUSTE) | (1 << IDTE));
+ dba: e8 ed ldi r30, 0xD8 ; 216
+ dbc: f0 e0 ldi r31, 0x00 ; 0
+ dbe: 80 81 ld r24, Z
+ dc0: 8c 7f andi r24, 0xFC ; 252
+ dc2: 80 83 st Z, r24
+ #if defined(USB_CAN_BE_BOTH)
+ OTGIEN = 0;
+ #endif
+
+ #if defined(USB_CAN_BE_HOST)
+ UHIEN = 0;
+ dc4: 10 92 a0 00 sts 0x00A0, r1
+ #endif
+
+ #if defined(USB_CAN_BE_DEVICE)
+ UDIEN = 0;
+ #endif
+}
+ dc8: 08 95 ret
+
+00000dca <USB_INT_ClearAllInterrupts>:
+
+void USB_INT_ClearAllInterrupts(void)
+{
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)
+ USBINT = 0;
+ dca: 10 92 da 00 sts 0x00DA, r1
+ #if defined(USB_CAN_BE_BOTH)
+ OTGINT = 0;
+ #endif
+
+ #if defined(USB_CAN_BE_HOST)
+ UHINT = 0;
+ dce: 10 92 9f 00 sts 0x009F, r1
+ #endif
+
+ #if defined(USB_CAN_BE_DEVICE)
+ UDINT = 0;
+ #endif
+}
+ dd2: 08 95 ret
+
+00000dd4 <__vector_10>:
+
+ISR(USB_GEN_vect, ISR_BLOCK)
+{
+ dd4: 1f 92 push r1
+ dd6: 0f 92 push r0
+ dd8: 0f b6 in r0, 0x3f ; 63
+ dda: 0f 92 push r0
+ ddc: 0b b6 in r0, 0x3b ; 59
+ dde: 0f 92 push r0
+ de0: 11 24 eor r1, r1
+ de2: 2f 93 push r18
+ de4: 3f 93 push r19
+ de6: 4f 93 push r20
+ de8: 5f 93 push r21
+ dea: 6f 93 push r22
+ dec: 7f 93 push r23
+ dee: 8f 93 push r24
+ df0: 9f 93 push r25
+ df2: af 93 push r26
+ df4: bf 93 push r27
+ df6: ef 93 push r30
+ df8: ff 93 push r31
+ case USB_INT_RXSTPI:
+ return (UEINTX & (1 << RXSTPI));
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ return (UHINT & (1 << HSOFI));
+ dfa: 80 91 9f 00 lds r24, 0x009F
+ }
+ #endif
+
+ #if defined(USB_CAN_BE_HOST)
+ #if !defined(NO_SOF_EVENTS)
+ if (USB_INT_HasOccurred(USB_INT_HSOFI) && USB_INT_IsEnabled(USB_INT_HSOFI))
+ dfe: 85 ff sbrs r24, 5
+ e00: 0a c0 rjmp .+20 ; 0xe16 <__vector_10+0x42>
+ case USB_INT_RXSTPI:
+ return (UEIENX & (1 << RXSTPE));
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ return (UHIEN & (1 << HSOFE));
+ e02: 80 91 a0 00 lds r24, 0x00A0
+ e06: 85 ff sbrs r24, 5
+ e08: 06 c0 rjmp .+12 ; 0xe16 <__vector_10+0x42>
+ UEINTX &= ~(1 << RXSTPI);
+ break;
+ #endif
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHINT &= ~(1 << HSOFI);
+ e0a: 80 91 9f 00 lds r24, 0x009F
+ e0e: 8f 7d andi r24, 0xDF ; 223
+ e10: 80 93 9f 00 sts 0x009F, r24
+ {
+ USB_INT_Clear(USB_INT_HSOFI);
+
+ EVENT_USB_Host_StartOfFrame();
+ e14: 0c d1 rcall .+536 ; 0x102e <USB_Event_Stub>
+ case USB_INT_HSOFI:
+ return (UHINT & (1 << HSOFI));
+ case USB_INT_DCONNI:
+ return (UHINT & (1 << DCONNI));
+ case USB_INT_DDISCI:
+ return (UHINT & (1 << DDISCI));
+ e16: 80 91 9f 00 lds r24, 0x009F
+ }
+ #endif
+
+ if (USB_INT_HasOccurred(USB_INT_DDISCI) && USB_INT_IsEnabled(USB_INT_DDISCI))
+ e1a: 81 ff sbrs r24, 1
+ e1c: 15 c0 rjmp .+42 ; 0xe48 <__vector_10+0x74>
+ case USB_INT_HSOFI:
+ return (UHIEN & (1 << HSOFE));
+ case USB_INT_DCONNI:
+ return (UHIEN & (1 << DCONNE));
+ case USB_INT_DDISCI:
+ return (UHIEN & (1 << DDISCE));
+ e1e: 80 91 a0 00 lds r24, 0x00A0
+ e22: 81 ff sbrs r24, 1
+ e24: 11 c0 rjmp .+34 ; 0xe48 <__vector_10+0x74>
+ break;
+ case USB_INT_DCONNI:
+ UHINT &= ~(1 << DCONNI);
+ break;
+ case USB_INT_DDISCI:
+ UHINT &= ~(1 << DDISCI);
+ e26: 80 91 9f 00 lds r24, 0x009F
+ e2a: 8d 7f andi r24, 0xFD ; 253
+ e2c: 80 93 9f 00 sts 0x009F, r24
+ #if defined(USB_CAN_BE_HOST)
+ case USB_INT_HSOFI:
+ UHINT &= ~(1 << HSOFI);
+ break;
+ case USB_INT_DCONNI:
+ UHINT &= ~(1 << DCONNI);
+ e30: 80 91 9f 00 lds r24, 0x009F
+ e34: 8e 7f andi r24, 0xFE ; 254
+ e36: 80 93 9f 00 sts 0x009F, r24
+ break;
+ case USB_INT_DCONNI:
+ UHIEN &= ~(1 << DCONNE);
+ break;
+ case USB_INT_DDISCI:
+ UHIEN &= ~(1 << DDISCE);
+ e3a: 80 91 a0 00 lds r24, 0x00A0
+ e3e: 8d 7f andi r24, 0xFD ; 253
+ e40: 80 93 a0 00 sts 0x00A0, r24
+ {
+ USB_INT_Clear(USB_INT_DDISCI);
+ USB_INT_Clear(USB_INT_DCONNI);
+ USB_INT_Disable(USB_INT_DDISCI);
+
+ EVENT_USB_Host_DeviceUnattached();
+ e44: a1 da rcall .-2750 ; 0x388 <EVENT_USB_Host_DeviceUnattached>
+
+ USB_ResetInterface();
+ e46: 62 df rcall .-316 ; 0xd0c <USB_ResetInterface>
+ case USB_INT_RSTI:
+ return (UHINT & (1 << RSTI));
+ case USB_INT_BCERRI:
+ return (OTGINT & (1 << BCERRI));
+ case USB_INT_VBERRI:
+ return (OTGINT & (1 << VBERRI));
+ e48: 80 91 df 00 lds r24, 0x00DF
+ }
+
+ if (USB_INT_HasOccurred(USB_INT_VBERRI) && USB_INT_IsEnabled(USB_INT_VBERRI))
+ e4c: 81 ff sbrs r24, 1
+ e4e: 15 c0 rjmp .+42 ; 0xe7a <__vector_10+0xa6>
+ case USB_INT_RSTI:
+ return (UHIEN & (1 << RSTE));
+ case USB_INT_BCERRI:
+ return (OTGIEN & (1 << BCERRE));
+ case USB_INT_VBERRI:
+ return (OTGIEN & (1 << VBERRE));
+ e50: 80 91 de 00 lds r24, 0x00DE
+ e54: 81 ff sbrs r24, 1
+ e56: 11 c0 rjmp .+34 ; 0xe7a <__vector_10+0xa6>
+ break;
+ case USB_INT_BCERRI:
+ OTGINT &= ~(1 << BCERRI);
+ break;
+ case USB_INT_VBERRI:
+ OTGINT &= ~(1 << VBERRI);
+ e58: 80 91 df 00 lds r24, 0x00DF
+ e5c: 8d 7f andi r24, 0xFD ; 253
+ e5e: 80 93 df 00 sts 0x00DF, r24
+ }
+
+ static inline void USB_Host_VBUS_Manual_Off(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_VBUS_Manual_Off(void)
+ {
+ PORTE &= ~(1 << 7);
+ e62: 77 98 cbi 0x0e, 7 ; 14
+ }
+
+ static inline void USB_Host_VBUS_Auto_Off(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_VBUS_Auto_Off(void)
+ {
+ OTGCON |= (1 << VBUSRQC);
+ e64: 80 91 dd 00 lds r24, 0x00DD
+ e68: 81 60 ori r24, 0x01 ; 1
+ e6a: 80 93 dd 00 sts 0x00DD, r24
+ USB_INT_Clear(USB_INT_VBERRI);
+
+ USB_Host_VBUS_Manual_Off();
+ USB_Host_VBUS_Auto_Off();
+
+ EVENT_USB_Host_HostError(HOST_ERROR_VBusVoltageDip);
+ e6e: 80 e0 ldi r24, 0x00 ; 0
+ e70: 92 da rcall .-2780 ; 0x396 <EVENT_USB_Host_HostError>
+ EVENT_USB_Host_DeviceUnattached();
+ e72: 8a da rcall .-2796 ; 0x388 <EVENT_USB_Host_DeviceUnattached>
+
+ USB_HostState = HOST_STATE_Unattached;
+ e74: 82 e0 ldi r24, 0x02 ; 2
+ e76: 80 93 2b 01 sts 0x012B, r24
+ case USB_INT_BCERRI:
+ return (OTGINT & (1 << BCERRI));
+ case USB_INT_VBERRI:
+ return (OTGINT & (1 << VBERRI));
+ case USB_INT_SRPI:
+ return (OTGINT & (1 << SRPI));
+ e7a: 80 91 df 00 lds r24, 0x00DF
+ }
+
+ if (USB_INT_HasOccurred(USB_INT_SRPI) && USB_INT_IsEnabled(USB_INT_SRPI))
+ e7e: 80 ff sbrs r24, 0
+ e80: 17 c0 rjmp .+46 ; 0xeb0 <__vector_10+0xdc>
+ case USB_INT_BCERRI:
+ return (OTGIEN & (1 << BCERRE));
+ case USB_INT_VBERRI:
+ return (OTGIEN & (1 << VBERRE));
+ case USB_INT_SRPI:
+ return (OTGIEN & (1 << SRPE));
+ e82: 80 91 de 00 lds r24, 0x00DE
+ e86: 80 ff sbrs r24, 0
+ e88: 13 c0 rjmp .+38 ; 0xeb0 <__vector_10+0xdc>
+ break;
+ case USB_INT_VBERRI:
+ OTGINT &= ~(1 << VBERRI);
+ break;
+ case USB_INT_SRPI:
+ OTGINT &= ~(1 << SRPI);
+ e8a: 80 91 df 00 lds r24, 0x00DF
+ e8e: 8e 7f andi r24, 0xFE ; 254
+ e90: 80 93 df 00 sts 0x00DF, r24
+ break;
+ case USB_INT_VBERRI:
+ OTGIEN &= ~(1 << VBERRE);
+ break;
+ case USB_INT_SRPI:
+ OTGIEN &= ~(1 << SRPE);
+ e94: 80 91 de 00 lds r24, 0x00DE
+ e98: 8e 7f andi r24, 0xFE ; 254
+ e9a: 80 93 de 00 sts 0x00DE, r24
+ {
+ USB_INT_Clear(USB_INT_SRPI);
+ USB_INT_Disable(USB_INT_SRPI);
+
+ EVENT_USB_Host_DeviceAttached();
+ e9e: 6f da rcall .-2850 ; 0x37e <EVENT_USB_Host_DeviceAttached>
+ break;
+ case USB_INT_DCONNI:
+ UHIEN |= (1 << DCONNE);
+ break;
+ case USB_INT_DDISCI:
+ UHIEN |= (1 << DDISCE);
+ ea0: 80 91 a0 00 lds r24, 0x00A0
+ ea4: 82 60 ori r24, 0x02 ; 2
+ ea6: 80 93 a0 00 sts 0x00A0, r24
+
+ USB_INT_Enable(USB_INT_DDISCI);
+
+ USB_HostState = HOST_STATE_Powered;
+ eaa: 83 e0 ldi r24, 0x03 ; 3
+ eac: 80 93 2b 01 sts 0x012B, r24
+ case USB_INT_DDISCI:
+ return (UHINT & (1 << DDISCI));
+ case USB_INT_RSTI:
+ return (UHINT & (1 << RSTI));
+ case USB_INT_BCERRI:
+ return (OTGINT & (1 << BCERRI));
+ eb0: 80 91 df 00 lds r24, 0x00DF
+ }
+
+ if (USB_INT_HasOccurred(USB_INT_BCERRI) && USB_INT_IsEnabled(USB_INT_BCERRI))
+ eb4: 82 ff sbrs r24, 2
+ eb6: 0e c0 rjmp .+28 ; 0xed4 <__vector_10+0x100>
+ case USB_INT_DDISCI:
+ return (UHIEN & (1 << DDISCE));
+ case USB_INT_RSTI:
+ return (UHIEN & (1 << RSTE));
+ case USB_INT_BCERRI:
+ return (OTGIEN & (1 << BCERRE));
+ eb8: 80 91 de 00 lds r24, 0x00DE
+ ebc: 82 ff sbrs r24, 2
+ ebe: 0a c0 rjmp .+20 ; 0xed4 <__vector_10+0x100>
+ break;
+ case USB_INT_RSTI:
+ UHINT &= ~(1 << RSTI);
+ break;
+ case USB_INT_BCERRI:
+ OTGINT &= ~(1 << BCERRI);
+ ec0: 80 91 df 00 lds r24, 0x00DF
+ ec4: 8b 7f andi r24, 0xFB ; 251
+ ec6: 80 93 df 00 sts 0x00DF, r24
+ {
+ USB_INT_Clear(USB_INT_BCERRI);
+
+ EVENT_USB_Host_DeviceEnumerationFailed(HOST_ENUMERROR_NoDeviceDetected, 0);
+ eca: 82 e0 ldi r24, 0x02 ; 2
+ ecc: 60 e0 ldi r22, 0x00 ; 0
+ ece: 82 da rcall .-2812 ; 0x3d4 <EVENT_USB_Host_DeviceEnumerationFailed>
+ EVENT_USB_Host_DeviceUnattached();
+ ed0: 5b da rcall .-2890 ; 0x388 <EVENT_USB_Host_DeviceUnattached>
+
+ USB_ResetInterface();
+ ed2: 1c df rcall .-456 ; 0xd0c <USB_ResetInterface>
+ USB_ResetInterface();
+
+ EVENT_USB_UIDChange();
+ }
+ #endif
+}
+ ed4: ff 91 pop r31
+ ed6: ef 91 pop r30
+ ed8: bf 91 pop r27
+ eda: af 91 pop r26
+ edc: 9f 91 pop r25
+ ede: 8f 91 pop r24
+ ee0: 7f 91 pop r23
+ ee2: 6f 91 pop r22
+ ee4: 5f 91 pop r21
+ ee6: 4f 91 pop r20
+ ee8: 3f 91 pop r19
+ eea: 2f 91 pop r18
+ eec: 0f 90 pop r0
+ eee: 0b be out 0x3b, r0 ; 59
+ ef0: 0f 90 pop r0
+ ef2: 0f be out 0x3f, r0 ; 63
+ ef4: 0f 90 pop r0
+ ef6: 1f 90 pop r1
+ ef8: 18 95 reti
+
+00000efa <USB_Host_GetDeviceConfigDescriptor>:
+#if defined(USB_CAN_BE_HOST)
+uint8_t USB_Host_GetDeviceConfigDescriptor(const uint8_t ConfigNumber,
+ uint16_t* const ConfigSizePtr,
+ void* const BufferPtr,
+ const uint16_t BufferSize)
+{
+ efa: cf 92 push r12
+ efc: df 92 push r13
+ efe: ef 92 push r14
+ f00: ff 92 push r15
+ f02: 0f 93 push r16
+ f04: 1f 93 push r17
+ f06: df 93 push r29
+ f08: cf 93 push r28
+ f0a: cd b7 in r28, 0x3d ; 61
+ f0c: de b7 in r29, 0x3e ; 62
+ f0e: 29 97 sbiw r28, 0x09 ; 9
+ f10: 0f b6 in r0, 0x3f ; 63
+ f12: f8 94 cli
+ f14: de bf out 0x3e, r29 ; 62
+ f16: 0f be out 0x3f, r0 ; 63
+ f18: cd bf out 0x3d, r28 ; 61
+ f1a: 6b 01 movw r12, r22
+ f1c: 8a 01 movw r16, r20
+ f1e: 79 01 movw r14, r18
+ uint8_t ErrorCode;
+ uint8_t ConfigHeader[sizeof(USB_Descriptor_Configuration_Header_t)];
+
+ USB_ControlRequest = (USB_Request_Header_t)
+ f20: 90 e8 ldi r25, 0x80 ; 128
+ f22: 90 93 23 01 sts 0x0123, r25
+ f26: 96 e0 ldi r25, 0x06 ; 6
+ f28: 90 93 24 01 sts 0x0124, r25
+ {
+ .bmRequestType = (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE),
+ .bRequest = REQ_GetDescriptor,
+ .wValue = ((DTYPE_Configuration << 8) | (ConfigNumber - 1)),
+ f2c: 90 e0 ldi r25, 0x00 ; 0
+ f2e: 01 97 sbiw r24, 0x01 ; 1
+ f30: 92 60 ori r25, 0x02 ; 2
+ const uint16_t BufferSize)
+{
+ uint8_t ErrorCode;
+ uint8_t ConfigHeader[sizeof(USB_Descriptor_Configuration_Header_t)];
+
+ USB_ControlRequest = (USB_Request_Header_t)
+ f32: 90 93 26 01 sts 0x0126, r25
+ f36: 80 93 25 01 sts 0x0125, r24
+ f3a: 10 92 28 01 sts 0x0128, r1
+ f3e: 10 92 27 01 sts 0x0127, r1
+ f42: 89 e0 ldi r24, 0x09 ; 9
+ f44: 90 e0 ldi r25, 0x00 ; 0
+ f46: 90 93 2a 01 sts 0x012A, r25
+ f4a: 80 93 29 01 sts 0x0129, r24
+ f4e: 10 92 a7 00 sts 0x00A7, r1
+ .wLength = sizeof(USB_Descriptor_Configuration_Header_t),
+ };
+
+ Pipe_SelectPipe(PIPE_CONTROLPIPE);
+
+ if ((ErrorCode = USB_Host_SendControlRequest(ConfigHeader)) != HOST_SENDCONTROL_Successful)
+ f52: ce 01 movw r24, r28
+ f54: 01 96 adiw r24, 0x01 ; 1
+ f56: 95 d0 rcall .+298 ; 0x1082 <USB_Host_SendControlRequest>
+ f58: 88 23 and r24, r24
+ f5a: b9 f4 brne .+46 ; 0xf8a <USB_Host_GetDeviceConfigDescriptor+0x90>
+ return ErrorCode;
+
+ *ConfigSizePtr = DESCRIPTOR_PCAST(ConfigHeader, USB_Descriptor_Configuration_Header_t)->TotalConfigurationSize;
+ f5c: 8b 81 ldd r24, Y+3 ; 0x03
+ f5e: 9c 81 ldd r25, Y+4 ; 0x04
+ f60: f6 01 movw r30, r12
+ f62: 91 83 std Z+1, r25 ; 0x01
+ f64: 80 83 st Z, r24
+
+ if (*ConfigSizePtr > BufferSize)
+ f66: e8 16 cp r14, r24
+ f68: f9 06 cpc r15, r25
+ f6a: 70 f0 brcs .+28 ; 0xf88 <USB_Host_GetDeviceConfigDescriptor+0x8e>
+ return HOST_GETCONFIG_BuffOverflow;
+
+ USB_ControlRequest.wLength = *ConfigSizePtr;
+ f6c: 90 93 2a 01 sts 0x012A, r25
+ f70: 80 93 29 01 sts 0x0129, r24
+
+ if ((ErrorCode = USB_Host_SendControlRequest(BufferPtr)) != HOST_SENDCONTROL_Successful)
+ f74: c8 01 movw r24, r16
+ f76: 85 d0 rcall .+266 ; 0x1082 <USB_Host_SendControlRequest>
+ f78: 88 23 and r24, r24
+ f7a: 39 f4 brne .+14 ; 0xf8a <USB_Host_GetDeviceConfigDescriptor+0x90>
+ return ErrorCode;
+
+ if (DESCRIPTOR_TYPE(BufferPtr) != DTYPE_Configuration)
+ f7c: f8 01 movw r30, r16
+ f7e: 91 81 ldd r25, Z+1 ; 0x01
+ f80: 92 30 cpi r25, 0x02 ; 2
+ f82: 19 f0 breq .+6 ; 0xf8a <USB_Host_GetDeviceConfigDescriptor+0x90>
+ return HOST_GETCONFIG_InvalidData;
+ f84: 86 e0 ldi r24, 0x06 ; 6
+ f86: 01 c0 rjmp .+2 ; 0xf8a <USB_Host_GetDeviceConfigDescriptor+0x90>
+ return ErrorCode;
+
+ *ConfigSizePtr = DESCRIPTOR_PCAST(ConfigHeader, USB_Descriptor_Configuration_Header_t)->TotalConfigurationSize;
+
+ if (*ConfigSizePtr > BufferSize)
+ return HOST_GETCONFIG_BuffOverflow;
+ f88: 85 e0 ldi r24, 0x05 ; 5
+
+ if (DESCRIPTOR_TYPE(BufferPtr) != DTYPE_Configuration)
+ return HOST_GETCONFIG_InvalidData;
+
+ return HOST_GETCONFIG_Successful;
+}
+ f8a: 29 96 adiw r28, 0x09 ; 9
+ f8c: 0f b6 in r0, 0x3f ; 63
+ f8e: f8 94 cli
+ f90: de bf out 0x3e, r29 ; 62
+ f92: 0f be out 0x3f, r0 ; 63
+ f94: cd bf out 0x3d, r28 ; 61
+ f96: cf 91 pop r28
+ f98: df 91 pop r29
+ f9a: 1f 91 pop r17
+ f9c: 0f 91 pop r16
+ f9e: ff 90 pop r15
+ fa0: ef 90 pop r14
+ fa2: df 90 pop r13
+ fa4: cf 90 pop r12
+ fa6: 08 95 ret
+
+00000fa8 <USB_GetNextDescriptorComp>:
+}
+
+uint8_t USB_GetNextDescriptorComp(uint16_t* const BytesRem,
+ void** const CurrConfigLoc,
+ const ConfigComparatorPtr_t const ComparatorRoutine)
+{
+ fa8: af 92 push r10
+ faa: bf 92 push r11
+ fac: cf 92 push r12
+ fae: df 92 push r13
+ fb0: ef 92 push r14
+ fb2: ff 92 push r15
+ fb4: 0f 93 push r16
+ fb6: 1f 93 push r17
+ fb8: cf 93 push r28
+ fba: df 93 push r29
+ fbc: 8c 01 movw r16, r24
+ fbe: eb 01 movw r28, r22
+ fc0: 6a 01 movw r12, r20
+ uint8_t ErrorCode;
+
+ while (*BytesRem)
+ fc2: 23 c0 rjmp .+70 ; 0x100a <USB_GetNextDescriptorComp+0x62>
+ {
+ uint8_t* PrevDescLoc = *CurrConfigLoc;
+ fc4: e8 81 ld r30, Y
+ fc6: f9 81 ldd r31, Y+1 ; 0x01
+ fc8: 5f 01 movw r10, r30
+ static inline void USB_GetNextDescriptor(uint16_t* const BytesRem,
+ void** CurrConfigLoc) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
+ static inline void USB_GetNextDescriptor(uint16_t* const BytesRem,
+ void** CurrConfigLoc)
+ {
+ uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size;
+ fca: 20 81 ld r18, Z
+ fcc: 30 e0 ldi r19, 0x00 ; 0
+ fce: c7 01 movw r24, r14
+ fd0: 2e 15 cp r18, r14
+ fd2: 3f 05 cpc r19, r15
+ fd4: 08 f4 brcc .+2 ; 0xfd8 <USB_GetNextDescriptorComp+0x30>
+ fd6: c9 01 movw r24, r18
+
+ if (*BytesRem < CurrDescriptorSize)
+ CurrDescriptorSize = *BytesRem;
+
+ *CurrConfigLoc = (void*)((uintptr_t)*CurrConfigLoc + CurrDescriptorSize);
+ fd8: e8 0f add r30, r24
+ fda: f9 1f adc r31, r25
+ fdc: f9 83 std Y+1, r31 ; 0x01
+ fde: e8 83 st Y, r30
+ *BytesRem -= CurrDescriptorSize;
+ fe0: f8 01 movw r30, r16
+ fe2: 20 81 ld r18, Z
+ fe4: 31 81 ldd r19, Z+1 ; 0x01
+ fe6: 28 1b sub r18, r24
+ fe8: 39 0b sbc r19, r25
+ fea: 31 83 std Z+1, r19 ; 0x01
+ fec: 20 83 st Z, r18
+ uint16_t PrevBytesRem = *BytesRem;
+
+ USB_GetNextDescriptor(BytesRem, CurrConfigLoc);
+
+ if ((ErrorCode = ComparatorRoutine(*CurrConfigLoc)) != DESCRIPTOR_SEARCH_NotFound)
+ fee: 88 81 ld r24, Y
+ ff0: 99 81 ldd r25, Y+1 ; 0x01
+ ff2: f6 01 movw r30, r12
+ ff4: 09 95 icall
+ ff6: 82 30 cpi r24, 0x02 ; 2
+ ff8: 41 f0 breq .+16 ; 0x100a <USB_GetNextDescriptorComp+0x62>
+ {
+ if (ErrorCode == DESCRIPTOR_SEARCH_Fail)
+ ffa: 81 30 cpi r24, 0x01 ; 1
+ ffc: 69 f4 brne .+26 ; 0x1018 <USB_GetNextDescriptorComp+0x70>
+ {
+ *CurrConfigLoc = PrevDescLoc;
+ ffe: a8 82 st Y, r10
+ 1000: b9 82 std Y+1, r11 ; 0x01
+ *BytesRem = PrevBytesRem;
+ 1002: f8 01 movw r30, r16
+ 1004: f1 82 std Z+1, r15 ; 0x01
+ 1006: e0 82 st Z, r14
+ 1008: 07 c0 rjmp .+14 ; 0x1018 <USB_GetNextDescriptorComp+0x70>
+ void** const CurrConfigLoc,
+ const ConfigComparatorPtr_t const ComparatorRoutine)
+{
+ uint8_t ErrorCode;
+
+ while (*BytesRem)
+ 100a: f8 01 movw r30, r16
+ 100c: e0 80 ld r14, Z
+ 100e: f1 80 ldd r15, Z+1 ; 0x01
+ 1010: e1 14 cp r14, r1
+ 1012: f1 04 cpc r15, r1
+ 1014: b9 f6 brne .-82 ; 0xfc4 <USB_GetNextDescriptorComp+0x1c>
+
+ return ErrorCode;
+ }
+ }
+
+ return DESCRIPTOR_SEARCH_COMP_EndOfDescriptor;
+ 1016: 82 e0 ldi r24, 0x02 ; 2
+}
+ 1018: df 91 pop r29
+ 101a: cf 91 pop r28
+ 101c: 1f 91 pop r17
+ 101e: 0f 91 pop r16
+ 1020: ff 90 pop r15
+ 1022: ef 90 pop r14
+ 1024: df 90 pop r13
+ 1026: cf 90 pop r12
+ 1028: bf 90 pop r11
+ 102a: af 90 pop r10
+ 102c: 08 95 ret
+
+0000102e <USB_Event_Stub>:
+#include "Events.h"
+
+void USB_Event_Stub(void)
+{
+
+}
+ 102e: 08 95 ret
+
+00001030 <USB_Host_WaitForIOS>:
+
+ return ReturnStatus;
+}
+
+static uint8_t USB_Host_WaitForIOS(const uint8_t WaitType)
+{
+ 1030: 1f 93 push r17
+ 1032: cf 93 push r28
+ 1034: df 93 push r29
+ 1036: 18 2f mov r17, r24
+ #if (USB_HOST_TIMEOUT_MS < 0xFF)
+ uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
+ #else
+ uint16_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
+ 1038: c8 ee ldi r28, 0xE8 ; 232
+ 103a: d3 e0 ldi r29, 0x03 ; 3
+ #endif
+
+ while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSETUPSent()) ||
+ 103c: 07 c0 rjmp .+14 ; 0x104c <USB_Host_WaitForIOS+0x1c>
+ ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsINReceived()) ||
+ ((WaitType == USB_HOST_WAITFOR_OutReady) && Pipe_IsOUTReady())))
+ {
+ uint8_t ErrorCode;
+
+ if ((ErrorCode = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
+ 103e: 81 e0 ldi r24, 0x01 ; 1
+ 1040: 1e dc rcall .-1988 ; 0x87e <USB_Host_WaitMS>
+ 1042: 88 23 and r24, r24
+ 1044: d1 f4 brne .+52 ; 0x107a <USB_Host_WaitForIOS+0x4a>
+ return ErrorCode;
+
+ if (!(TimeoutCounter--))
+ 1046: 20 97 sbiw r28, 0x00 ; 0
+ 1048: b9 f0 breq .+46 ; 0x1078 <USB_Host_WaitForIOS+0x48>
+ 104a: 21 97 sbiw r28, 0x01 ; 1
+ uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
+ #else
+ uint16_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
+ #endif
+
+ while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSETUPSent()) ||
+ 104c: 11 23 and r17, r17
+ 104e: 29 f4 brne .+10 ; 0x105a <USB_Host_WaitForIOS+0x2a>
+ * \return Boolean \c true if the current pipe is ready for a SETUP packet, \c false otherwise.
+ */
+ static inline bool Pipe_IsSETUPSent(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Pipe_IsSETUPSent(void)
+ {
+ return ((UPINTX & (1 << TXSTPI)) ? true : false);
+ 1050: 80 91 a6 00 lds r24, 0x00A6
+ 1054: 83 ff sbrs r24, 3
+ 1056: f3 cf rjmp .-26 ; 0x103e <USB_Host_WaitForIOS+0xe>
+ 1058: 0d c0 rjmp .+26 ; 0x1074 <USB_Host_WaitForIOS+0x44>
+ 105a: 11 30 cpi r17, 0x01 ; 1
+ 105c: 29 f4 brne .+10 ; 0x1068 <USB_Host_WaitForIOS+0x38>
+ * \return Boolean \c true if the current pipe has received an IN packet, \c false otherwise.
+ */
+ static inline bool Pipe_IsINReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Pipe_IsINReceived(void)
+ {
+ return ((UPINTX & (1 << RXINI)) ? true : false);
+ 105e: 80 91 a6 00 lds r24, 0x00A6
+ ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsINReceived()) ||
+ 1062: 80 ff sbrs r24, 0
+ 1064: ec cf rjmp .-40 ; 0x103e <USB_Host_WaitForIOS+0xe>
+ 1066: 06 c0 rjmp .+12 ; 0x1074 <USB_Host_WaitForIOS+0x44>
+ uint8_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
+ #else
+ uint16_t TimeoutCounter = USB_HOST_TIMEOUT_MS;
+ #endif
+
+ while (!(((WaitType == USB_HOST_WAITFOR_SetupSent) && Pipe_IsSETUPSent()) ||
+ 1068: 12 30 cpi r17, 0x02 ; 2
+ 106a: 49 f7 brne .-46 ; 0x103e <USB_Host_WaitForIOS+0xe>
+ * \return Boolean \c true if the current pipe is ready for an OUT packet, \c false otherwise.
+ */
+ static inline bool Pipe_IsOUTReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Pipe_IsOUTReady(void)
+ {
+ return ((UPINTX & (1 << TXOUTI)) ? true : false);
+ 106c: 80 91 a6 00 lds r24, 0x00A6
+ ((WaitType == USB_HOST_WAITFOR_InReceived) && Pipe_IsINReceived()) ||
+ ((WaitType == USB_HOST_WAITFOR_OutReady) && Pipe_IsOUTReady())))
+ 1070: 82 ff sbrs r24, 2
+ 1072: e5 cf rjmp .-54 ; 0x103e <USB_Host_WaitForIOS+0xe>
+
+ if (!(TimeoutCounter--))
+ return HOST_SENDCONTROL_SoftwareTimeOut;
+ }
+
+ return HOST_SENDCONTROL_Successful;
+ 1074: 80 e0 ldi r24, 0x00 ; 0
+ 1076: 01 c0 rjmp .+2 ; 0x107a <USB_Host_WaitForIOS+0x4a>
+
+ if ((ErrorCode = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
+ return ErrorCode;
+
+ if (!(TimeoutCounter--))
+ return HOST_SENDCONTROL_SoftwareTimeOut;
+ 1078: 84 e0 ldi r24, 0x04 ; 4
+ }
+
+ return HOST_SENDCONTROL_Successful;
+}
+ 107a: df 91 pop r29
+ 107c: cf 91 pop r28
+ 107e: 1f 91 pop r17
+ 1080: 08 95 ret
+
+00001082 <USB_Host_SendControlRequest>:
+
+#define __INCLUDE_FROM_HOSTSTDREQ_C
+#include "HostStandardReq.h"
+
+uint8_t USB_Host_SendControlRequest(void* const BufferPtr)
+{
+ 1082: ef 92 push r14
+ 1084: ff 92 push r15
+ 1086: 0f 93 push r16
+ 1088: 1f 93 push r17
+ 108a: cf 93 push r28
+ 108c: df 93 push r29
+ 108e: 8c 01 movw r16, r24
+ * \return Boolean \c true if the bus is currently suspended, \c false otherwise.
+ */
+ static inline bool USB_Host_IsBusSuspended(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool USB_Host_IsBusSuspended(void)
+ {
+ return ((UHCON & (1 << SOFEN)) ? false : true);
+ 1090: e0 90 9e 00 lds r14, 0x009E
+ 1094: ff 24 eor r15, r15
+ 1096: 81 e0 ldi r24, 0x01 ; 1
+ 1098: e8 22 and r14, r24
+ 109a: ff 24 eor r15, r15
+ uint8_t* DataStream = (uint8_t*)BufferPtr;
+ bool BusSuspended = USB_Host_IsBusSuspended();
+ uint8_t ReturnStatus = HOST_SENDCONTROL_Successful;
+ uint16_t DataLen = USB_ControlRequest.wLength;
+ 109c: c0 91 29 01 lds r28, 0x0129
+ 10a0: d0 91 2a 01 lds r29, 0x012A
+ * host and attached device may occur.
+ */
+ static inline void USB_Host_ResumeBus(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_ResumeBus(void)
+ {
+ UHCON |= (1 << SOFEN);
+ 10a4: 80 91 9e 00 lds r24, 0x009E
+ 10a8: 81 60 ori r24, 0x01 ; 1
+ 10aa: 80 93 9e 00 sts 0x009E, r24
+
+ USB_Host_ResumeBus();
+
+ if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
+ 10ae: 81 e0 ldi r24, 0x01 ; 1
+ 10b0: e6 db rcall .-2100 ; 0x87e <USB_Host_WaitMS>
+ 10b2: 88 23 and r24, r24
+ 10b4: 09 f0 breq .+2 ; 0x10b8 <USB_Host_SendControlRequest+0x36>
+ 10b6: e2 c0 rjmp .+452 ; 0x127c <USB_Host_SendControlRequest+0x1fa>
+ * \param[in] Token New pipe token to set the selected pipe to, as a \c PIPE_TOKEN_* mask.
+ */
+ static inline void Pipe_SetPipeToken(const uint8_t Token) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SetPipeToken(const uint8_t Token)
+ {
+ UPCFG0X = ((UPCFG0X & ~(0x03 << PTOKEN0)) | Token);
+ 10b8: 80 91 aa 00 lds r24, 0x00AA
+ 10bc: 8f 7c andi r24, 0xCF ; 207
+ 10be: 80 93 aa 00 sts 0x00AA, r24
+
+ /** Clears the error flags for the currently selected pipe. */
+ static inline void Pipe_ClearError(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ClearError(void)
+ {
+ UPERRX = 0;
+ 10c2: 10 92 f5 00 sts 0x00F5, r1
+ UPINTX &= ~(1 << PERRI);
+ 10c6: 80 91 a6 00 lds r24, 0x00A6
+ 10ca: 8f 7e andi r24, 0xEF ; 239
+ 10cc: 80 93 a6 00 sts 0x00A6, r24
+
+ /** Unfreezes the selected pipe, allowing it to communicate with an attached device. */
+ static inline void Pipe_Unfreeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Unfreeze(void)
+ {
+ UPCONX &= ~(1 << PFREEZE);
+ 10d0: 80 91 a9 00 lds r24, 0x00A9
+ 10d4: 8f 7b andi r24, 0xBF ; 191
+ 10d6: 80 93 a9 00 sts 0x00A9, r24
+ Pipe_SetPipeToken(PIPE_TOKEN_SETUP);
+ Pipe_ClearError();
+
+ Pipe_Unfreeze();
+
+ Pipe_Write_8(USB_ControlRequest.bmRequestType);
+ 10da: 80 91 23 01 lds r24, 0x0123
+ * \param[in] Data Data to write into the the currently selected pipe's FIFO buffer.
+ */
+ static inline void Pipe_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Write_8(const uint8_t Data)
+ {
+ UPDATX = Data;
+ 10de: 80 93 af 00 sts 0x00AF, r24
+ Pipe_Write_8(USB_ControlRequest.bRequest);
+ 10e2: 80 91 24 01 lds r24, 0x0124
+ 10e6: 80 93 af 00 sts 0x00AF, r24
+ Pipe_Write_16_LE(USB_ControlRequest.wValue);
+ 10ea: 90 91 25 01 lds r25, 0x0125
+ 10ee: 80 91 26 01 lds r24, 0x0126
+ * \param[in] Data Data to write to the currently selected pipe's FIFO buffer.
+ */
+ static inline void Pipe_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Write_16_LE(const uint16_t Data)
+ {
+ UPDATX = (Data & 0xFF);
+ 10f2: 90 93 af 00 sts 0x00AF, r25
+ UPDATX = (Data >> 8);
+ 10f6: 80 93 af 00 sts 0x00AF, r24
+ Pipe_Write_16_LE(USB_ControlRequest.wIndex);
+ 10fa: 90 91 27 01 lds r25, 0x0127
+ 10fe: 80 91 28 01 lds r24, 0x0128
+ * \param[in] Data Data to write to the currently selected pipe's FIFO buffer.
+ */
+ static inline void Pipe_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Write_16_LE(const uint16_t Data)
+ {
+ UPDATX = (Data & 0xFF);
+ 1102: 90 93 af 00 sts 0x00AF, r25
+ UPDATX = (Data >> 8);
+ 1106: 80 93 af 00 sts 0x00AF, r24
+ Pipe_Write_16_LE(USB_ControlRequest.wLength);
+ 110a: 90 91 29 01 lds r25, 0x0129
+ 110e: 80 91 2a 01 lds r24, 0x012A
+ * \param[in] Data Data to write to the currently selected pipe's FIFO buffer.
+ */
+ static inline void Pipe_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Write_16_LE(const uint16_t Data)
+ {
+ UPDATX = (Data & 0xFF);
+ 1112: 90 93 af 00 sts 0x00AF, r25
+ UPDATX = (Data >> 8);
+ 1116: 80 93 af 00 sts 0x00AF, r24
+ * \ingroup Group_PipePacketManagement_AVR8
+ */
+ static inline void Pipe_ClearSETUP(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ClearSETUP(void)
+ {
+ UPINTX &= ~((1 << TXSTPI) | (1 << FIFOCON));
+ 111a: 80 91 a6 00 lds r24, 0x00A6
+ 111e: 87 77 andi r24, 0x77 ; 119
+ 1120: 80 93 a6 00 sts 0x00A6, r24
+
+ Pipe_ClearSETUP();
+
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_SetupSent)) != HOST_SENDCONTROL_Successful)
+ 1124: 80 e0 ldi r24, 0x00 ; 0
+ 1126: 84 df rcall .-248 ; 0x1030 <USB_Host_WaitForIOS>
+ 1128: 88 23 and r24, r24
+ 112a: 09 f0 breq .+2 ; 0x112e <USB_Host_SendControlRequest+0xac>
+ 112c: a7 c0 rjmp .+334 ; 0x127c <USB_Host_SendControlRequest+0x1fa>
+
+ /** Freezes the selected pipe, preventing it from communicating with an attached device. */
+ static inline void Pipe_Freeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Freeze(void)
+ {
+ UPCONX |= (1 << PFREEZE);
+ 112e: 80 91 a9 00 lds r24, 0x00A9
+ 1132: 80 64 ori r24, 0x40 ; 64
+ 1134: 80 93 a9 00 sts 0x00A9, r24
+ goto End_Of_Control_Send;
+
+ Pipe_Freeze();
+
+ if ((ReturnStatus = USB_Host_WaitMS(1)) != HOST_WAITERROR_Successful)
+ 1138: 81 e0 ldi r24, 0x01 ; 1
+ 113a: a1 db rcall .-2238 ; 0x87e <USB_Host_WaitMS>
+ 113c: 88 23 and r24, r24
+ 113e: 09 f0 breq .+2 ; 0x1142 <USB_Host_SendControlRequest+0xc0>
+ 1140: 9d c0 rjmp .+314 ; 0x127c <USB_Host_SendControlRequest+0x1fa>
+ goto End_Of_Control_Send;
+
+ if ((USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_DIRECTION) == REQDIR_DEVICETOHOST)
+ 1142: 80 91 23 01 lds r24, 0x0123
+ 1146: 87 ff sbrs r24, 7
+ 1148: 4f c0 rjmp .+158 ; 0x11e8 <USB_Host_SendControlRequest+0x166>
+ * \param[in] Token New pipe token to set the selected pipe to, as a \c PIPE_TOKEN_* mask.
+ */
+ static inline void Pipe_SetPipeToken(const uint8_t Token) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SetPipeToken(const uint8_t Token)
+ {
+ UPCFG0X = ((UPCFG0X & ~(0x03 << PTOKEN0)) | Token);
+ 114a: 80 91 aa 00 lds r24, 0x00AA
+ 114e: 8f 7c andi r24, 0xCF ; 207
+ 1150: 80 61 ori r24, 0x10 ; 16
+ 1152: 80 93 aa 00 sts 0x00AA, r24
+ {
+ Pipe_SetPipeToken(PIPE_TOKEN_IN);
+
+ if (DataStream != NULL)
+ 1156: 01 15 cp r16, r1
+ 1158: 11 05 cpc r17, r1
+ 115a: 61 f5 brne .+88 ; 0x11b4 <USB_Host_SendControlRequest+0x132>
+ 115c: 2d c0 rjmp .+90 ; 0x11b8 <USB_Host_SendControlRequest+0x136>
+
+ /** Unfreezes the selected pipe, allowing it to communicate with an attached device. */
+ static inline void Pipe_Unfreeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Unfreeze(void)
+ {
+ UPCONX &= ~(1 << PFREEZE);
+ 115e: 80 91 a9 00 lds r24, 0x00A9
+ 1162: 8f 7b andi r24, 0xBF ; 191
+ 1164: 80 93 a9 00 sts 0x00A9, r24
+ {
+ while (DataLen)
+ {
+ Pipe_Unfreeze();
+
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)
+ 1168: 81 e0 ldi r24, 0x01 ; 1
+ 116a: 62 df rcall .-316 ; 0x1030 <USB_Host_WaitForIOS>
+ 116c: 88 23 and r24, r24
+ 116e: 09 f0 breq .+2 ; 0x1172 <USB_Host_SendControlRequest+0xf0>
+ 1170: 85 c0 rjmp .+266 ; 0x127c <USB_Host_SendControlRequest+0x1fa>
+ * \return Total number of bytes in the currently selected pipe's FIFO buffer.
+ */
+ static inline uint16_t Pipe_BytesInPipe(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline uint16_t Pipe_BytesInPipe(void)
+ {
+ return UPBCX;
+ 1172: 80 91 f6 00 lds r24, 0x00F6
+ 1176: 90 91 f7 00 lds r25, 0x00F7
+ goto End_Of_Control_Send;
+
+ if (!(Pipe_BytesInPipe()))
+ 117a: 00 97 sbiw r24, 0x00 ; 0
+ 117c: 49 f4 brne .+18 ; 0x1190 <USB_Host_SendControlRequest+0x10e>
+ DataLen = 0;
+ 117e: c0 e0 ldi r28, 0x00 ; 0
+ 1180: d0 e0 ldi r29, 0x00 ; 0
+ 1182: 06 c0 rjmp .+12 ; 0x1190 <USB_Host_SendControlRequest+0x10e>
+ * \return Next byte in the currently selected pipe's FIFO buffer.
+ */
+ static inline uint8_t Pipe_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline uint8_t Pipe_Read_8(void)
+ {
+ return UPDATX;
+ 1184: 80 91 af 00 lds r24, 0x00AF
+
+ while (Pipe_BytesInPipe() && DataLen)
+ {
+ *(DataStream++) = Pipe_Read_8();
+ 1188: f8 01 movw r30, r16
+ 118a: 81 93 st Z+, r24
+ 118c: 8f 01 movw r16, r30
+ DataLen--;
+ 118e: 21 97 sbiw r28, 0x01 ; 1
+ * \return Total number of bytes in the currently selected pipe's FIFO buffer.
+ */
+ static inline uint16_t Pipe_BytesInPipe(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline uint16_t Pipe_BytesInPipe(void)
+ {
+ return UPBCX;
+ 1190: 80 91 f6 00 lds r24, 0x00F6
+ 1194: 90 91 f7 00 lds r25, 0x00F7
+ goto End_Of_Control_Send;
+
+ if (!(Pipe_BytesInPipe()))
+ DataLen = 0;
+
+ while (Pipe_BytesInPipe() && DataLen)
+ 1198: 00 97 sbiw r24, 0x00 ; 0
+ 119a: 11 f0 breq .+4 ; 0x11a0 <USB_Host_SendControlRequest+0x11e>
+ 119c: 20 97 sbiw r28, 0x00 ; 0
+ 119e: 91 f7 brne .-28 ; 0x1184 <USB_Host_SendControlRequest+0x102>
+
+ /** Freezes the selected pipe, preventing it from communicating with an attached device. */
+ static inline void Pipe_Freeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Freeze(void)
+ {
+ UPCONX |= (1 << PFREEZE);
+ 11a0: 80 91 a9 00 lds r24, 0x00A9
+ 11a4: 80 64 ori r24, 0x40 ; 64
+ 11a6: 80 93 a9 00 sts 0x00A9, r24
+ * \ingroup Group_PipePacketManagement_AVR8
+ */
+ static inline void Pipe_ClearIN(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ClearIN(void)
+ {
+ UPINTX &= ~((1 << RXINI) | (1 << FIFOCON));
+ 11aa: 80 91 a6 00 lds r24, 0x00A6
+ 11ae: 8e 77 andi r24, 0x7E ; 126
+ 11b0: 80 93 a6 00 sts 0x00A6, r24
+ {
+ Pipe_SetPipeToken(PIPE_TOKEN_IN);
+
+ if (DataStream != NULL)
+ {
+ while (DataLen)
+ 11b4: 20 97 sbiw r28, 0x00 ; 0
+ 11b6: 99 f6 brne .-90 ; 0x115e <USB_Host_SendControlRequest+0xdc>
+ * \param[in] Token New pipe token to set the selected pipe to, as a \c PIPE_TOKEN_* mask.
+ */
+ static inline void Pipe_SetPipeToken(const uint8_t Token) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SetPipeToken(const uint8_t Token)
+ {
+ UPCFG0X = ((UPCFG0X & ~(0x03 << PTOKEN0)) | Token);
+ 11b8: 80 91 aa 00 lds r24, 0x00AA
+ 11bc: 8f 7c andi r24, 0xCF ; 207
+ 11be: 80 62 ori r24, 0x20 ; 32
+ 11c0: 80 93 aa 00 sts 0x00AA, r24
+
+ /** Unfreezes the selected pipe, allowing it to communicate with an attached device. */
+ static inline void Pipe_Unfreeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Unfreeze(void)
+ {
+ UPCONX &= ~(1 << PFREEZE);
+ 11c4: 80 91 a9 00 lds r24, 0x00A9
+ 11c8: 8f 7b andi r24, 0xBF ; 191
+ 11ca: 80 93 a9 00 sts 0x00A9, r24
+ }
+
+ Pipe_SetPipeToken(PIPE_TOKEN_OUT);
+ Pipe_Unfreeze();
+
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
+ 11ce: 82 e0 ldi r24, 0x02 ; 2
+ 11d0: 2f df rcall .-418 ; 0x1030 <USB_Host_WaitForIOS>
+ 11d2: 88 23 and r24, r24
+ 11d4: 09 f0 breq .+2 ; 0x11d8 <USB_Host_SendControlRequest+0x156>
+ 11d6: 52 c0 rjmp .+164 ; 0x127c <USB_Host_SendControlRequest+0x1fa>
+ * \ingroup Group_PipePacketManagement_AVR8
+ */
+ static inline void Pipe_ClearOUT(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ClearOUT(void)
+ {
+ UPINTX &= ~((1 << TXOUTI) | (1 << FIFOCON));
+ 11d8: 80 91 a6 00 lds r24, 0x00A6
+ 11dc: 8b 77 andi r24, 0x7B ; 123
+ 11de: 80 93 a6 00 sts 0x00A6, r24
+ goto End_Of_Control_Send;
+
+ Pipe_ClearOUT();
+
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
+ 11e2: 82 e0 ldi r24, 0x02 ; 2
+ 11e4: 25 df rcall .-438 ; 0x1030 <USB_Host_WaitForIOS>
+ 11e6: 4a c0 rjmp .+148 ; 0x127c <USB_Host_SendControlRequest+0x1fa>
+ goto End_Of_Control_Send;
+ }
+ else
+ {
+ if (DataStream != NULL)
+ 11e8: 01 15 cp r16, r1
+ 11ea: 11 05 cpc r17, r1
+ 11ec: 99 f1 breq .+102 ; 0x1254 <USB_Host_SendControlRequest+0x1d2>
+ * \param[in] Token New pipe token to set the selected pipe to, as a \c PIPE_TOKEN_* mask.
+ */
+ static inline void Pipe_SetPipeToken(const uint8_t Token) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SetPipeToken(const uint8_t Token)
+ {
+ UPCFG0X = ((UPCFG0X & ~(0x03 << PTOKEN0)) | Token);
+ 11ee: 80 91 aa 00 lds r24, 0x00AA
+ 11f2: 8f 7c andi r24, 0xCF ; 207
+ 11f4: 80 62 ori r24, 0x20 ; 32
+ 11f6: 80 93 aa 00 sts 0x00AA, r24
+
+ /** Unfreezes the selected pipe, allowing it to communicate with an attached device. */
+ static inline void Pipe_Unfreeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Unfreeze(void)
+ {
+ UPCONX &= ~(1 << PFREEZE);
+ 11fa: 80 91 a9 00 lds r24, 0x00A9
+ 11fe: 8f 7b andi r24, 0xBF ; 191
+ 1200: 80 93 a9 00 sts 0x00A9, r24
+ {
+ Pipe_SetPipeToken(PIPE_TOKEN_OUT);
+ Pipe_Unfreeze();
+
+ while (DataLen)
+ 1204: 1c c0 rjmp .+56 ; 0x123e <USB_Host_SendControlRequest+0x1bc>
+ {
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
+ 1206: 82 e0 ldi r24, 0x02 ; 2
+ 1208: 13 df rcall .-474 ; 0x1030 <USB_Host_WaitForIOS>
+ 120a: 88 23 and r24, r24
+ 120c: b9 f5 brne .+110 ; 0x127c <USB_Host_SendControlRequest+0x1fa>
+ 120e: f8 01 movw r30, r16
+ 1210: 06 c0 rjmp .+12 ; 0x121e <USB_Host_SendControlRequest+0x19c>
+ goto End_Of_Control_Send;
+
+ while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))
+ {
+ Pipe_Write_8(*(DataStream++));
+ 1212: 81 91 ld r24, Z+
+ 1214: 8f 01 movw r16, r30
+ * \param[in] Data Data to write into the the currently selected pipe's FIFO buffer.
+ */
+ static inline void Pipe_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Write_8(const uint8_t Data)
+ {
+ UPDATX = Data;
+ 1216: 80 93 af 00 sts 0x00AF, r24
+ DataLen--;
+ 121a: 21 97 sbiw r28, 0x01 ; 1
+ while (DataLen)
+ {
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
+ goto End_Of_Control_Send;
+
+ while (DataLen && (Pipe_BytesInPipe() < USB_ControlPipeSize))
+ 121c: 59 f0 breq .+22 ; 0x1234 <USB_Host_SendControlRequest+0x1b2>
+ 121e: 8f 01 movw r16, r30
+ * \return Total number of bytes in the currently selected pipe's FIFO buffer.
+ */
+ static inline uint16_t Pipe_BytesInPipe(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline uint16_t Pipe_BytesInPipe(void)
+ {
+ return UPBCX;
+ 1220: 20 91 f6 00 lds r18, 0x00F6
+ 1224: 30 91 f7 00 lds r19, 0x00F7
+ 1228: 80 91 1b 01 lds r24, 0x011B
+ 122c: 90 e0 ldi r25, 0x00 ; 0
+ 122e: 28 17 cp r18, r24
+ 1230: 39 07 cpc r19, r25
+ 1232: 78 f3 brcs .-34 ; 0x1212 <USB_Host_SendControlRequest+0x190>
+ * \ingroup Group_PipePacketManagement_AVR8
+ */
+ static inline void Pipe_ClearOUT(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ClearOUT(void)
+ {
+ UPINTX &= ~((1 << TXOUTI) | (1 << FIFOCON));
+ 1234: 80 91 a6 00 lds r24, 0x00A6
+ 1238: 8b 77 andi r24, 0x7B ; 123
+ 123a: 80 93 a6 00 sts 0x00A6, r24
+ if (DataStream != NULL)
+ {
+ Pipe_SetPipeToken(PIPE_TOKEN_OUT);
+ Pipe_Unfreeze();
+
+ while (DataLen)
+ 123e: 20 97 sbiw r28, 0x00 ; 0
+ 1240: 11 f7 brne .-60 ; 0x1206 <USB_Host_SendControlRequest+0x184>
+ }
+
+ Pipe_ClearOUT();
+ }
+
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_OutReady)) != HOST_SENDCONTROL_Successful)
+ 1242: 82 e0 ldi r24, 0x02 ; 2
+ 1244: f5 de rcall .-534 ; 0x1030 <USB_Host_WaitForIOS>
+ 1246: 88 23 and r24, r24
+ 1248: c9 f4 brne .+50 ; 0x127c <USB_Host_SendControlRequest+0x1fa>
+
+ /** Freezes the selected pipe, preventing it from communicating with an attached device. */
+ static inline void Pipe_Freeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Freeze(void)
+ {
+ UPCONX |= (1 << PFREEZE);
+ 124a: 80 91 a9 00 lds r24, 0x00A9
+ 124e: 80 64 ori r24, 0x40 ; 64
+ 1250: 80 93 a9 00 sts 0x00A9, r24
+ * \param[in] Token New pipe token to set the selected pipe to, as a \c PIPE_TOKEN_* mask.
+ */
+ static inline void Pipe_SetPipeToken(const uint8_t Token) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SetPipeToken(const uint8_t Token)
+ {
+ UPCFG0X = ((UPCFG0X & ~(0x03 << PTOKEN0)) | Token);
+ 1254: 80 91 aa 00 lds r24, 0x00AA
+ 1258: 8f 7c andi r24, 0xCF ; 207
+ 125a: 80 61 ori r24, 0x10 ; 16
+ 125c: 80 93 aa 00 sts 0x00AA, r24
+
+ /** Unfreezes the selected pipe, allowing it to communicate with an attached device. */
+ static inline void Pipe_Unfreeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Unfreeze(void)
+ {
+ UPCONX &= ~(1 << PFREEZE);
+ 1260: 80 91 a9 00 lds r24, 0x00A9
+ 1264: 8f 7b andi r24, 0xBF ; 191
+ 1266: 80 93 a9 00 sts 0x00A9, r24
+ }
+
+ Pipe_SetPipeToken(PIPE_TOKEN_IN);
+ Pipe_Unfreeze();
+
+ if ((ReturnStatus = USB_Host_WaitForIOS(USB_HOST_WAITFOR_InReceived)) != HOST_SENDCONTROL_Successful)
+ 126a: 81 e0 ldi r24, 0x01 ; 1
+ 126c: e1 de rcall .-574 ; 0x1030 <USB_Host_WaitForIOS>
+ 126e: 88 23 and r24, r24
+ 1270: 29 f4 brne .+10 ; 0x127c <USB_Host_SendControlRequest+0x1fa>
+ * \ingroup Group_PipePacketManagement_AVR8
+ */
+ static inline void Pipe_ClearIN(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ClearIN(void)
+ {
+ UPINTX &= ~((1 << RXINI) | (1 << FIFOCON));
+ 1272: 90 91 a6 00 lds r25, 0x00A6
+ 1276: 9e 77 andi r25, 0x7E ; 126
+ 1278: 90 93 a6 00 sts 0x00A6, r25
+
+ /** Freezes the selected pipe, preventing it from communicating with an attached device. */
+ static inline void Pipe_Freeze(void) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_Freeze(void)
+ {
+ UPCONX |= (1 << PFREEZE);
+ 127c: 90 91 a9 00 lds r25, 0x00A9
+ 1280: 90 64 ori r25, 0x40 ; 64
+ 1282: 90 93 a9 00 sts 0x00A9, r25
+ }
+
+End_Of_Control_Send:
+ Pipe_Freeze();
+
+ if (BusSuspended)
+ 1286: e1 14 cp r14, r1
+ 1288: f1 04 cpc r15, r1
+ 128a: 29 f4 brne .+10 ; 0x1296 <USB_Host_SendControlRequest+0x214>
+ * messages to the device.
+ */
+ static inline void USB_Host_SuspendBus(void) ATTR_ALWAYS_INLINE;
+ static inline void USB_Host_SuspendBus(void)
+ {
+ UHCON &= ~(1 << SOFEN);
+ 128c: 90 91 9e 00 lds r25, 0x009E
+ 1290: 9e 7f andi r25, 0xFE ; 254
+ 1292: 90 93 9e 00 sts 0x009E, r25
+ * \param[in] PipeNumber Index of the pipe to reset.
+ */
+ static inline void Pipe_ResetPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_ResetPipe(const uint8_t PipeNumber)
+ {
+ UPRST = (1 << PipeNumber);
+ 1296: 91 e0 ldi r25, 0x01 ; 1
+ 1298: 90 93 a8 00 sts 0x00A8, r25
+ UPRST = 0;
+ 129c: 10 92 a8 00 sts 0x00A8, r1
+ USB_Host_SuspendBus();
+
+ Pipe_ResetPipe(PIPE_CONTROLPIPE);
+
+ return ReturnStatus;
+}
+ 12a0: df 91 pop r29
+ 12a2: cf 91 pop r28
+ 12a4: 1f 91 pop r17
+ 12a6: 0f 91 pop r16
+ 12a8: ff 90 pop r15
+ 12aa: ef 90 pop r14
+ 12ac: 08 95 ret
+
+000012ae <USB_USBTask>:
+#if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR)
+volatile uint8_t USB_DeviceState;
+#endif
+
+void USB_USBTask(void)
+{
+ 12ae: 1f 93 push r17
+ 12b0: cf 93 push r28
+ 12b2: df 93 push r29
+ * \return Index of the currently selected pipe.
+ */
+ static inline uint8_t Pipe_GetCurrentPipe(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline uint8_t Pipe_GetCurrentPipe(void)
+ {
+ return (UPNUM & PIPE_PIPENUM_MASK);
+ 12b4: c7 ea ldi r28, 0xA7 ; 167
+ 12b6: d0 e0 ldi r29, 0x00 ; 0
+ 12b8: 18 81 ld r17, Y
+ 12ba: 17 70 andi r17, 0x07 ; 7
+ * \param[in] PipeNumber Index of the pipe to select.
+ */
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber) ATTR_ALWAYS_INLINE;
+ static inline void Pipe_SelectPipe(const uint8_t PipeNumber)
+ {
+ UPNUM = PipeNumber;
+ 12bc: 18 82 st Y, r1
+{
+ uint8_t PrevPipe = Pipe_GetCurrentPipe();
+
+ Pipe_SelectPipe(PIPE_CONTROLPIPE);
+
+ USB_Host_ProcessNextHostState();
+ 12be: 34 db rcall .-2456 ; 0x928 <USB_Host_ProcessNextHostState>
+ 12c0: 18 83 st Y, r17
+ if (USB_CurrentMode == USB_MODE_Device)
+ USB_DeviceTask();
+ else if (USB_CurrentMode == USB_MODE_Host)
+ USB_HostTask();
+ #endif
+}
+ 12c2: df 91 pop r29
+ 12c4: cf 91 pop r28
+ 12c6: 1f 91 pop r17
+ 12c8: 08 95 ret
+
+000012ca <Serial_putchar>:
+ * \param[in] DataByte Byte to transmit through the USART.
+ */
+ static inline void Serial_SendByte(const char DataByte) ATTR_ALWAYS_INLINE;
+ static inline void Serial_SendByte(const char DataByte)
+ {
+ while (!(UCSR1A & (1 << UDRE1)));
+ 12ca: 90 91 c8 00 lds r25, 0x00C8
+ 12ce: 95 ff sbrs r25, 5
+ 12d0: fc cf rjmp .-8 ; 0x12ca <Serial_putchar>
+ UDR1 = DataByte;
+ 12d2: 80 93 ce 00 sts 0x00CE, r24
+{
+ (void)Stream;
+
+ Serial_SendByte(DataByte);
+ return 0;
+}
+ 12d6: 80 e0 ldi r24, 0x00 ; 0
+ 12d8: 90 e0 ldi r25, 0x00 ; 0
+ 12da: 08 95 ret
+
+000012dc <Serial_getchar>:
+ * \return Boolean \c true if a character has been received, \c false otherwise.
+ */
+ static inline bool Serial_IsCharReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+ static inline bool Serial_IsCharReceived(void)
+ {
+ return ((UCSR1A & (1 << RXC1)) ? true : false);
+ 12dc: 80 91 c8 00 lds r24, 0x00C8
+
+int Serial_getchar(FILE *Stream)
+{
+ (void)Stream;
+
+ if (!(Serial_IsCharReceived()))
+ 12e0: 87 ff sbrs r24, 7
+ 12e2: 08 c0 rjmp .+16 ; 0x12f4 <Serial_getchar+0x18>
+ 12e4: 80 91 c8 00 lds r24, 0x00C8
+ * \return Next byte received from the USART, or a negative value if no byte has been received.
+ */
+ static inline int16_t Serial_ReceiveByte(void) ATTR_ALWAYS_INLINE;
+ static inline int16_t Serial_ReceiveByte(void)
+ {
+ if (!(Serial_IsCharReceived()))
+ 12e8: 87 ff sbrs r24, 7
+ 12ea: 07 c0 rjmp .+14 ; 0x12fa <Serial_getchar+0x1e>
+ return -1;
+
+ return UDR1;
+ 12ec: 20 91 ce 00 lds r18, 0x00CE
+ 12f0: 30 e0 ldi r19, 0x00 ; 0
+ 12f2: 05 c0 rjmp .+10 ; 0x12fe <Serial_getchar+0x22>
+ return _FDEV_EOF;
+ 12f4: 2e ef ldi r18, 0xFE ; 254
+ 12f6: 3f ef ldi r19, 0xFF ; 255
+ 12f8: 02 c0 rjmp .+4 ; 0x12fe <Serial_getchar+0x22>
+ */
+ static inline int16_t Serial_ReceiveByte(void) ATTR_ALWAYS_INLINE;
+ static inline int16_t Serial_ReceiveByte(void)
+ {
+ if (!(Serial_IsCharReceived()))
+ return -1;
+ 12fa: 2f ef ldi r18, 0xFF ; 255
+ 12fc: 3f ef ldi r19, 0xFF ; 255
+
+ return Serial_ReceiveByte();
+}
+ 12fe: c9 01 movw r24, r18
+ 1300: 08 95 ret
+
+00001302 <printf_P>:
+ 1302: df 93 push r29
+ 1304: cf 93 push r28
+ 1306: cd b7 in r28, 0x3d ; 61
+ 1308: de b7 in r29, 0x3e ; 62
+ 130a: fe 01 movw r30, r28
+ 130c: 35 96 adiw r30, 0x05 ; 5
+ 130e: 61 91 ld r22, Z+
+ 1310: 71 91 ld r23, Z+
+ 1312: 80 91 3c 01 lds r24, 0x013C
+ 1316: 90 91 3d 01 lds r25, 0x013D
+ 131a: dc 01 movw r26, r24
+ 131c: 13 96 adiw r26, 0x03 ; 3
+ 131e: 2c 91 ld r18, X
+ 1320: 13 97 sbiw r26, 0x03 ; 3
+ 1322: 28 60 ori r18, 0x08 ; 8
+ 1324: 13 96 adiw r26, 0x03 ; 3
+ 1326: 2c 93 st X, r18
+ 1328: af 01 movw r20, r30
+ 132a: 42 d0 rcall .+132 ; 0x13b0 <vfprintf>
+ 132c: e0 91 3c 01 lds r30, 0x013C
+ 1330: f0 91 3d 01 lds r31, 0x013D
+ 1334: 23 81 ldd r18, Z+3 ; 0x03
+ 1336: 27 7f andi r18, 0xF7 ; 247
+ 1338: 23 83 std Z+3, r18 ; 0x03
+ 133a: cf 91 pop r28
+ 133c: df 91 pop r29
+ 133e: 08 95 ret
+
+00001340 <puts_P>:
+ 1340: ef 92 push r14
+ 1342: ff 92 push r15
+ 1344: 0f 93 push r16
+ 1346: 1f 93 push r17
+ 1348: cf 93 push r28
+ 134a: df 93 push r29
+ 134c: 8c 01 movw r16, r24
+ 134e: e0 91 3c 01 lds r30, 0x013C
+ 1352: f0 91 3d 01 lds r31, 0x013D
+ 1356: 83 81 ldd r24, Z+3 ; 0x03
+ 1358: 81 ff sbrs r24, 1
+ 135a: 20 c0 rjmp .+64 ; 0x139c <puts_P+0x5c>
+ 135c: c0 e0 ldi r28, 0x00 ; 0
+ 135e: d0 e0 ldi r29, 0x00 ; 0
+ 1360: 0c c0 rjmp .+24 ; 0x137a <puts_P+0x3a>
+ 1362: db 01 movw r26, r22
+ 1364: 18 96 adiw r26, 0x08 ; 8
+ 1366: ed 91 ld r30, X+
+ 1368: fc 91 ld r31, X
+ 136a: 19 97 sbiw r26, 0x09 ; 9
+ 136c: 09 95 icall
+ 136e: 00 97 sbiw r24, 0x00 ; 0
+ 1370: 11 f0 breq .+4 ; 0x1376 <puts_P+0x36>
+ 1372: cf ef ldi r28, 0xFF ; 255
+ 1374: df ef ldi r29, 0xFF ; 255
+ 1376: 0f 5f subi r16, 0xFF ; 255
+ 1378: 1f 4f sbci r17, 0xFF ; 255
+ 137a: f8 01 movw r30, r16
+ 137c: 84 91 lpm r24, Z+
+ 137e: 60 91 3c 01 lds r22, 0x013C
+ 1382: 70 91 3d 01 lds r23, 0x013D
+ 1386: 88 23 and r24, r24
+ 1388: 61 f7 brne .-40 ; 0x1362 <puts_P+0x22>
+ 138a: db 01 movw r26, r22
+ 138c: 18 96 adiw r26, 0x08 ; 8
+ 138e: ed 91 ld r30, X+
+ 1390: fc 91 ld r31, X
+ 1392: 19 97 sbiw r26, 0x09 ; 9
+ 1394: 8a e0 ldi r24, 0x0A ; 10
+ 1396: 09 95 icall
+ 1398: 00 97 sbiw r24, 0x00 ; 0
+ 139a: 11 f0 breq .+4 ; 0x13a0 <puts_P+0x60>
+ 139c: cf ef ldi r28, 0xFF ; 255
+ 139e: df ef ldi r29, 0xFF ; 255
+ 13a0: ce 01 movw r24, r28
+ 13a2: df 91 pop r29
+ 13a4: cf 91 pop r28
+ 13a6: 1f 91 pop r17
+ 13a8: 0f 91 pop r16
+ 13aa: ff 90 pop r15
+ 13ac: ef 90 pop r14
+ 13ae: 08 95 ret
+
+000013b0 <vfprintf>:
+ 13b0: 2f 92 push r2
+ 13b2: 3f 92 push r3
+ 13b4: 4f 92 push r4
+ 13b6: 5f 92 push r5
+ 13b8: 6f 92 push r6
+ 13ba: 7f 92 push r7
+ 13bc: 8f 92 push r8
+ 13be: 9f 92 push r9
+ 13c0: af 92 push r10
+ 13c2: bf 92 push r11
+ 13c4: cf 92 push r12
+ 13c6: df 92 push r13
+ 13c8: ef 92 push r14
+ 13ca: ff 92 push r15
+ 13cc: 0f 93 push r16
+ 13ce: 1f 93 push r17
+ 13d0: df 93 push r29
+ 13d2: cf 93 push r28
+ 13d4: cd b7 in r28, 0x3d ; 61
+ 13d6: de b7 in r29, 0x3e ; 62
+ 13d8: 2c 97 sbiw r28, 0x0c ; 12
+ 13da: 0f b6 in r0, 0x3f ; 63
+ 13dc: f8 94 cli
+ 13de: de bf out 0x3e, r29 ; 62
+ 13e0: 0f be out 0x3f, r0 ; 63
+ 13e2: cd bf out 0x3d, r28 ; 61
+ 13e4: 6c 01 movw r12, r24
+ 13e6: 1b 01 movw r2, r22
+ 13e8: 8a 01 movw r16, r20
+ 13ea: fc 01 movw r30, r24
+ 13ec: 17 82 std Z+7, r1 ; 0x07
+ 13ee: 16 82 std Z+6, r1 ; 0x06
+ 13f0: 83 81 ldd r24, Z+3 ; 0x03
+ 13f2: 81 ff sbrs r24, 1
+ 13f4: c4 c1 rjmp .+904 ; 0x177e <vfprintf+0x3ce>
+ 13f6: 2e 01 movw r4, r28
+ 13f8: 08 94 sec
+ 13fa: 41 1c adc r4, r1
+ 13fc: 51 1c adc r5, r1
+ 13fe: f6 01 movw r30, r12
+ 1400: 93 81 ldd r25, Z+3 ; 0x03
+ 1402: f1 01 movw r30, r2
+ 1404: 93 fd sbrc r25, 3
+ 1406: 85 91 lpm r24, Z+
+ 1408: 93 ff sbrs r25, 3
+ 140a: 81 91 ld r24, Z+
+ 140c: 1f 01 movw r2, r30
+ 140e: 88 23 and r24, r24
+ 1410: 09 f4 brne .+2 ; 0x1414 <vfprintf+0x64>
+ 1412: b1 c1 rjmp .+866 ; 0x1776 <vfprintf+0x3c6>
+ 1414: 85 32 cpi r24, 0x25 ; 37
+ 1416: 39 f4 brne .+14 ; 0x1426 <vfprintf+0x76>
+ 1418: 93 fd sbrc r25, 3
+ 141a: 85 91 lpm r24, Z+
+ 141c: 93 ff sbrs r25, 3
+ 141e: 81 91 ld r24, Z+
+ 1420: 1f 01 movw r2, r30
+ 1422: 85 32 cpi r24, 0x25 ; 37
+ 1424: 21 f4 brne .+8 ; 0x142e <vfprintf+0x7e>
+ 1426: 90 e0 ldi r25, 0x00 ; 0
+ 1428: b6 01 movw r22, r12
+ 142a: db d1 rcall .+950 ; 0x17e2 <fputc>
+ 142c: e8 cf rjmp .-48 ; 0x13fe <vfprintf+0x4e>
+ 142e: ee 24 eor r14, r14
+ 1430: ff 24 eor r15, r15
+ 1432: 20 e0 ldi r18, 0x00 ; 0
+ 1434: 20 32 cpi r18, 0x20 ; 32
+ 1436: b0 f4 brcc .+44 ; 0x1464 <vfprintf+0xb4>
+ 1438: 8b 32 cpi r24, 0x2B ; 43
+ 143a: 69 f0 breq .+26 ; 0x1456 <vfprintf+0xa6>
+ 143c: 8c 32 cpi r24, 0x2C ; 44
+ 143e: 28 f4 brcc .+10 ; 0x144a <vfprintf+0x9a>
+ 1440: 80 32 cpi r24, 0x20 ; 32
+ 1442: 51 f0 breq .+20 ; 0x1458 <vfprintf+0xa8>
+ 1444: 83 32 cpi r24, 0x23 ; 35
+ 1446: 71 f4 brne .+28 ; 0x1464 <vfprintf+0xb4>
+ 1448: 0b c0 rjmp .+22 ; 0x1460 <vfprintf+0xb0>
+ 144a: 8d 32 cpi r24, 0x2D ; 45
+ 144c: 39 f0 breq .+14 ; 0x145c <vfprintf+0xac>
+ 144e: 80 33 cpi r24, 0x30 ; 48
+ 1450: 49 f4 brne .+18 ; 0x1464 <vfprintf+0xb4>
+ 1452: 21 60 ori r18, 0x01 ; 1
+ 1454: 2c c0 rjmp .+88 ; 0x14ae <vfprintf+0xfe>
+ 1456: 22 60 ori r18, 0x02 ; 2
+ 1458: 24 60 ori r18, 0x04 ; 4
+ 145a: 29 c0 rjmp .+82 ; 0x14ae <vfprintf+0xfe>
+ 145c: 28 60 ori r18, 0x08 ; 8
+ 145e: 27 c0 rjmp .+78 ; 0x14ae <vfprintf+0xfe>
+ 1460: 20 61 ori r18, 0x10 ; 16
+ 1462: 25 c0 rjmp .+74 ; 0x14ae <vfprintf+0xfe>
+ 1464: 27 fd sbrc r18, 7
+ 1466: 2c c0 rjmp .+88 ; 0x14c0 <vfprintf+0x110>
+ 1468: 38 2f mov r19, r24
+ 146a: 30 53 subi r19, 0x30 ; 48
+ 146c: 3a 30 cpi r19, 0x0A ; 10
+ 146e: 98 f4 brcc .+38 ; 0x1496 <vfprintf+0xe6>
+ 1470: 26 ff sbrs r18, 6
+ 1472: 08 c0 rjmp .+16 ; 0x1484 <vfprintf+0xd4>
+ 1474: 8e 2d mov r24, r14
+ 1476: 88 0f add r24, r24
+ 1478: e8 2e mov r14, r24
+ 147a: ee 0c add r14, r14
+ 147c: ee 0c add r14, r14
+ 147e: e8 0e add r14, r24
+ 1480: e3 0e add r14, r19
+ 1482: 15 c0 rjmp .+42 ; 0x14ae <vfprintf+0xfe>
+ 1484: 8f 2d mov r24, r15
+ 1486: 88 0f add r24, r24
+ 1488: f8 2e mov r15, r24
+ 148a: ff 0c add r15, r15
+ 148c: ff 0c add r15, r15
+ 148e: f8 0e add r15, r24
+ 1490: f3 0e add r15, r19
+ 1492: 20 62 ori r18, 0x20 ; 32
+ 1494: 0c c0 rjmp .+24 ; 0x14ae <vfprintf+0xfe>
+ 1496: 8e 32 cpi r24, 0x2E ; 46
+ 1498: 21 f4 brne .+8 ; 0x14a2 <vfprintf+0xf2>
+ 149a: 26 fd sbrc r18, 6
+ 149c: 6c c1 rjmp .+728 ; 0x1776 <vfprintf+0x3c6>
+ 149e: 20 64 ori r18, 0x40 ; 64
+ 14a0: 06 c0 rjmp .+12 ; 0x14ae <vfprintf+0xfe>
+ 14a2: 8c 36 cpi r24, 0x6C ; 108
+ 14a4: 11 f4 brne .+4 ; 0x14aa <vfprintf+0xfa>
+ 14a6: 20 68 ori r18, 0x80 ; 128
+ 14a8: 02 c0 rjmp .+4 ; 0x14ae <vfprintf+0xfe>
+ 14aa: 88 36 cpi r24, 0x68 ; 104
+ 14ac: 49 f4 brne .+18 ; 0x14c0 <vfprintf+0x110>
+ 14ae: f1 01 movw r30, r2
+ 14b0: 93 fd sbrc r25, 3
+ 14b2: 85 91 lpm r24, Z+
+ 14b4: 93 ff sbrs r25, 3
+ 14b6: 81 91 ld r24, Z+
+ 14b8: 1f 01 movw r2, r30
+ 14ba: 88 23 and r24, r24
+ 14bc: 09 f0 breq .+2 ; 0x14c0 <vfprintf+0x110>
+ 14be: ba cf rjmp .-140 ; 0x1434 <vfprintf+0x84>
+ 14c0: 98 2f mov r25, r24
+ 14c2: 95 54 subi r25, 0x45 ; 69
+ 14c4: 93 30 cpi r25, 0x03 ; 3
+ 14c6: 18 f0 brcs .+6 ; 0x14ce <vfprintf+0x11e>
+ 14c8: 90 52 subi r25, 0x20 ; 32
+ 14ca: 93 30 cpi r25, 0x03 ; 3
+ 14cc: 28 f4 brcc .+10 ; 0x14d8 <vfprintf+0x128>
+ 14ce: 0c 5f subi r16, 0xFC ; 252
+ 14d0: 1f 4f sbci r17, 0xFF ; 255
+ 14d2: ff e3 ldi r31, 0x3F ; 63
+ 14d4: f9 83 std Y+1, r31 ; 0x01
+ 14d6: 0d c0 rjmp .+26 ; 0x14f2 <vfprintf+0x142>
+ 14d8: 83 36 cpi r24, 0x63 ; 99
+ 14da: 31 f0 breq .+12 ; 0x14e8 <vfprintf+0x138>
+ 14dc: 83 37 cpi r24, 0x73 ; 115
+ 14de: 71 f0 breq .+28 ; 0x14fc <vfprintf+0x14c>
+ 14e0: 83 35 cpi r24, 0x53 ; 83
+ 14e2: 09 f0 breq .+2 ; 0x14e6 <vfprintf+0x136>
+ 14e4: 5c c0 rjmp .+184 ; 0x159e <vfprintf+0x1ee>
+ 14e6: 21 c0 rjmp .+66 ; 0x152a <vfprintf+0x17a>
+ 14e8: f8 01 movw r30, r16
+ 14ea: 80 81 ld r24, Z
+ 14ec: 89 83 std Y+1, r24 ; 0x01
+ 14ee: 0e 5f subi r16, 0xFE ; 254
+ 14f0: 1f 4f sbci r17, 0xFF ; 255
+ 14f2: 42 01 movw r8, r4
+ 14f4: 71 e0 ldi r23, 0x01 ; 1
+ 14f6: a7 2e mov r10, r23
+ 14f8: b1 2c mov r11, r1
+ 14fa: 15 c0 rjmp .+42 ; 0x1526 <vfprintf+0x176>
+ 14fc: 62 e0 ldi r22, 0x02 ; 2
+ 14fe: 66 2e mov r6, r22
+ 1500: 71 2c mov r7, r1
+ 1502: 60 0e add r6, r16
+ 1504: 71 1e adc r7, r17
+ 1506: f8 01 movw r30, r16
+ 1508: 80 80 ld r8, Z
+ 150a: 91 80 ldd r9, Z+1 ; 0x01
+ 150c: 26 ff sbrs r18, 6
+ 150e: 03 c0 rjmp .+6 ; 0x1516 <vfprintf+0x166>
+ 1510: 6e 2d mov r22, r14
+ 1512: 70 e0 ldi r23, 0x00 ; 0
+ 1514: 02 c0 rjmp .+4 ; 0x151a <vfprintf+0x16a>
+ 1516: 6f ef ldi r22, 0xFF ; 255
+ 1518: 7f ef ldi r23, 0xFF ; 255
+ 151a: c4 01 movw r24, r8
+ 151c: 2c 87 std Y+12, r18 ; 0x0c
+ 151e: 56 d1 rcall .+684 ; 0x17cc <strnlen>
+ 1520: 5c 01 movw r10, r24
+ 1522: 83 01 movw r16, r6
+ 1524: 2c 85 ldd r18, Y+12 ; 0x0c
+ 1526: 2f 77 andi r18, 0x7F ; 127
+ 1528: 16 c0 rjmp .+44 ; 0x1556 <vfprintf+0x1a6>
+ 152a: 52 e0 ldi r21, 0x02 ; 2
+ 152c: 65 2e mov r6, r21
+ 152e: 71 2c mov r7, r1
+ 1530: 60 0e add r6, r16
+ 1532: 71 1e adc r7, r17
+ 1534: f8 01 movw r30, r16
+ 1536: 80 80 ld r8, Z
+ 1538: 91 80 ldd r9, Z+1 ; 0x01
+ 153a: 26 ff sbrs r18, 6
+ 153c: 03 c0 rjmp .+6 ; 0x1544 <vfprintf+0x194>
+ 153e: 6e 2d mov r22, r14
+ 1540: 70 e0 ldi r23, 0x00 ; 0
+ 1542: 02 c0 rjmp .+4 ; 0x1548 <vfprintf+0x198>
+ 1544: 6f ef ldi r22, 0xFF ; 255
+ 1546: 7f ef ldi r23, 0xFF ; 255
+ 1548: c4 01 movw r24, r8
+ 154a: 2c 87 std Y+12, r18 ; 0x0c
+ 154c: 34 d1 rcall .+616 ; 0x17b6 <strnlen_P>
+ 154e: 5c 01 movw r10, r24
+ 1550: 2c 85 ldd r18, Y+12 ; 0x0c
+ 1552: 20 68 ori r18, 0x80 ; 128
+ 1554: 83 01 movw r16, r6
+ 1556: 23 fd sbrc r18, 3
+ 1558: 1e c0 rjmp .+60 ; 0x1596 <vfprintf+0x1e6>
+ 155a: 07 c0 rjmp .+14 ; 0x156a <vfprintf+0x1ba>
+ 155c: 80 e2 ldi r24, 0x20 ; 32
+ 155e: 90 e0 ldi r25, 0x00 ; 0
+ 1560: b6 01 movw r22, r12
+ 1562: 2c 87 std Y+12, r18 ; 0x0c
+ 1564: 3e d1 rcall .+636 ; 0x17e2 <fputc>
+ 1566: fa 94 dec r15
+ 1568: 2c 85 ldd r18, Y+12 ; 0x0c
+ 156a: 8f 2d mov r24, r15
+ 156c: 90 e0 ldi r25, 0x00 ; 0
+ 156e: a8 16 cp r10, r24
+ 1570: b9 06 cpc r11, r25
+ 1572: a0 f3 brcs .-24 ; 0x155c <vfprintf+0x1ac>
+ 1574: 10 c0 rjmp .+32 ; 0x1596 <vfprintf+0x1e6>
+ 1576: f4 01 movw r30, r8
+ 1578: 27 fd sbrc r18, 7
+ 157a: 85 91 lpm r24, Z+
+ 157c: 27 ff sbrs r18, 7
+ 157e: 81 91 ld r24, Z+
+ 1580: 4f 01 movw r8, r30
+ 1582: 90 e0 ldi r25, 0x00 ; 0
+ 1584: b6 01 movw r22, r12
+ 1586: 2c 87 std Y+12, r18 ; 0x0c
+ 1588: 2c d1 rcall .+600 ; 0x17e2 <fputc>
+ 158a: 2c 85 ldd r18, Y+12 ; 0x0c
+ 158c: f1 10 cpse r15, r1
+ 158e: fa 94 dec r15
+ 1590: 08 94 sec
+ 1592: a1 08 sbc r10, r1
+ 1594: b1 08 sbc r11, r1
+ 1596: a1 14 cp r10, r1
+ 1598: b1 04 cpc r11, r1
+ 159a: 69 f7 brne .-38 ; 0x1576 <vfprintf+0x1c6>
+ 159c: e9 c0 rjmp .+466 ; 0x1770 <vfprintf+0x3c0>
+ 159e: 84 36 cpi r24, 0x64 ; 100
+ 15a0: 11 f0 breq .+4 ; 0x15a6 <vfprintf+0x1f6>
+ 15a2: 89 36 cpi r24, 0x69 ; 105
+ 15a4: 41 f5 brne .+80 ; 0x15f6 <vfprintf+0x246>
+ 15a6: 27 ff sbrs r18, 7
+ 15a8: 08 c0 rjmp .+16 ; 0x15ba <vfprintf+0x20a>
+ 15aa: f8 01 movw r30, r16
+ 15ac: 60 81 ld r22, Z
+ 15ae: 71 81 ldd r23, Z+1 ; 0x01
+ 15b0: 82 81 ldd r24, Z+2 ; 0x02
+ 15b2: 93 81 ldd r25, Z+3 ; 0x03
+ 15b4: 0c 5f subi r16, 0xFC ; 252
+ 15b6: 1f 4f sbci r17, 0xFF ; 255
+ 15b8: 09 c0 rjmp .+18 ; 0x15cc <vfprintf+0x21c>
+ 15ba: f8 01 movw r30, r16
+ 15bc: 60 81 ld r22, Z
+ 15be: 71 81 ldd r23, Z+1 ; 0x01
+ 15c0: 88 27 eor r24, r24
+ 15c2: 77 fd sbrc r23, 7
+ 15c4: 80 95 com r24
+ 15c6: 98 2f mov r25, r24
+ 15c8: 0e 5f subi r16, 0xFE ; 254
+ 15ca: 1f 4f sbci r17, 0xFF ; 255
+ 15cc: 4f e6 ldi r20, 0x6F ; 111
+ 15ce: b4 2e mov r11, r20
+ 15d0: b2 22 and r11, r18
+ 15d2: 97 ff sbrs r25, 7
+ 15d4: 09 c0 rjmp .+18 ; 0x15e8 <vfprintf+0x238>
+ 15d6: 90 95 com r25
+ 15d8: 80 95 com r24
+ 15da: 70 95 com r23
+ 15dc: 61 95 neg r22
+ 15de: 7f 4f sbci r23, 0xFF ; 255
+ 15e0: 8f 4f sbci r24, 0xFF ; 255
+ 15e2: 9f 4f sbci r25, 0xFF ; 255
+ 15e4: f0 e8 ldi r31, 0x80 ; 128
+ 15e6: bf 2a or r11, r31
+ 15e8: a2 01 movw r20, r4
+ 15ea: 2a e0 ldi r18, 0x0A ; 10
+ 15ec: 30 e0 ldi r19, 0x00 ; 0
+ 15ee: 25 d1 rcall .+586 ; 0x183a <__ultoa_invert>
+ 15f0: 78 2e mov r7, r24
+ 15f2: 74 18 sub r7, r4
+ 15f4: 44 c0 rjmp .+136 ; 0x167e <vfprintf+0x2ce>
+ 15f6: 85 37 cpi r24, 0x75 ; 117
+ 15f8: 31 f4 brne .+12 ; 0x1606 <vfprintf+0x256>
+ 15fa: 3f ee ldi r19, 0xEF ; 239
+ 15fc: b3 2e mov r11, r19
+ 15fe: b2 22 and r11, r18
+ 1600: 2a e0 ldi r18, 0x0A ; 10
+ 1602: 30 e0 ldi r19, 0x00 ; 0
+ 1604: 25 c0 rjmp .+74 ; 0x1650 <vfprintf+0x2a0>
+ 1606: 99 ef ldi r25, 0xF9 ; 249
+ 1608: b9 2e mov r11, r25
+ 160a: b2 22 and r11, r18
+ 160c: 8f 36 cpi r24, 0x6F ; 111
+ 160e: c1 f0 breq .+48 ; 0x1640 <vfprintf+0x290>
+ 1610: 80 37 cpi r24, 0x70 ; 112
+ 1612: 20 f4 brcc .+8 ; 0x161c <vfprintf+0x26c>
+ 1614: 88 35 cpi r24, 0x58 ; 88
+ 1616: 09 f0 breq .+2 ; 0x161a <vfprintf+0x26a>
+ 1618: ae c0 rjmp .+348 ; 0x1776 <vfprintf+0x3c6>
+ 161a: 0d c0 rjmp .+26 ; 0x1636 <vfprintf+0x286>
+ 161c: 80 37 cpi r24, 0x70 ; 112
+ 161e: 21 f0 breq .+8 ; 0x1628 <vfprintf+0x278>
+ 1620: 88 37 cpi r24, 0x78 ; 120
+ 1622: 09 f0 breq .+2 ; 0x1626 <vfprintf+0x276>
+ 1624: a8 c0 rjmp .+336 ; 0x1776 <vfprintf+0x3c6>
+ 1626: 02 c0 rjmp .+4 ; 0x162c <vfprintf+0x27c>
+ 1628: 20 e1 ldi r18, 0x10 ; 16
+ 162a: b2 2a or r11, r18
+ 162c: b4 fe sbrs r11, 4
+ 162e: 0b c0 rjmp .+22 ; 0x1646 <vfprintf+0x296>
+ 1630: 84 e0 ldi r24, 0x04 ; 4
+ 1632: b8 2a or r11, r24
+ 1634: 08 c0 rjmp .+16 ; 0x1646 <vfprintf+0x296>
+ 1636: b4 fe sbrs r11, 4
+ 1638: 09 c0 rjmp .+18 ; 0x164c <vfprintf+0x29c>
+ 163a: e6 e0 ldi r30, 0x06 ; 6
+ 163c: be 2a or r11, r30
+ 163e: 06 c0 rjmp .+12 ; 0x164c <vfprintf+0x29c>
+ 1640: 28 e0 ldi r18, 0x08 ; 8
+ 1642: 30 e0 ldi r19, 0x00 ; 0
+ 1644: 05 c0 rjmp .+10 ; 0x1650 <vfprintf+0x2a0>
+ 1646: 20 e1 ldi r18, 0x10 ; 16
+ 1648: 30 e0 ldi r19, 0x00 ; 0
+ 164a: 02 c0 rjmp .+4 ; 0x1650 <vfprintf+0x2a0>
+ 164c: 20 e1 ldi r18, 0x10 ; 16
+ 164e: 32 e0 ldi r19, 0x02 ; 2
+ 1650: b7 fe sbrs r11, 7
+ 1652: 08 c0 rjmp .+16 ; 0x1664 <vfprintf+0x2b4>
+ 1654: f8 01 movw r30, r16
+ 1656: 60 81 ld r22, Z
+ 1658: 71 81 ldd r23, Z+1 ; 0x01
+ 165a: 82 81 ldd r24, Z+2 ; 0x02
+ 165c: 93 81 ldd r25, Z+3 ; 0x03
+ 165e: 0c 5f subi r16, 0xFC ; 252
+ 1660: 1f 4f sbci r17, 0xFF ; 255
+ 1662: 07 c0 rjmp .+14 ; 0x1672 <vfprintf+0x2c2>
+ 1664: f8 01 movw r30, r16
+ 1666: 60 81 ld r22, Z
+ 1668: 71 81 ldd r23, Z+1 ; 0x01
+ 166a: 80 e0 ldi r24, 0x00 ; 0
+ 166c: 90 e0 ldi r25, 0x00 ; 0
+ 166e: 0e 5f subi r16, 0xFE ; 254
+ 1670: 1f 4f sbci r17, 0xFF ; 255
+ 1672: a2 01 movw r20, r4
+ 1674: e2 d0 rcall .+452 ; 0x183a <__ultoa_invert>
+ 1676: 78 2e mov r7, r24
+ 1678: 74 18 sub r7, r4
+ 167a: ff e7 ldi r31, 0x7F ; 127
+ 167c: bf 22 and r11, r31
+ 167e: b6 fe sbrs r11, 6
+ 1680: 0b c0 rjmp .+22 ; 0x1698 <vfprintf+0x2e8>
+ 1682: 2e ef ldi r18, 0xFE ; 254
+ 1684: b2 22 and r11, r18
+ 1686: 7e 14 cp r7, r14
+ 1688: 38 f4 brcc .+14 ; 0x1698 <vfprintf+0x2e8>
+ 168a: b4 fe sbrs r11, 4
+ 168c: 07 c0 rjmp .+14 ; 0x169c <vfprintf+0x2ec>
+ 168e: b2 fc sbrc r11, 2
+ 1690: 05 c0 rjmp .+10 ; 0x169c <vfprintf+0x2ec>
+ 1692: 8f ee ldi r24, 0xEF ; 239
+ 1694: b8 22 and r11, r24
+ 1696: 02 c0 rjmp .+4 ; 0x169c <vfprintf+0x2ec>
+ 1698: a7 2c mov r10, r7
+ 169a: 01 c0 rjmp .+2 ; 0x169e <vfprintf+0x2ee>
+ 169c: ae 2c mov r10, r14
+ 169e: 8b 2d mov r24, r11
+ 16a0: 90 e0 ldi r25, 0x00 ; 0
+ 16a2: b4 fe sbrs r11, 4
+ 16a4: 0d c0 rjmp .+26 ; 0x16c0 <vfprintf+0x310>
+ 16a6: fe 01 movw r30, r28
+ 16a8: e7 0d add r30, r7
+ 16aa: f1 1d adc r31, r1
+ 16ac: 20 81 ld r18, Z
+ 16ae: 20 33 cpi r18, 0x30 ; 48
+ 16b0: 19 f4 brne .+6 ; 0x16b8 <vfprintf+0x308>
+ 16b2: e9 ee ldi r30, 0xE9 ; 233
+ 16b4: be 22 and r11, r30
+ 16b6: 09 c0 rjmp .+18 ; 0x16ca <vfprintf+0x31a>
+ 16b8: a3 94 inc r10
+ 16ba: b2 fe sbrs r11, 2
+ 16bc: 06 c0 rjmp .+12 ; 0x16ca <vfprintf+0x31a>
+ 16be: 04 c0 rjmp .+8 ; 0x16c8 <vfprintf+0x318>
+ 16c0: 86 78 andi r24, 0x86 ; 134
+ 16c2: 90 70 andi r25, 0x00 ; 0
+ 16c4: 00 97 sbiw r24, 0x00 ; 0
+ 16c6: 09 f0 breq .+2 ; 0x16ca <vfprintf+0x31a>
+ 16c8: a3 94 inc r10
+ 16ca: 8b 2c mov r8, r11
+ 16cc: 99 24 eor r9, r9
+ 16ce: b3 fc sbrc r11, 3
+ 16d0: 13 c0 rjmp .+38 ; 0x16f8 <vfprintf+0x348>
+ 16d2: b0 fe sbrs r11, 0
+ 16d4: 0e c0 rjmp .+28 ; 0x16f2 <vfprintf+0x342>
+ 16d6: af 14 cp r10, r15
+ 16d8: 28 f4 brcc .+10 ; 0x16e4 <vfprintf+0x334>
+ 16da: e7 2c mov r14, r7
+ 16dc: ef 0c add r14, r15
+ 16de: ea 18 sub r14, r10
+ 16e0: af 2c mov r10, r15
+ 16e2: 07 c0 rjmp .+14 ; 0x16f2 <vfprintf+0x342>
+ 16e4: e7 2c mov r14, r7
+ 16e6: 05 c0 rjmp .+10 ; 0x16f2 <vfprintf+0x342>
+ 16e8: 80 e2 ldi r24, 0x20 ; 32
+ 16ea: 90 e0 ldi r25, 0x00 ; 0
+ 16ec: b6 01 movw r22, r12
+ 16ee: 79 d0 rcall .+242 ; 0x17e2 <fputc>
+ 16f0: a3 94 inc r10
+ 16f2: af 14 cp r10, r15
+ 16f4: c8 f3 brcs .-14 ; 0x16e8 <vfprintf+0x338>
+ 16f6: 04 c0 rjmp .+8 ; 0x1700 <vfprintf+0x350>
+ 16f8: af 14 cp r10, r15
+ 16fa: 10 f4 brcc .+4 ; 0x1700 <vfprintf+0x350>
+ 16fc: fa 18 sub r15, r10
+ 16fe: 01 c0 rjmp .+2 ; 0x1702 <vfprintf+0x352>
+ 1700: ff 24 eor r15, r15
+ 1702: 84 fe sbrs r8, 4
+ 1704: 0e c0 rjmp .+28 ; 0x1722 <vfprintf+0x372>
+ 1706: 80 e3 ldi r24, 0x30 ; 48
+ 1708: 90 e0 ldi r25, 0x00 ; 0
+ 170a: b6 01 movw r22, r12
+ 170c: 6a d0 rcall .+212 ; 0x17e2 <fputc>
+ 170e: 82 fe sbrs r8, 2
+ 1710: 1d c0 rjmp .+58 ; 0x174c <vfprintf+0x39c>
+ 1712: 81 fe sbrs r8, 1
+ 1714: 03 c0 rjmp .+6 ; 0x171c <vfprintf+0x36c>
+ 1716: 88 e5 ldi r24, 0x58 ; 88
+ 1718: 90 e0 ldi r25, 0x00 ; 0
+ 171a: 10 c0 rjmp .+32 ; 0x173c <vfprintf+0x38c>
+ 171c: 88 e7 ldi r24, 0x78 ; 120
+ 171e: 90 e0 ldi r25, 0x00 ; 0
+ 1720: 0d c0 rjmp .+26 ; 0x173c <vfprintf+0x38c>
+ 1722: c4 01 movw r24, r8
+ 1724: 86 78 andi r24, 0x86 ; 134
+ 1726: 90 70 andi r25, 0x00 ; 0
+ 1728: 00 97 sbiw r24, 0x00 ; 0
+ 172a: 81 f0 breq .+32 ; 0x174c <vfprintf+0x39c>
+ 172c: 81 fc sbrc r8, 1
+ 172e: 02 c0 rjmp .+4 ; 0x1734 <vfprintf+0x384>
+ 1730: 80 e2 ldi r24, 0x20 ; 32
+ 1732: 01 c0 rjmp .+2 ; 0x1736 <vfprintf+0x386>
+ 1734: 8b e2 ldi r24, 0x2B ; 43
+ 1736: b7 fc sbrc r11, 7
+ 1738: 8d e2 ldi r24, 0x2D ; 45
+ 173a: 90 e0 ldi r25, 0x00 ; 0
+ 173c: b6 01 movw r22, r12
+ 173e: 51 d0 rcall .+162 ; 0x17e2 <fputc>
+ 1740: 05 c0 rjmp .+10 ; 0x174c <vfprintf+0x39c>
+ 1742: 80 e3 ldi r24, 0x30 ; 48
+ 1744: 90 e0 ldi r25, 0x00 ; 0
+ 1746: b6 01 movw r22, r12
+ 1748: 4c d0 rcall .+152 ; 0x17e2 <fputc>
+ 174a: ea 94 dec r14
+ 174c: 7e 14 cp r7, r14
+ 174e: c8 f3 brcs .-14 ; 0x1742 <vfprintf+0x392>
+ 1750: 7a 94 dec r7
+ 1752: f2 01 movw r30, r4
+ 1754: e7 0d add r30, r7
+ 1756: f1 1d adc r31, r1
+ 1758: 80 81 ld r24, Z
+ 175a: 90 e0 ldi r25, 0x00 ; 0
+ 175c: b6 01 movw r22, r12
+ 175e: 41 d0 rcall .+130 ; 0x17e2 <fputc>
+ 1760: 77 20 and r7, r7
+ 1762: b1 f7 brne .-20 ; 0x1750 <vfprintf+0x3a0>
+ 1764: 05 c0 rjmp .+10 ; 0x1770 <vfprintf+0x3c0>
+ 1766: 80 e2 ldi r24, 0x20 ; 32
+ 1768: 90 e0 ldi r25, 0x00 ; 0
+ 176a: b6 01 movw r22, r12
+ 176c: 3a d0 rcall .+116 ; 0x17e2 <fputc>
+ 176e: fa 94 dec r15
+ 1770: ff 20 and r15, r15
+ 1772: c9 f7 brne .-14 ; 0x1766 <vfprintf+0x3b6>
+ 1774: 44 ce rjmp .-888 ; 0x13fe <vfprintf+0x4e>
+ 1776: f6 01 movw r30, r12
+ 1778: 26 81 ldd r18, Z+6 ; 0x06
+ 177a: 37 81 ldd r19, Z+7 ; 0x07
+ 177c: 02 c0 rjmp .+4 ; 0x1782 <vfprintf+0x3d2>
+ 177e: 2f ef ldi r18, 0xFF ; 255
+ 1780: 3f ef ldi r19, 0xFF ; 255
+ 1782: c9 01 movw r24, r18
+ 1784: 2c 96 adiw r28, 0x0c ; 12
+ 1786: 0f b6 in r0, 0x3f ; 63
+ 1788: f8 94 cli
+ 178a: de bf out 0x3e, r29 ; 62
+ 178c: 0f be out 0x3f, r0 ; 63
+ 178e: cd bf out 0x3d, r28 ; 61
+ 1790: cf 91 pop r28
+ 1792: df 91 pop r29
+ 1794: 1f 91 pop r17
+ 1796: 0f 91 pop r16
+ 1798: ff 90 pop r15
+ 179a: ef 90 pop r14
+ 179c: df 90 pop r13
+ 179e: cf 90 pop r12
+ 17a0: bf 90 pop r11
+ 17a2: af 90 pop r10
+ 17a4: 9f 90 pop r9
+ 17a6: 8f 90 pop r8
+ 17a8: 7f 90 pop r7
+ 17aa: 6f 90 pop r6
+ 17ac: 5f 90 pop r5
+ 17ae: 4f 90 pop r4
+ 17b0: 3f 90 pop r3
+ 17b2: 2f 90 pop r2
+ 17b4: 08 95 ret
+
+000017b6 <strnlen_P>:
+ 17b6: fc 01 movw r30, r24
+ 17b8: 05 90 lpm r0, Z+
+ 17ba: 61 50 subi r22, 0x01 ; 1
+ 17bc: 70 40 sbci r23, 0x00 ; 0
+ 17be: 01 10 cpse r0, r1
+ 17c0: d8 f7 brcc .-10 ; 0x17b8 <strnlen_P+0x2>
+ 17c2: 80 95 com r24
+ 17c4: 90 95 com r25
+ 17c6: 8e 0f add r24, r30
+ 17c8: 9f 1f adc r25, r31
+ 17ca: 08 95 ret
+
+000017cc <strnlen>:
+ 17cc: fc 01 movw r30, r24
+ 17ce: 61 50 subi r22, 0x01 ; 1
+ 17d0: 70 40 sbci r23, 0x00 ; 0
+ 17d2: 01 90 ld r0, Z+
+ 17d4: 01 10 cpse r0, r1
+ 17d6: d8 f7 brcc .-10 ; 0x17ce <strnlen+0x2>
+ 17d8: 80 95 com r24
+ 17da: 90 95 com r25
+ 17dc: 8e 0f add r24, r30
+ 17de: 9f 1f adc r25, r31
+ 17e0: 08 95 ret
+
+000017e2 <fputc>:
+ 17e2: 0f 93 push r16
+ 17e4: 1f 93 push r17
+ 17e6: cf 93 push r28
+ 17e8: df 93 push r29
+ 17ea: 8c 01 movw r16, r24
+ 17ec: eb 01 movw r28, r22
+ 17ee: 8b 81 ldd r24, Y+3 ; 0x03
+ 17f0: 81 ff sbrs r24, 1
+ 17f2: 1b c0 rjmp .+54 ; 0x182a <fputc+0x48>
+ 17f4: 82 ff sbrs r24, 2
+ 17f6: 0d c0 rjmp .+26 ; 0x1812 <fputc+0x30>
+ 17f8: 2e 81 ldd r18, Y+6 ; 0x06
+ 17fa: 3f 81 ldd r19, Y+7 ; 0x07
+ 17fc: 8c 81 ldd r24, Y+4 ; 0x04
+ 17fe: 9d 81 ldd r25, Y+5 ; 0x05
+ 1800: 28 17 cp r18, r24
+ 1802: 39 07 cpc r19, r25
+ 1804: 64 f4 brge .+24 ; 0x181e <fputc+0x3c>
+ 1806: e8 81 ld r30, Y
+ 1808: f9 81 ldd r31, Y+1 ; 0x01
+ 180a: 01 93 st Z+, r16
+ 180c: f9 83 std Y+1, r31 ; 0x01
+ 180e: e8 83 st Y, r30
+ 1810: 06 c0 rjmp .+12 ; 0x181e <fputc+0x3c>
+ 1812: e8 85 ldd r30, Y+8 ; 0x08
+ 1814: f9 85 ldd r31, Y+9 ; 0x09
+ 1816: 80 2f mov r24, r16
+ 1818: 09 95 icall
+ 181a: 00 97 sbiw r24, 0x00 ; 0
+ 181c: 31 f4 brne .+12 ; 0x182a <fputc+0x48>
+ 181e: 8e 81 ldd r24, Y+6 ; 0x06
+ 1820: 9f 81 ldd r25, Y+7 ; 0x07
+ 1822: 01 96 adiw r24, 0x01 ; 1
+ 1824: 9f 83 std Y+7, r25 ; 0x07
+ 1826: 8e 83 std Y+6, r24 ; 0x06
+ 1828: 02 c0 rjmp .+4 ; 0x182e <fputc+0x4c>
+ 182a: 0f ef ldi r16, 0xFF ; 255
+ 182c: 1f ef ldi r17, 0xFF ; 255
+ 182e: c8 01 movw r24, r16
+ 1830: df 91 pop r29
+ 1832: cf 91 pop r28
+ 1834: 1f 91 pop r17
+ 1836: 0f 91 pop r16
+ 1838: 08 95 ret
+
+0000183a <__ultoa_invert>:
+ 183a: fa 01 movw r30, r20
+ 183c: aa 27 eor r26, r26
+ 183e: 28 30 cpi r18, 0x08 ; 8
+ 1840: 51 f1 breq .+84 ; 0x1896 <__ultoa_invert+0x5c>
+ 1842: 20 31 cpi r18, 0x10 ; 16
+ 1844: 81 f1 breq .+96 ; 0x18a6 <__ultoa_invert+0x6c>
+ 1846: e8 94 clt
+ 1848: 6f 93 push r22
+ 184a: 6e 7f andi r22, 0xFE ; 254
+ 184c: 6e 5f subi r22, 0xFE ; 254
+ 184e: 7f 4f sbci r23, 0xFF ; 255
+ 1850: 8f 4f sbci r24, 0xFF ; 255
+ 1852: 9f 4f sbci r25, 0xFF ; 255
+ 1854: af 4f sbci r26, 0xFF ; 255
+ 1856: b1 e0 ldi r27, 0x01 ; 1
+ 1858: 3e d0 rcall .+124 ; 0x18d6 <__ultoa_invert+0x9c>
+ 185a: b4 e0 ldi r27, 0x04 ; 4
+ 185c: 3c d0 rcall .+120 ; 0x18d6 <__ultoa_invert+0x9c>
+ 185e: 67 0f add r22, r23
+ 1860: 78 1f adc r23, r24
+ 1862: 89 1f adc r24, r25
+ 1864: 9a 1f adc r25, r26
+ 1866: a1 1d adc r26, r1
+ 1868: 68 0f add r22, r24
+ 186a: 79 1f adc r23, r25
+ 186c: 8a 1f adc r24, r26
+ 186e: 91 1d adc r25, r1
+ 1870: a1 1d adc r26, r1
+ 1872: 6a 0f add r22, r26
+ 1874: 71 1d adc r23, r1
+ 1876: 81 1d adc r24, r1
+ 1878: 91 1d adc r25, r1
+ 187a: a1 1d adc r26, r1
+ 187c: 20 d0 rcall .+64 ; 0x18be <__ultoa_invert+0x84>
+ 187e: 09 f4 brne .+2 ; 0x1882 <__ultoa_invert+0x48>
+ 1880: 68 94 set
+ 1882: 3f 91 pop r19
+ 1884: 2a e0 ldi r18, 0x0A ; 10
+ 1886: 26 9f mul r18, r22
+ 1888: 11 24 eor r1, r1
+ 188a: 30 19 sub r19, r0
+ 188c: 30 5d subi r19, 0xD0 ; 208
+ 188e: 31 93 st Z+, r19
+ 1890: de f6 brtc .-74 ; 0x1848 <__ultoa_invert+0xe>
+ 1892: cf 01 movw r24, r30
+ 1894: 08 95 ret
+ 1896: 46 2f mov r20, r22
+ 1898: 47 70 andi r20, 0x07 ; 7
+ 189a: 40 5d subi r20, 0xD0 ; 208
+ 189c: 41 93 st Z+, r20
+ 189e: b3 e0 ldi r27, 0x03 ; 3
+ 18a0: 0f d0 rcall .+30 ; 0x18c0 <__ultoa_invert+0x86>
+ 18a2: c9 f7 brne .-14 ; 0x1896 <__ultoa_invert+0x5c>
+ 18a4: f6 cf rjmp .-20 ; 0x1892 <__ultoa_invert+0x58>
+ 18a6: 46 2f mov r20, r22
+ 18a8: 4f 70 andi r20, 0x0F ; 15
+ 18aa: 40 5d subi r20, 0xD0 ; 208
+ 18ac: 4a 33 cpi r20, 0x3A ; 58
+ 18ae: 18 f0 brcs .+6 ; 0x18b6 <__ultoa_invert+0x7c>
+ 18b0: 49 5d subi r20, 0xD9 ; 217
+ 18b2: 31 fd sbrc r19, 1
+ 18b4: 40 52 subi r20, 0x20 ; 32
+ 18b6: 41 93 st Z+, r20
+ 18b8: 02 d0 rcall .+4 ; 0x18be <__ultoa_invert+0x84>
+ 18ba: a9 f7 brne .-22 ; 0x18a6 <__ultoa_invert+0x6c>
+ 18bc: ea cf rjmp .-44 ; 0x1892 <__ultoa_invert+0x58>
+ 18be: b4 e0 ldi r27, 0x04 ; 4
+ 18c0: a6 95 lsr r26
+ 18c2: 97 95 ror r25
+ 18c4: 87 95 ror r24
+ 18c6: 77 95 ror r23
+ 18c8: 67 95 ror r22
+ 18ca: ba 95 dec r27
+ 18cc: c9 f7 brne .-14 ; 0x18c0 <__ultoa_invert+0x86>
+ 18ce: 00 97 sbiw r24, 0x00 ; 0
+ 18d0: 61 05 cpc r22, r1
+ 18d2: 71 05 cpc r23, r1
+ 18d4: 08 95 ret
+ 18d6: 9b 01 movw r18, r22
+ 18d8: ac 01 movw r20, r24
+ 18da: 0a 2e mov r0, r26
+ 18dc: 06 94 lsr r0
+ 18de: 57 95 ror r21
+ 18e0: 47 95 ror r20
+ 18e2: 37 95 ror r19
+ 18e4: 27 95 ror r18
+ 18e6: ba 95 dec r27
+ 18e8: c9 f7 brne .-14 ; 0x18dc <__ultoa_invert+0xa2>
+ 18ea: 62 0f add r22, r18
+ 18ec: 73 1f adc r23, r19
+ 18ee: 84 1f adc r24, r20
+ 18f0: 95 1f adc r25, r21
+ 18f2: a0 1d adc r26, r0
+ 18f4: 08 95 ret
+
+000018f6 <_exit>:
+ 18f6: f8 94 cli
+
+000018f8 <__stop_program>:
+ 18f8: ff cf rjmp .-2 ; 0x18f8 <__stop_program>
diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.lst b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.lst new file mode 100644 index 000000000..c99fb0e1d --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.lst @@ -0,0 +1,853 @@ + 1 .file "AudioInputHost.c"
+ 2 __SREG__ = 0x3f
+ 3 __SP_H__ = 0x3e
+ 4 __SP_L__ = 0x3d
+ 5 __CCP__ = 0x34
+ 6 __tmp_reg__ = 0
+ 7 __zero_reg__ = 1
+ 15 .Ltext0:
+ 16 .section .text.LEDs_SetAllLEDs,"ax",@progbits
+ 18 LEDs_SetAllLEDs:
+ 19 .LFB127:
+ 20 .LSM0:
+ 21 .LVL0:
+ 22 /* prologue: function */
+ 23 /* frame size = 0 */
+ 24 /* stack size = 0 */
+ 25 .L__stack_usage = 0
+ 26 .LSM1:
+ 27 0000 9BB1 in r25,43-32
+ 28 0002 9F70 andi r25,lo8(15)
+ 29 0004 982B or r25,r24
+ 30 0006 9BB9 out 43-32,r25
+ 31 /* epilogue start */
+ 32 .LSM2:
+ 33 0008 0895 ret
+ 34 .LFE127:
+ 36 .section .text.SetupHardware,"ax",@progbits
+ 37 .global SetupHardware
+ 39 SetupHardware:
+ 40 .LFB132:
+ 41 .LSM3:
+ 42 /* prologue: function */
+ 43 /* frame size = 0 */
+ 44 /* stack size = 0 */
+ 45 .L__stack_usage = 0
+ 46 .LSM4:
+ 47 0000 84B7 in r24,84-32
+ 48 0002 877F andi r24,lo8(-9)
+ 49 0004 84BF out 84-32,r24
+ 50 .LSM5:
+ 51 0006 28E1 ldi r18,lo8(24)
+ 52 /* #APP */
+ 53 ; 63 "AudioInputHost.c" 1
+ 54 0008 0FB6 in __tmp_reg__, __SREG__
+ 55 000a F894 cli
+ 56 000c 2093 6000 sts 96, r18
+ 57 0010 1092 6000 sts 96, __zero_reg__
+ 58 0014 0FBE out __SREG__,__tmp_reg__
+ 59
+ 60 ; 0 "" 2
+ 61 .LVL1:
+ 62 /* #NOAPP */
+ 63 .LBB39:
+ 64 .LBB40:
+ 65 .LSM6:
+ 66 0016 90E0 ldi r25,lo8(0)
+ 67 0018 80E8 ldi r24,lo8(-128)
+ 68 /* #APP */
+ 69 ; 1614 "c:\program files (x86)\atmel\avr studio 5.0\extensions\application\avr toolchain\bin\../l
+ 70 001a 0FB6 in __tmp_reg__,__SREG__
+ 71 001c F894 cli
+ 72 001e 8093 6100 sts 97, r24
+ 73 0022 9093 6100 sts 97, r25
+ 74 0026 0FBE out __SREG__, __tmp_reg__
+ 75 ; 0 "" 2
+ 76 .LVL2:
+ 77 /* #NOAPP */
+ 78 .LBE40:
+ 79 .LBE39:
+ 80 .LBB41:
+ 81 .LBB42:
+ 82 .LSM7:
+ 83 0028 83E3 ldi r24,lo8(51)
+ 84 002a 90E0 ldi r25,hi8(51)
+ 85 002c 9093 CD00 sts 204+1,r25
+ 86 0030 8093 CC00 sts 204,r24
+ 87 .LSM8:
+ 88 0034 86E0 ldi r24,lo8(6)
+ 89 0036 8093 CA00 sts 202,r24
+ 90 .LSM9:
+ 91 003a 1092 C800 sts 200,__zero_reg__
+ 92 .LSM10:
+ 93 003e 2093 C900 sts 201,r18
+ 94 .LSM11:
+ 95 0042 539A sbi 42-32,3
+ 96 .LSM12:
+ 97 0044 5A9A sbi 43-32,2
+ 98 .LBE42:
+ 99 .LBE41:
+ 100 .LBB43:
+ 101 .LBB44:
+ 102 .LSM13:
+ 103 0046 8AB1 in r24,42-32
+ 104 0048 806F ori r24,lo8(-16)
+ 105 004a 8AB9 out 42-32,r24
+ 106 .LSM14:
+ 107 004c 8BB1 in r24,43-32
+ 108 004e 8F70 andi r24,lo8(15)
+ 109 0050 8BB9 out 43-32,r24
+ 110 .LBE44:
+ 111 .LBE43:
+ 112 .LSM15:
+ 113 0052 0E94 0000 call USB_Init
+ 114 .LVL3:
+ 115 .LBB45:
+ 116 .LBB46:
+ 117 .LSM16:
+ 118 0056 E0E0 ldi r30,lo8(USARTSerialStream)
+ 119 0058 F0E0 ldi r31,hi8(USARTSerialStream)
+ 120 005a F093 0000 sts __iob+1,r31
+ 121 005e E093 0000 sts __iob,r30
+ 122 .LSM17:
+ 123 0062 F093 0000 sts __iob+2+1,r31
+ 124 0066 E093 0000 sts __iob+2,r30
+ 125 .LSM18:
+ 126 006a 8EE0 ldi r24,lo8(14)
+ 127 006c DF01 movw r26,r30
+ 128 006e 1D92 st X+,__zero_reg__
+ 129 0070 8A95 dec r24
+ 130 0072 01F4 brne .-6
+ 131 0074 83E0 ldi r24,lo8(3)
+ 132 0076 8093 0000 sts USARTSerialStream+3,r24
+ 133 007a 80E0 ldi r24,lo8(gs(Serial_putchar))
+ 134 007c 90E0 ldi r25,hi8(gs(Serial_putchar))
+ 135 007e 9093 0000 sts USARTSerialStream+8+1,r25
+ 136 0082 8093 0000 sts USARTSerialStream+8,r24
+ 137 0086 80E0 ldi r24,lo8(gs(Serial_getchar))
+ 138 0088 90E0 ldi r25,hi8(gs(Serial_getchar))
+ 139 008a 9093 0000 sts USARTSerialStream+10+1,r25
+ 140 008e 8093 0000 sts USARTSerialStream+10,r24
+ 141 /* epilogue start */
+ 142 .LBE46:
+ 143 .LBE45:
+ 144 .LSM19:
+ 145 0092 0895 ret
+ 146 .LFE132:
+ 148 .section .text.EVENT_USB_Host_DeviceAttached,"ax",@progbits
+ 149 .global EVENT_USB_Host_DeviceAttached
+ 151 EVENT_USB_Host_DeviceAttached:
+ 152 .LFB133:
+ 153 .LSM20:
+ 154 /* prologue: function */
+ 155 /* frame size = 0 */
+ 156 /* stack size = 0 */
+ 157 .L__stack_usage = 0
+ 158 .LSM21:
+ 159 0000 80E0 ldi r24,lo8(__c.3897)
+ 160 0002 90E0 ldi r25,hi8(__c.3897)
+ 161 0004 0E94 0000 call puts_P
+ 162 .LSM22:
+ 163 0008 80EA ldi r24,lo8(-96)
+ 164 000a 0E94 0000 call LEDs_SetAllLEDs
+ 165 /* epilogue start */
+ 166 .LSM23:
+ 167 000e 0895 ret
+ 168 .LFE133:
+ 170 .section .text.EVENT_USB_Host_DeviceUnattached,"ax",@progbits
+ 171 .global EVENT_USB_Host_DeviceUnattached
+ 173 EVENT_USB_Host_DeviceUnattached:
+ 174 .LFB134:
+ 175 .LSM24:
+ 176 /* prologue: function */
+ 177 /* frame size = 0 */
+ 178 /* stack size = 0 */
+ 179 .L__stack_usage = 0
+ 180 .LSM25:
+ 181 0000 80E0 ldi r24,lo8(__c.3902)
+ 182 0002 90E0 ldi r25,hi8(__c.3902)
+ 183 0004 0E94 0000 call puts_P
+ 184 .LSM26:
+ 185 0008 80E1 ldi r24,lo8(16)
+ 186 000a 0E94 0000 call LEDs_SetAllLEDs
+ 187 /* epilogue start */
+ 188 .LSM27:
+ 189 000e 0895 ret
+ 190 .LFE134:
+ 192 .section .text.EVENT_USB_Host_DeviceEnumerationComplete,"ax",@progbits
+ 193 .global EVENT_USB_Host_DeviceEnumerationComplete
+ 195 EVENT_USB_Host_DeviceEnumerationComplete:
+ 196 .LFB135:
+ 197 .LSM28:
+ 198 /* prologue: function */
+ 199 /* frame size = 0 */
+ 200 /* stack size = 0 */
+ 201 .L__stack_usage = 0
+ 202 .LSM29:
+ 203 0000 80E6 ldi r24,lo8(96)
+ 204 0002 0E94 0000 call LEDs_SetAllLEDs
+ 205 /* epilogue start */
+ 206 .LSM30:
+ 207 0006 0895 ret
+ 208 .LFE135:
+ 210 .section .text.EVENT_USB_Host_HostError,"ax",@progbits
+ 211 .global EVENT_USB_Host_HostError
+ 213 EVENT_USB_Host_HostError:
+ 214 .LFB136:
+ 215 .LSM31:
+ 216 .LVL4:
+ 217 0000 DF93 push r29
+ 218 0002 CF93 push r28
+ 219 0004 0F92 push __tmp_reg__
+ 220 0006 CDB7 in r28,__SP_L__
+ 221 0008 DEB7 in r29,__SP_H__
+ 222 /* prologue: function */
+ 223 /* frame size = 1 */
+ 224 /* stack size = 3 */
+ 225 .L__stack_usage = 3
+ 226 .LSM32:
+ 227 000a 8983 std Y+1,r24
+ 228 000c 0E94 0000 call USB_Disable
+ 229 .LVL5:
+ 230 .LSM33:
+ 231 0010 00D0 rcall .
+ 232 0012 00D0 rcall .
+ 233 0014 EDB7 in r30,__SP_L__
+ 234 0016 FEB7 in r31,__SP_H__
+ 235 0018 3196 adiw r30,1
+ 236 001a 20E0 ldi r18,lo8(__c.3910)
+ 237 001c 30E0 ldi r19,hi8(__c.3910)
+ 238 001e ADB7 in r26,__SP_L__
+ 239 0020 BEB7 in r27,__SP_H__
+ 240 0022 1296 adiw r26,1+1
+ 241 0024 3C93 st X,r19
+ 242 0026 2E93 st -X,r18
+ 243 0028 1197 sbiw r26,1
+ 244 002a 8981 ldd r24,Y+1
+ 245 002c 8283 std Z+2,r24
+ 246 002e 1382 std Z+3,__zero_reg__
+ 247 0030 0E94 0000 call printf_P
+ 248 .LSM34:
+ 249 0034 0F90 pop __tmp_reg__
+ 250 0036 0F90 pop __tmp_reg__
+ 251 0038 0F90 pop __tmp_reg__
+ 252 003a 0F90 pop __tmp_reg__
+ 253 003c 80E9 ldi r24,lo8(-112)
+ 254 003e 0E94 0000 call LEDs_SetAllLEDs
+ 255 .L7:
+ 256 0042 00C0 rjmp .L7
+ 257 .LFE136:
+ 259 .section .text.EVENT_USB_Host_DeviceEnumerationFailed,"ax",@progbits
+ 260 .global EVENT_USB_Host_DeviceEnumerationFailed
+ 262 EVENT_USB_Host_DeviceEnumerationFailed:
+ 263 .LFB137:
+ 264 .LSM35:
+ 265 .LVL6:
+ 266 /* prologue: function */
+ 267 /* frame size = 0 */
+ 268 /* stack size = 0 */
+ 269 .L__stack_usage = 0
+ 270 .LSM36:
+ 271 0000 9091 0000 lds r25,USB_HostState
+ 272 0004 2DB7 in r18,__SP_L__
+ 273 0006 3EB7 in r19,__SP_H__
+ 274 0008 2850 subi r18,lo8(-(-8))
+ 275 000a 3040 sbci r19,hi8(-(-8))
+ 276 000c 0FB6 in __tmp_reg__,__SREG__
+ 277 000e F894 cli
+ 278 0010 3EBF out __SP_H__,r19
+ 279 0012 0FBE out __SREG__,__tmp_reg__
+ 280 0014 2DBF out __SP_L__,r18
+ 281 0016 EDB7 in r30,__SP_L__
+ 282 0018 FEB7 in r31,__SP_H__
+ 283 001a 3196 adiw r30,1
+ 284 001c 20E0 ldi r18,lo8(__c.3917)
+ 285 001e 30E0 ldi r19,hi8(__c.3917)
+ 286 0020 ADB7 in r26,__SP_L__
+ 287 0022 BEB7 in r27,__SP_H__
+ 288 0024 1296 adiw r26,1+1
+ 289 0026 3C93 st X,r19
+ 290 0028 2E93 st -X,r18
+ 291 002a 1197 sbiw r26,1
+ 292 002c 8283 std Z+2,r24
+ 293 002e 1382 std Z+3,__zero_reg__
+ 294 0030 6483 std Z+4,r22
+ 295 0032 1582 std Z+5,__zero_reg__
+ 296 0034 9683 std Z+6,r25
+ 297 0036 1782 std Z+7,__zero_reg__
+ 298 0038 0E94 0000 call printf_P
+ 299 .LVL7:
+ 300 .LSM37:
+ 301 003c 2DB7 in r18,__SP_L__
+ 302 003e 3EB7 in r19,__SP_H__
+ 303 0040 285F subi r18,lo8(-(8))
+ 304 0042 3F4F sbci r19,hi8(-(8))
+ 305 0044 0FB6 in __tmp_reg__,__SREG__
+ 306 0046 F894 cli
+ 307 0048 3EBF out __SP_H__,r19
+ 308 004a 0FBE out __SREG__,__tmp_reg__
+ 309 004c 2DBF out __SP_L__,r18
+ 310 004e 80E9 ldi r24,lo8(-112)
+ 311 0050 0E94 0000 call LEDs_SetAllLEDs
+ 312 /* epilogue start */
+ 313 .LSM38:
+ 314 0054 0895 ret
+ 315 .LFE137:
+ 317 .section .text.Audio_Task,"ax",@progbits
+ 318 .global Audio_Task
+ 320 Audio_Task:
+ 321 .LFB138:
+ 322 .LSM39:
+ 323 0000 1F93 push r17
+ 324 0002 DF93 push r29
+ 325 0004 CF93 push r28
+ 326 0006 00D0 rcall .
+ 327 0008 0F92 push __tmp_reg__
+ 328 000a CDB7 in r28,__SP_L__
+ 329 000c DEB7 in r29,__SP_H__
+ 330 /* prologue: function */
+ 331 /* frame size = 3 */
+ 332 /* stack size = 6 */
+ 333 .L__stack_usage = 6
+ 334 .LSM40:
+ 335 000e 8091 0000 lds r24,USB_HostState
+ 336 0012 8B30 cpi r24,lo8(11)
+ 337 0014 01F0 breq .+2
+ 338 0016 00C0 rjmp .L9
+ 339 .LBB47:
+ 340 .LSM41:
+ 341 0018 80E0 ldi r24,lo8(__c.3924)
+ 342 001a 90E0 ldi r25,hi8(__c.3924)
+ 343 001c 0E94 0000 call puts_P
+ 344 .LSM42:
+ 345 0020 0E94 0000 call ProcessConfigurationDescriptor
+ 346 0024 182F mov r17,r24
+ 347 .LVL8:
+ 348 0026 8823 tst r24
+ 349 0028 01F0 breq .L12
+ 350 .LSM43:
+ 351 002a 8130 cpi r24,lo8(1)
+ 352 002c 01F4 brne .L13
+ 353 .LSM44:
+ 354 002e 80E0 ldi r24,lo8(__c.3926)
+ 355 0030 90E0 ldi r25,hi8(__c.3926)
+ 356 .LVL9:
+ 357 0032 00C0 rjmp .L20
+ 358 .L13:
+ 359 .LSM45:
+ 360 0034 80E0 ldi r24,lo8(__c.3928)
+ 361 0036 90E0 ldi r25,hi8(__c.3928)
+ 362 .L20:
+ 363 0038 0E94 0000 call puts_P
+ 364 .LSM46:
+ 365 003c 00D0 rcall .
+ 366 003e 00D0 rcall .
+ 367 0040 EDB7 in r30,__SP_L__
+ 368 0042 FEB7 in r31,__SP_H__
+ 369 0044 3196 adiw r30,1
+ 370 0046 20E0 ldi r18,lo8(__c.3930)
+ 371 0048 30E0 ldi r19,hi8(__c.3930)
+ 372 004a ADB7 in r26,__SP_L__
+ 373 004c BEB7 in r27,__SP_H__
+ 374 004e 1296 adiw r26,1+1
+ 375 0050 3C93 st X,r19
+ 376 0052 2E93 st -X,r18
+ 377 0054 1197 sbiw r26,1
+ 378 0056 1283 std Z+2,r17
+ 379 .LVL10:
+ 380 .L22:
+ 381 0058 1382 std Z+3,__zero_reg__
+ 382 005a 0E94 0000 call printf_P
+ 383 .LSM47:
+ 384 005e 0F90 pop __tmp_reg__
+ 385 0060 0F90 pop __tmp_reg__
+ 386 0062 0F90 pop __tmp_reg__
+ 387 0064 0F90 pop __tmp_reg__
+ 388 0066 00C0 rjmp .L21
+ 389 .LVL11:
+ 390 .L12:
+ 391 .LSM48:
+ 392 0068 81E0 ldi r24,lo8(1)
+ 393 006a 0E94 0000 call USB_Host_SetDeviceConfiguration
+ 394 .LVL12:
+ 395 006e 8823 tst r24
+ 396 0070 01F0 breq .L15
+ 397 .LSM49:
+ 398 0072 00D0 rcall .
+ 399 0074 00D0 rcall .
+ 400 0076 EDB7 in r30,__SP_L__
+ 401 0078 FEB7 in r31,__SP_H__
+ 402 007a 3196 adiw r30,1
+ 403 007c 20E0 ldi r18,lo8(__c.3933)
+ 404 007e 30E0 ldi r19,hi8(__c.3933)
+ 405 0080 00C0 rjmp .L23
+ 406 .L15:
+ 407 .LSM50:
+ 408 0082 8091 0000 lds r24,StreamingInterfaceIndex
+ 409 .LVL13:
+ 410 0086 6091 0000 lds r22,StreamingInterfaceAltSetting
+ 411 008a 0E94 0000 call USB_Host_SetInterfaceAltSetting
+ 412 .LVL14:
+ 413 008e 8823 tst r24
+ 414 0090 01F0 breq .L16
+ 415 .LSM51:
+ 416 0092 00D0 rcall .
+ 417 0094 00D0 rcall .
+ 418 0096 EDB7 in r30,__SP_L__
+ 419 0098 FEB7 in r31,__SP_H__
+ 420 009a 3196 adiw r30,1
+ 421 009c 20E0 ldi r18,lo8(__c.3935)
+ 422 009e 30E0 ldi r19,hi8(__c.3935)
+ 423 .L23:
+ 424 00a0 ADB7 in r26,__SP_L__
+ 425 00a2 BEB7 in r27,__SP_H__
+ 426 00a4 1296 adiw r26,1+1
+ 427 00a6 3C93 st X,r19
+ 428 00a8 2E93 st -X,r18
+ 429 00aa 1197 sbiw r26,1
+ 430 00ac 8283 std Z+2,r24
+ 431 00ae 00C0 rjmp .L22
+ 432 .L16:
+ 433 .LSM52:
+ 434 00b0 2091 0000 lds r18,StreamingEndpointAddress
+ 435 00b4 82E2 ldi r24,lo8(34)
+ 436 .LVL15:
+ 437 00b6 8093 0000 sts USB_ControlRequest,r24
+ 438 00ba 81E0 ldi r24,lo8(1)
+ 439 00bc 8093 0000 sts USB_ControlRequest+1,r24
+ 440 00c0 80E0 ldi r24,lo8(256)
+ 441 00c2 91E0 ldi r25,hi8(256)
+ 442 00c4 9093 0000 sts USB_ControlRequest+2+1,r25
+ 443 00c8 8093 0000 sts USB_ControlRequest+2,r24
+ 444 00cc 2093 0000 sts USB_ControlRequest+4,r18
+ 445 00d0 1092 0000 sts USB_ControlRequest+5,__zero_reg__
+ 446 00d4 83E0 ldi r24,lo8(3)
+ 447 00d6 90E0 ldi r25,hi8(3)
+ 448 00d8 9093 0000 sts USB_ControlRequest+6+1,r25
+ 449 00dc 8093 0000 sts USB_ControlRequest+6,r24
+ 450 .LSM53:
+ 451 00e0 DE01 movw r26,r28
+ 452 00e2 1196 adiw r26,1
+ 453 00e4 E0E0 ldi r30,lo8(C.5.5024)
+ 454 00e6 F0E0 ldi r31,hi8(C.5.5024)
+ 455 00e8 83E0 ldi r24,lo8(3)
+ 456 .L17:
+ 457 00ea 0190 ld r0,Z+
+ 458 00ec 0D92 st X+,r0
+ 459 00ee 8150 subi r24,lo8(-(-1))
+ 460 00f0 01F4 brne .L17
+ 461 .LVL16:
+ 462 .LBB48:
+ 463 .LBB49:
+ 464 .LSM54:
+ 465 00f2 1092 A700 sts 167,__zero_reg__
+ 466 .LBE49:
+ 467 .LBE48:
+ 468 .LSM55:
+ 469 00f6 CE01 movw r24,r28
+ 470 00f8 0196 adiw r24,1
+ 471 00fa 0E94 0000 call USB_Host_SendControlRequest
+ 472 .LVL17:
+ 473 00fe 8823 tst r24
+ 474 0100 01F0 breq .L18
+ 475 .LVL18:
+ 476 .L21:
+ 477 .LSM56:
+ 478 0102 80E9 ldi r24,lo8(-112)
+ 479 0104 0E94 0000 call LEDs_SetAllLEDs
+ 480 .LSM57:
+ 481 0108 1092 0000 sts USB_HostState,__zero_reg__
+ 482 .LSM58:
+ 483 010c 00C0 rjmp .L9
+ 484 .LVL19:
+ 485 .L18:
+ 486 .LSM59:
+ 487 010e 82E0 ldi r24,lo8(2)
+ 488 .LVL20:
+ 489 0110 8093 6E00 sts 110,r24
+ 490 .LSM60:
+ 491 0114 9CE7 ldi r25,lo8(124)
+ 492 0116 97BD out 71-32,r25
+ 493 .LSM61:
+ 494 0118 84BD out 68-32,r24
+ 495 .LSM62:
+ 496 011a 85BD out 69-32,r24
+ 497 .LSM63:
+ 498 011c 3E9A sbi 39-32,6
+ 499 .LSM64:
+ 500 011e 81EF ldi r24,lo8(-15)
+ 501 0120 8093 9000 sts 144,r24
+ 502 .LSM65:
+ 503 0124 89E0 ldi r24,lo8(9)
+ 504 0126 8093 9100 sts 145,r24
+ 505 .LSM66:
+ 506 012a 80E0 ldi r24,lo8(__c.3939)
+ 507 012c 90E0 ldi r25,hi8(__c.3939)
+ 508 012e 0E94 0000 call puts_P
+ 509 .LSM67:
+ 510 0132 8CE0 ldi r24,lo8(12)
+ 511 0134 8093 0000 sts USB_HostState,r24
+ 512 .LVL21:
+ 513 .L9:
+ 514 /* epilogue start */
+ 515 .LBE47:
+ 516 .LSM68:
+ 517 0138 0F90 pop __tmp_reg__
+ 518 013a 0F90 pop __tmp_reg__
+ 519 013c 0F90 pop __tmp_reg__
+ 520 013e CF91 pop r28
+ 521 0140 DF91 pop r29
+ 522 0142 1F91 pop r17
+ 523 0144 0895 ret
+ 524 .LFE138:
+ 526 .section .text.main,"ax",@progbits
+ 527 .global main
+ 529 main:
+ 530 .LFB131:
+ 531 .LSM69:
+ 532 /* prologue: function */
+ 533 /* frame size = 0 */
+ 534 /* stack size = 0 */
+ 535 .L__stack_usage = 0
+ 536 .LSM70:
+ 537 0000 0E94 0000 call SetupHardware
+ 538 .LSM71:
+ 539 0004 80E0 ldi r24,lo8(__c.3888)
+ 540 0006 90E0 ldi r25,hi8(__c.3888)
+ 541 0008 0E94 0000 call puts_P
+ 542 .LSM72:
+ 543 000c 80E1 ldi r24,lo8(16)
+ 544 000e 0E94 0000 call LEDs_SetAllLEDs
+ 545 .LSM73:
+ 546 /* #APP */
+ 547 ; 49 "AudioInputHost.c" 1
+ 548 0012 7894 sei
+ 549 ; 0 "" 2
+ 550 /* #NOAPP */
+ 551 .L25:
+ 552 .LSM74:
+ 553 0014 0E94 0000 call Audio_Task
+ 554 .LSM75:
+ 555 0018 0E94 0000 call USB_USBTask
+ 556 001c 00C0 rjmp .L25
+ 557 .LFE131:
+ 559 .section .text.__vector_21,"ax",@progbits
+ 560 .global __vector_21
+ 562 __vector_21:
+ 563 .LFB139:
+ 564 .LSM76:
+ 565 0000 1F92 push __zero_reg__
+ 566 0002 0F92 push r0
+ 567 0004 0FB6 in r0,__SREG__
+ 568 0006 0F92 push r0
+ 569 0008 0BB6 in r0,91-32
+ 570 000a 0F92 push r0
+ 571 000c 1124 clr __zero_reg__
+ 572 000e 1F93 push r17
+ 573 0010 2F93 push r18
+ 574 0012 3F93 push r19
+ 575 0014 4F93 push r20
+ 576 0016 5F93 push r21
+ 577 0018 6F93 push r22
+ 578 001a 7F93 push r23
+ 579 001c 8F93 push r24
+ 580 001e 9F93 push r25
+ 581 0020 AF93 push r26
+ 582 0022 BF93 push r27
+ 583 0024 EF93 push r30
+ 584 0026 FF93 push r31
+ 585 /* prologue: Signal */
+ 586 /* frame size = 0 */
+ 587 /* stack size = 17 */
+ 588 .L__stack_usage = 17
+ 589 .LBB50:
+ 590 .LBB51:
+ 591 .LSM77:
+ 592 0028 1091 A700 lds r17,167
+ 593 002c 1770 andi r17,lo8(7)
+ 594 .LVL22:
+ 595 .LBE51:
+ 596 .LBE50:
+ 597 .LBB52:
+ 598 .LBB53:
+ 599 .LSM78:
+ 600 002e 81E0 ldi r24,lo8(1)
+ 601 0030 8093 A700 sts 167,r24
+ 602 .LBE53:
+ 603 .LBE52:
+ 604 .LBB54:
+ 605 .LBB55:
+ 606 .LSM79:
+ 607 0034 8091 A900 lds r24,169
+ 608 0038 8F7B andi r24,lo8(-65)
+ 609 003a 8093 A900 sts 169,r24
+ 610 .LBE55:
+ 611 .LBE54:
+ 612 .LBB56:
+ 613 .LBB57:
+ 614 .LSM80:
+ 615 003e 8091 A600 lds r24,166
+ 616 .LBE57:
+ 617 .LBE56:
+ 618 .LSM81:
+ 619 0042 80FF sbrs r24,0
+ 620 0044 00C0 rjmp .L27
+ 621 .LBB58:
+ 622 .LBB59:
+ 623 .LBB60:
+ 624 .LSM82:
+ 625 0046 8091 AF00 lds r24,175
+ 626 .LSM83:
+ 627 004a 4091 AF00 lds r20,175
+ 628 .LVL23:
+ 629 .LBE60:
+ 630 .LBE59:
+ 631 .LBB61:
+ 632 .LBB62:
+ 633 .LSM84:
+ 634 004e 8091 A600 lds r24,166
+ 635 .LBE62:
+ 636 .LBE61:
+ 637 .LSM85:
+ 638 0052 85FD sbrc r24,5
+ 639 0054 00C0 rjmp .L28
+ 640 .LBB63:
+ 641 .LBB64:
+ 642 .LSM86:
+ 643 0056 8091 A600 lds r24,166
+ 644 005a 8E77 andi r24,lo8(126)
+ 645 005c 8093 A600 sts 166,r24
+ 646 .L28:
+ 647 .LBE64:
+ 648 .LBE63:
+ 649 .LSM87:
+ 650 0060 842F mov r24,r20
+ 651 0062 9927 clr r25
+ 652 0064 87FD sbrc r24,7
+ 653 0066 9095 com r25
+ 654 0068 20E8 ldi r18,lo8(128)
+ 655 006a 30E0 ldi r19,hi8(128)
+ 656 006c 8227 eor r24,r18
+ 657 006e 9327 eor r25,r19
+ 658 0070 9093 9900 sts 152+1,r25
+ 659 0074 8093 9800 sts 152,r24
+ 660 .LVL24:
+ 661 .LSM88:
+ 662 0078 4131 cpi r20,lo8(17)
+ 663 007a 04F4 brge .L30
+ 664 .LSM89:
+ 665 007c 4930 cpi r20,lo8(9)
+ 666 007e 04F4 brge .L31
+ 667 .LSM90:
+ 668 0080 4530 cpi r20,lo8(5)
+ 669 0082 04F4 brge .L32
+ 670 .LSM91:
+ 671 0084 4330 cpi r20,lo8(3)
+ 672 0086 04F4 brge .L33
+ 673 .LSM92:
+ 674 0088 80E0 ldi r24,lo8(0)
+ 675 008a 00C0 rjmp .L29
+ 676 .L30:
+ 677 .LSM93:
+ 678 008c 80EF ldi r24,lo8(-16)
+ 679 008e 00C0 rjmp .L29
+ 680 .L31:
+ 681 .LSM94:
+ 682 0090 80EB ldi r24,lo8(-80)
+ 683 0092 00C0 rjmp .L29
+ 684 .L32:
+ 685 .LSM95:
+ 686 0094 80E3 ldi r24,lo8(48)
+ 687 0096 00C0 rjmp .L29
+ 688 .L33:
+ 689 .LSM96:
+ 690 0098 80E1 ldi r24,lo8(16)
+ 691 .L29:
+ 692 .LVL25:
+ 693 .LSM97:
+ 694 009a 0E94 0000 call LEDs_SetAllLEDs
+ 695 .LVL26:
+ 696 .L27:
+ 697 .LBE58:
+ 698 .LBB65:
+ 699 .LBB66:
+ 700 .LSM98:
+ 701 009e 8091 A900 lds r24,169
+ 702 00a2 8064 ori r24,lo8(64)
+ 703 00a4 8093 A900 sts 169,r24
+ 704 .LVL27:
+ 705 .LBE66:
+ 706 .LBE65:
+ 707 .LBB67:
+ 708 .LBB68:
+ 709 .LSM99:
+ 710 00a8 1093 A700 sts 167,r17
+ 711 /* epilogue start */
+ 712 .LBE68:
+ 713 .LBE67:
+ 714 .LSM100:
+ 715 00ac FF91 pop r31
+ 716 00ae EF91 pop r30
+ 717 00b0 BF91 pop r27
+ 718 00b2 AF91 pop r26
+ 719 00b4 9F91 pop r25
+ 720 00b6 8F91 pop r24
+ 721 00b8 7F91 pop r23
+ 722 00ba 6F91 pop r22
+ 723 00bc 5F91 pop r21
+ 724 00be 4F91 pop r20
+ 725 00c0 3F91 pop r19
+ 726 00c2 2F91 pop r18
+ 727 00c4 1F91 pop r17
+ 728 .LVL28:
+ 729 00c6 0F90 pop r0
+ 730 00c8 0BBE out 91-32,r0
+ 731 00ca 0F90 pop r0
+ 732 00cc 0FBE out __SREG__,r0
+ 733 00ce 0F90 pop r0
+ 734 00d0 1F90 pop __zero_reg__
+ 735 00d2 1895 reti
+ 736 .LFE139:
+ 738 .section .progmem.data,"a",@progbits
+ 741 __c.3939:
+ 742 0000 4D69 6372 .string "Microphone Enumerated.\r\n"
+ 742 6F70 686F
+ 742 6E65 2045
+ 742 6E75 6D65
+ 742 7261 7465
+ 745 __c.3935:
+ 746 0019 1B5B 3331 .ascii "\033[31mCould not set alt"
+ 746 6D43 6F75
+ 746 6C64 206E
+ 746 6F74 2073
+ 746 6574 2061
+ 747 002f 6572 6E61 .string "ernative streaming interface setting.\r\n -- Error Code: %d\r\n\033[37m"
+ 747 7469 7665
+ 747 2073 7472
+ 747 6561 6D69
+ 747 6E67 2069
+ 750 __c.3933:
+ 751 0070 1B5B .ascii "\033["
+ 752 0072 3331 6D43 .string "31mControl Error (Set Configuration).\r\n -- Error Code: %d\r\n\033[37m"
+ 752 6F6E 7472
+ 752 6F6C 2045
+ 752 7272 6F72
+ 752 2028 5365
+ 755 __c.3930:
+ 756 00b3 202D 2D20 .string " -- Error Code: %d\r\n\033[37m"
+ 756 4572 726F
+ 756 7220 436F
+ 756 6465 3A20
+ 756 2564 0D0A
+ 759 __c.3928:
+ 760 00cd 1B5B 3331 .string "\033[31mInvalid Device.\r\n"
+ 760 6D49 6E76
+ 760 616C 6964
+ 760 2044 6576
+ 760 6963 652E
+ 763 __c.3926:
+ 764 00e4 1B5B 3331 .string "\033[31mControl Error (Get Configuration).\r\n"
+ 764 6D43 6F6E
+ 764 7472 6F6C
+ 764 2045 7272
+ 764 6F72 2028
+ 767 __c.3924:
+ 768 010e 4765 7474 .string "Getting Config Data.\r\n"
+ 768 696E 6720
+ 768 436F 6E66
+ 768 6967 2044
+ 768 6174 612E
+ 769 .data
+ 772 C.5.5024:
+ 773 0000 80 .byte -128
+ 774 0001 BB .byte -69
+ 775 0002 00 .byte 0
+ 776 .section .progmem.data
+ 779 __c.3917:
+ 780 0125 1B5B 3331 .ascii "\033[31mDev Enum Error\r\n"
+ 780 6D44 6576
+ 780 2045 6E75
+ 780 6D20 4572
+ 780 726F 720D
+ 781 013a 202D 2D20 .string " -- Error Code %d\r\n -- Sub Error Code %d\r\n -- In State %d\r\n\033[37m"
+ 781 4572 726F
+ 781 7220 436F
+ 781 6465 2025
+ 781 640D 0A20
+ 784 __c.3910:
+ 785 017b 1B5B 3331 .string "\033[31mHost Mode Error\r\n -- Error Code %d\r\n\033[37m"
+ 785 6D48 6F73
+ 785 7420 4D6F
+ 785 6465 2045
+ 785 7272 6F72
+ 788 __c.3902:
+ 789 01aa 1B5B 3332 .string "\033[32mDevice Unattached.\r\n\033[37m"
+ 789 6D44 6576
+ 789 6963 6520
+ 789 556E 6174
+ 789 7461 6368
+ 792 __c.3897:
+ 793 01c9 1B5B 3332 .string "\033[32mDevice Attached.\r\n\033[37m"
+ 793 6D44 6576
+ 793 6963 6520
+ 793 4174 7461
+ 793 6368 6564
+ 796 __c.3888:
+ 797 01e6 1B5B 3336 .string "\033[36mAudio Host Demo running.\r\n\033[37m"
+ 797 6D41 7564
+ 797 696F 2048
+ 797 6F73 7420
+ 797 4465 6D6F
+ 894 .Letext0:
+DEFINED SYMBOLS
+ *ABS*:00000000 AudioInputHost.c
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:2 *ABS*:0000003f __SREG__
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:3 *ABS*:0000003e __SP_H__
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:4 *ABS*:0000003d __SP_L__
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:5 *ABS*:00000034 __CCP__
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:6 *ABS*:00000000 __tmp_reg__
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:7 *ABS*:00000001 __zero_reg__
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:18 .text.LEDs_SetAllLEDs:00000000 LEDs_SetAllLEDs
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:39 .text.SetupHardware:00000000 SetupHardware
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:151 .text.EVENT_USB_Host_DeviceAttached:00000000 EVENT_USB_Host_DeviceAttached
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:792 .progmem.data:000001c9 __c.3897
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:173 .text.EVENT_USB_Host_DeviceUnattached:00000000 EVENT_USB_Host_DeviceUnattached
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:788 .progmem.data:000001aa __c.3902
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:195 .text.EVENT_USB_Host_DeviceEnumerationComplete:00000000 EVENT_USB_Host_DeviceEnumerationComplete
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:213 .text.EVENT_USB_Host_HostError:00000000 EVENT_USB_Host_HostError
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:784 .progmem.data:0000017b __c.3910
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:262 .text.EVENT_USB_Host_DeviceEnumerationFailed:00000000 EVENT_USB_Host_DeviceEnumerationFailed
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:779 .progmem.data:00000125 __c.3917
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:320 .text.Audio_Task:00000000 Audio_Task
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:767 .progmem.data:0000010e __c.3924
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:763 .progmem.data:000000e4 __c.3926
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:759 .progmem.data:000000cd __c.3928
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:755 .progmem.data:000000b3 __c.3930
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:750 .progmem.data:00000070 __c.3933
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:745 .progmem.data:00000019 __c.3935
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:772 .data:00000000 C.5.5024
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:741 .progmem.data:00000000 __c.3939
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:529 .text.main:00000000 main
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:796 .progmem.data:000001e6 __c.3888
+C:\Users\Dean\AppData\Local\Temp\ccMWbd5S.s:562 .text.__vector_21:00000000 __vector_21
+
+UNDEFINED SYMBOLS
+USB_Init
+USARTSerialStream
+__iob
+Serial_putchar
+Serial_getchar
+puts_P
+USB_Disable
+printf_P
+USB_HostState
+ProcessConfigurationDescriptor
+USB_Host_SetDeviceConfiguration
+StreamingInterfaceIndex
+StreamingInterfaceAltSetting
+USB_Host_SetInterfaceAltSetting
+StreamingEndpointAddress
+USB_ControlRequest
+USB_Host_SendControlRequest
+USB_USBTask
+__do_copy_data
diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.map b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.map new file mode 100644 index 000000000..189341a7d --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.map @@ -0,0 +1,1169 @@ +Archive member included because of file (symbol)
+
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_exit.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o (exit)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+ AudioInputHost.o (__do_copy_data)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_clear_bss.o)
+ ConfigDescriptor.o (__do_clear_bss)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ AudioInputHost.o (__iob)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ AudioInputHost.o (printf_P)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ AudioInputHost.o (puts_P)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o) (vfprintf)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eerd_byte_at90usb1287.o)
+ ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o (__eerd_byte_usb1287)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eeupd_byte_at90usb1287.o)
+ ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o (__eeupd_byte_usb1287)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen_P.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o) (strnlen_P)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o) (strnlen)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o) (fputc)
+c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(ultoa_invert.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o) (__ultoa_invert)
+
+Allocating common symbols
+Common symbol size file
+
+USB_IsInitialized 0x1 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+USARTSerialStream 0xe ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+USB_ControlRequest 0x8 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+USB_HostState 0x1 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+__iob 0x6 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+
+Discarded input sections
+
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+ .text 0x00000000 0x0 AudioInputHost.o
+ .bss 0x00000000 0x0 AudioInputHost.o
+ .text 0x00000000 0x0 ConfigDescriptor.o
+ .data 0x00000000 0x0 ConfigDescriptor.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .text.USB_Host_GetDeviceDescriptor
+ 0x00000000 0x1c ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .text.USB_Host_GetDeviceStringDescriptor
+ 0x00000000 0x34 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .text.USB_Host_ClearPipeStall
+ 0x00000000 0x32 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .text.Pipe_IsEndpointBound
+ 0x00000000 0x5c ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .text.Pipe_WaitUntilReady
+ 0x00000000 0x5e ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Discard_Stream
+ 0x00000000 0x9a ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Null_Stream
+ 0x00000000 0x9e ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Write_Stream_LE
+ 0x00000000 0xca ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Write_Stream_BE
+ 0x00000000 0xba ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Read_Stream_LE
+ 0x00000000 0xca ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Read_Stream_BE
+ 0x00000000 0xba ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Write_PStream_LE
+ 0x00000000 0xce ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Write_PStream_BE
+ 0x00000000 0xba ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Write_EStream_LE
+ 0x00000000 0xd0 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Write_EStream_BE
+ 0x00000000 0xbc ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Read_EStream_LE
+ 0x00000000 0xce ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text.Pipe_Read_EStream_BE
+ 0x00000000 0xbe ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .text.USB_GetNextDescriptorOfType
+ 0x00000000 0x4c ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .text.USB_GetNextDescriptorOfTypeBefore
+ 0x00000000 0x56 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .text.USB_GetNextDescriptorOfTypeAfter
+ 0x00000000 0x34 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/DeviceStandardReq.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/DeviceStandardReq.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/DeviceStandardReq.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .text.USB_ProcessHIDReport
+ 0x00000000 0x766 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .text.USB_GetHIDReportItemInfo
+ 0x00000000 0xb6 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .text.USB_SetHIDReportItemInfo
+ 0x00000000 0xc2 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .text.USB_GetHIDReportSize
+ 0x00000000 0x58 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .text 0x00000000 0x0 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .data 0x00000000 0x0 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .bss 0x00000000 0x0 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .text.Serial_getchar_Blocking
+ 0x00000000 0x20 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .text.Serial_SendString_P
+ 0x00000000 0x1a ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .text.Serial_SendString
+ 0x00000000 0x1c ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .text.Serial_SendData
+ 0x00000000 0x1e ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_exit.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_exit.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_exit.o)
+ .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_exit.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+ .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_clear_bss.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_clear_bss.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_clear_bss.o)
+ .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_clear_bss.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eerd_byte_at90usb1287.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eerd_byte_at90usb1287.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eerd_byte_at90usb1287.o)
+ .text.avr-libc
+ 0x00000000 0x10 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eerd_byte_at90usb1287.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eeupd_byte_at90usb1287.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eeupd_byte_at90usb1287.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eeupd_byte_at90usb1287.o)
+ .text.avr-libc
+ 0x00000000 0x24 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eeupd_byte_at90usb1287.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen_P.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen_P.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen_P.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+ .text 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(ultoa_invert.o)
+ .data 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(ultoa_invert.o)
+ .bss 0x00000000 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(ultoa_invert.o)
+
+Memory Configuration
+
+Name Origin Length Attributes
+text 0x00000000 0x00020000 xr
+data 0x00800100 0x0000ff00 rw !x
+eeprom 0x00810000 0x00010000 rw !x
+fuse 0x00820000 0x00000400 rw !x
+lock 0x00830000 0x00000400 rw !x
+signature 0x00840000 0x00000400 rw !x
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+Address of section .data set to 0x800100
+LOAD c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+LOAD AudioInputHost.o
+LOAD ConfigDescriptor.o
+LOAD ../../../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o
+LOAD ../../../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o
+LOAD ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+LOAD ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+LOAD ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+LOAD ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+LOAD ../../../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o
+LOAD ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+LOAD ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+LOAD ../../../../LUFA/Drivers/USB/Core/DeviceStandardReq.o
+LOAD ../../../../LUFA/Drivers/USB/Core/Events.o
+LOAD ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+LOAD ../../../../LUFA/Drivers/USB/Core/USBTask.o
+LOAD ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+LOAD ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+LOAD c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libm.a
+LOAD c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a
+LOAD c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a
+LOAD c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a
+
+.hash
+ *(.hash)
+
+.dynsym
+ *(.dynsym)
+
+.dynstr
+ *(.dynstr)
+
+.gnu.version
+ *(.gnu.version)
+
+.gnu.version_d
+ *(.gnu.version_d)
+
+.gnu.version_r
+ *(.gnu.version_r)
+
+.rel.init
+ *(.rel.init)
+
+.rela.init
+ *(.rela.init)
+
+.rel.text
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+
+.rela.text
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+
+.rel.fini
+ *(.rel.fini)
+
+.rela.fini
+ *(.rela.fini)
+
+.rel.rodata
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+
+.rela.rodata
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+
+.rel.data
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+
+.rela.data
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+
+.rel.ctors
+ *(.rel.ctors)
+
+.rela.ctors
+ *(.rela.ctors)
+
+.rel.dtors
+ *(.rel.dtors)
+
+.rela.dtors
+ *(.rela.dtors)
+
+.rel.got
+ *(.rel.got)
+
+.rela.got
+ *(.rela.got)
+
+.rel.bss
+ *(.rel.bss)
+
+.rela.bss
+ *(.rela.bss)
+
+.rel.plt
+ *(.rel.plt)
+
+.rela.plt
+ *(.rela.plt)
+
+.text 0x00000000 0x18fa
+ *(.vectors)
+ .vectors 0x00000000 0x98 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+ 0x00000000 __vector_default
+ 0x00000000 __vectors
+ *(.vectors)
+ *(.progmem.gcc*)
+ *(.progmem*)
+ .progmem.data 0x00000098 0x20b AudioInputHost.o
+ 0x000002a4 . = ALIGN (0x2)
+ *fill* 0x000002a3 0x1 00
+ 0x000002a4 __trampolines_start = .
+ *(.trampolines)
+ .trampolines 0x000002a4 0x0 linker stubs
+ *(.trampolines*)
+ 0x000002a4 __trampolines_end = .
+ *(.jumptables)
+ *(.jumptables*)
+ *(.lowtext)
+ *(.lowtext*)
+ 0x000002a4 __ctors_start = .
+ *(.ctors)
+ 0x000002a4 __ctors_end = .
+ 0x000002a4 __dtors_start = .
+ *(.dtors)
+ 0x000002a4 __dtors_end = .
+ SORT(*)(.ctors)
+ SORT(*)(.dtors)
+ *(.init0)
+ .init0 0x000002a4 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+ 0x000002a4 __init
+ *(.init0)
+ *(.init1)
+ *(.init1)
+ *(.init2)
+ .init2 0x000002a4 0xc c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+ *(.init2)
+ *(.init3)
+ *(.init3)
+ *(.init4)
+ .init4 0x000002b0 0x1a c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+ 0x000002b0 __do_copy_data
+ .init4 0x000002ca 0x10 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_clear_bss.o)
+ 0x000002ca __do_clear_bss
+ *(.init4)
+ *(.init5)
+ *(.init5)
+ *(.init6)
+ *(.init6)
+ *(.init7)
+ *(.init7)
+ *(.init8)
+ *(.init8)
+ *(.init9)
+ .init9 0x000002da 0x6 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+ *(.init9)
+ *(.text)
+ .text 0x000002e0 0x2 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+ 0x000002e0 __vector_22
+ 0x000002e0 __vector_28
+ 0x000002e0 __vector_1
+ 0x000002e0 __vector_32
+ 0x000002e0 __vector_34
+ 0x000002e0 __vector_24
+ 0x000002e0 __vector_12
+ 0x000002e0 __bad_interrupt
+ 0x000002e0 __vector_6
+ 0x000002e0 __vector_31
+ 0x000002e0 __vector_35
+ 0x000002e0 __vector_3
+ 0x000002e0 __vector_23
+ 0x000002e0 __vector_30
+ 0x000002e0 __vector_25
+ 0x000002e0 __vector_11
+ 0x000002e0 __vector_13
+ 0x000002e0 __vector_17
+ 0x000002e0 __vector_19
+ 0x000002e0 __vector_7
+ 0x000002e0 __vector_27
+ 0x000002e0 __vector_5
+ 0x000002e0 __vector_33
+ 0x000002e0 __vector_37
+ 0x000002e0 __vector_4
+ 0x000002e0 __vector_9
+ 0x000002e0 __vector_2
+ 0x000002e0 __vector_15
+ 0x000002e0 __vector_36
+ 0x000002e0 __vector_29
+ 0x000002e0 __vector_8
+ 0x000002e0 __vector_26
+ 0x000002e0 __vector_14
+ 0x000002e0 __vector_16
+ 0x000002e0 __vector_18
+ 0x000002e0 __vector_20
+ 0x000002e2 . = ALIGN (0x2)
+ *(.text.*)
+ .text.LEDs_SetAllLEDs
+ 0x000002e2 0xa AudioInputHost.o
+ .text.SetupHardware
+ 0x000002ec 0x92 AudioInputHost.o
+ 0x000002ec SetupHardware
+ .text.EVENT_USB_Host_DeviceAttached
+ 0x0000037e 0xa AudioInputHost.o
+ 0x0000037e EVENT_USB_Host_DeviceAttached
+ .text.EVENT_USB_Host_DeviceUnattached
+ 0x00000388 0xa AudioInputHost.o
+ 0x00000388 EVENT_USB_Host_DeviceUnattached
+ .text.EVENT_USB_Host_DeviceEnumerationComplete
+ 0x00000392 0x4 AudioInputHost.o
+ 0x00000392 EVENT_USB_Host_DeviceEnumerationComplete
+ .text.EVENT_USB_Host_HostError
+ 0x00000396 0x3e AudioInputHost.o
+ 0x00000396 EVENT_USB_Host_HostError
+ .text.EVENT_USB_Host_DeviceEnumerationFailed
+ 0x000003d4 0x50 AudioInputHost.o
+ 0x000003d4 EVENT_USB_Host_DeviceEnumerationFailed
+ .text.Audio_Task
+ 0x00000424 0x134 AudioInputHost.o
+ 0x00000424 Audio_Task
+ .text.main 0x00000558 0x14 AudioInputHost.o
+ 0x00000558 main
+ .text.__vector_21
+ 0x0000056c 0xd2 AudioInputHost.o
+ 0x0000056c __vector_21
+ .text.DComp_NextAudioControlInterface
+ 0x0000063e 0x22 ConfigDescriptor.o
+ 0x0000063e DComp_NextAudioControlInterface
+ .text.DComp_NextAudioStreamInterface
+ 0x00000660 0x22 ConfigDescriptor.o
+ 0x00000660 DComp_NextAudioStreamInterface
+ .text.DComp_NextAudioInterfaceDataEndpoint
+ 0x00000682 0x22 ConfigDescriptor.o
+ 0x00000682 DComp_NextAudioInterfaceDataEndpoint
+ .text.ProcessConfigurationDescriptor
+ 0x000006a4 0x132 ConfigDescriptor.o
+ 0x000006a4 ProcessConfigurationDescriptor
+ .text.USB_Host_ResetDevice
+ 0x000007d6 0xa8 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .text.USB_Host_WaitMS
+ 0x0000087e 0xaa ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ 0x0000087e USB_Host_WaitMS
+ .text.USB_Host_ProcessNextHostState
+ 0x00000928 0x264 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ 0x00000928 USB_Host_ProcessNextHostState
+ .text.USB_Host_SetDeviceConfiguration
+ 0x00000b8c 0x2c ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ 0x00000b8c USB_Host_SetDeviceConfiguration
+ .text.USB_Host_SetInterfaceAltSetting
+ 0x00000bb8 0x2e ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ 0x00000bb8 USB_Host_SetInterfaceAltSetting
+ .text.Pipe_ConfigurePipe
+ 0x00000be6 0xce ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ 0x00000be6 Pipe_ConfigurePipe
+ .text.Pipe_ClearPipes
+ 0x00000cb4 0x28 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ 0x00000cb4 Pipe_ClearPipes
+ .text.USB_Disable
+ 0x00000cdc 0x30 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ 0x00000cdc USB_Disable
+ .text.USB_ResetInterface
+ 0x00000d0c 0x9c ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ 0x00000d0c USB_ResetInterface
+ .text.USB_Init
+ 0x00000da8 0x12 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ 0x00000da8 USB_Init
+ .text.USB_INT_DisableAllInterrupts
+ 0x00000dba 0x10 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ 0x00000dba USB_INT_DisableAllInterrupts
+ .text.USB_INT_ClearAllInterrupts
+ 0x00000dca 0xa ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ 0x00000dca USB_INT_ClearAllInterrupts
+ .text.__vector_10
+ 0x00000dd4 0x126 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ 0x00000dd4 __vector_10
+ .text.USB_Host_GetDeviceConfigDescriptor
+ 0x00000efa 0xae ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ 0x00000efa USB_Host_GetDeviceConfigDescriptor
+ .text.USB_GetNextDescriptorComp
+ 0x00000fa8 0x86 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ 0x00000fa8 USB_GetNextDescriptorComp
+ .text.USB_Event_Stub
+ 0x0000102e 0x2 ../../../../LUFA/Drivers/USB/Core/Events.o
+ 0x0000102e EVENT_USB_Host_StartOfFrame
+ 0x0000102e USB_Event_Stub
+ .text.USB_Host_WaitForIOS
+ 0x00001030 0x52 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .text.USB_Host_SendControlRequest
+ 0x00001082 0x22c ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ 0x00001082 USB_Host_SendControlRequest
+ .text.USB_USBTask
+ 0x000012ae 0x1c ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ 0x000012ae USB_USBTask
+ .text.Serial_putchar
+ 0x000012ca 0x12 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ 0x000012ca Serial_putchar
+ .text.Serial_getchar
+ 0x000012dc 0x26 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ 0x000012dc Serial_getchar
+ .text.avr-libc
+ 0x00001302 0x3e c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ 0x00001302 printf_P
+ .text.avr-libc
+ 0x00001340 0x70 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ 0x00001340 puts_P
+ .text.avr-libc
+ 0x000013b0 0x406 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ 0x000013b0 vfprintf
+ .text.avr-libc
+ 0x000017b6 0x16 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen_P.o)
+ 0x000017b6 strnlen_P
+ .text.avr-libc
+ 0x000017cc 0x16 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen.o)
+ 0x000017cc strnlen
+ .text.avr-libc
+ 0x000017e2 0x58 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+ 0x000017e2 fputc
+ .text.avr-libc
+ 0x0000183a 0xbc c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(ultoa_invert.o)
+ 0x0000183a __ultoa_invert
+ 0x000018f6 . = ALIGN (0x2)
+ *(.fini9)
+ .fini9 0x000018f6 0x0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_exit.o)
+ 0x000018f6 _exit
+ 0x000018f6 exit
+ *(.fini9)
+ *(.fini8)
+ *(.fini8)
+ *(.fini7)
+ *(.fini7)
+ *(.fini6)
+ *(.fini6)
+ *(.fini5)
+ *(.fini5)
+ *(.fini4)
+ *(.fini4)
+ *(.fini3)
+ *(.fini3)
+ *(.fini2)
+ *(.fini2)
+ *(.fini1)
+ *(.fini1)
+ *(.fini0)
+ .fini0 0x000018f6 0x4 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_exit.o)
+ *(.fini0)
+ 0x000018fa _etext = .
+
+.data 0x00800100 0x1c load address 0x000018fa
+ 0x00800100 PROVIDE (__data_start, .)
+ *(.data)
+ .data 0x00800100 0x3 AudioInputHost.o
+ .data 0x00800103 0x18 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .data 0x0080011b 0x1 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ 0x0080011b USB_ControlPipeSize
+ *(.data*)
+ *(.rodata)
+ *(.rodata*)
+ *(.gnu.linkonce.d*)
+ 0x0080011c . = ALIGN (0x2)
+ 0x0080011c _edata = .
+ 0x0080011c PROVIDE (__data_end, .)
+
+.bss 0x0080011c 0x24
+ 0x0080011c PROVIDE (__bss_start, .)
+ *(.bss)
+ .bss 0x0080011c 0x3 ConfigDescriptor.o
+ 0x0080011c StreamingInterfaceIndex
+ 0x0080011d StreamingInterfaceAltSetting
+ 0x0080011e StreamingEndpointAddress
+ .bss 0x0080011f 0x3 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ *(.bss*)
+ *(COMMON)
+ COMMON 0x00800122 0xa ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ 0x00800122 USB_IsInitialized
+ 0x00800123 USB_ControlRequest
+ 0x0080012b USB_HostState
+ COMMON 0x0080012c 0xe ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ 0x0080012c USARTSerialStream
+ COMMON 0x0080013a 0x6 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ 0x0080013a __iob
+ 0x00800140 PROVIDE (__bss_end, .)
+ 0x000018fa __data_load_start = LOADADDR (.data)
+ 0x00001916 __data_load_end = (__data_load_start + SIZEOF (.data))
+
+.noinit 0x00800140 0x0
+ 0x00800140 PROVIDE (__noinit_start, .)
+ *(.noinit*)
+ 0x00800140 PROVIDE (__noinit_end, .)
+ 0x00800140 _end = .
+ 0x00800140 PROVIDE (__heap_start, .)
+
+.eeprom 0x00810000 0x0
+ *(.eeprom*)
+ 0x00810000 __eeprom_end = .
+
+.fuse
+ *(.fuse)
+ *(.lfuse)
+ *(.hfuse)
+ *(.efuse)
+
+.lock
+ *(.lock*)
+
+.signature
+ *(.signature*)
+
+.stab 0x00000000 0xe28
+ *(.stab)
+ .stab 0x00000000 0x6cc c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+ .stab 0x000006cc 0x90 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eerd_byte_at90usb1287.o)
+ 0x9c (size before relaxing)
+ .stab 0x0000075c 0x114 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eeupd_byte_at90usb1287.o)
+ 0x120 (size before relaxing)
+ .stab 0x00000870 0x9c c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen_P.o)
+ 0xa8 (size before relaxing)
+ .stab 0x0000090c 0x9c c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen.o)
+ 0xa8 (size before relaxing)
+ .stab 0x000009a8 0x480 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(ultoa_invert.o)
+ 0x48c (size before relaxing)
+
+.stabstr 0x00000000 0x26b
+ *(.stabstr)
+ .stabstr 0x00000000 0x26b c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+
+.stab.excl
+ *(.stab.excl)
+
+.stab.exclstr
+ *(.stab.exclstr)
+
+.stab.index
+ *(.stab.index)
+
+.stab.indexstr
+ *(.stab.indexstr)
+
+.comment
+ *(.comment)
+
+.debug
+ *(.debug)
+
+.line
+ *(.line)
+
+.debug_srcinfo
+ *(.debug_srcinfo)
+
+.debug_sfnames
+ *(.debug_sfnames)
+
+.debug_aranges 0x00000000 0x3b0
+ *(.debug_aranges)
+ .debug_aranges
+ 0x00000000 0x68 AudioInputHost.o
+ .debug_aranges
+ 0x00000068 0x38 ConfigDescriptor.o
+ .debug_aranges
+ 0x000000a0 0x58 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .debug_aranges
+ 0x000000f8 0x38 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .debug_aranges
+ 0x00000130 0x30 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .debug_aranges
+ 0x00000160 0x30 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .debug_aranges
+ 0x00000190 0x78 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .debug_aranges
+ 0x00000208 0x40 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .debug_aranges
+ 0x00000248 0x20 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .debug_aranges
+ 0x00000268 0x28 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .debug_aranges
+ 0x00000290 0x20 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .debug_aranges
+ 0x000002b0 0x38 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .debug_aranges
+ 0x000002e8 0x48 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .debug_aranges
+ 0x00000330 0x20 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .debug_aranges
+ 0x00000350 0x20 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .debug_aranges
+ 0x00000370 0x20 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .debug_aranges
+ 0x00000390 0x20 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+
+.debug_pubnames
+ 0x00000000 0x89a
+ *(.debug_pubnames)
+ .debug_pubnames
+ 0x00000000 0x107 AudioInputHost.o
+ .debug_pubnames
+ 0x00000107 0xff ConfigDescriptor.o
+ .debug_pubnames
+ 0x00000206 0xf4 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .debug_pubnames
+ 0x000002fa 0x86 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .debug_pubnames
+ 0x00000380 0x46 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .debug_pubnames
+ 0x000003c6 0x62 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .debug_pubnames
+ 0x00000428 0x13b ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .debug_pubnames
+ 0x00000563 0xc2 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .debug_pubnames
+ 0x00000625 0x25 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .debug_pubnames
+ 0x0000064a 0x32 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .debug_pubnames
+ 0x0000067c 0x61 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .debug_pubnames
+ 0x000006dd 0x7e ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .debug_pubnames
+ 0x0000075b 0xac ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .debug_pubnames
+ 0x00000807 0x1c c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ .debug_pubnames
+ 0x00000823 0x1f c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .debug_pubnames
+ 0x00000842 0x1d c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .debug_pubnames
+ 0x0000085f 0x1f c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .debug_pubnames
+ 0x0000087e 0x1c c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+
+.debug_info 0x00000000 0x56c7
+ *(.debug_info)
+ .debug_info 0x00000000 0x81f AudioInputHost.o
+ .debug_info 0x0000081f 0x5dd ConfigDescriptor.o
+ .debug_info 0x00000dfc 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o
+ .debug_info 0x00000dfc 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o
+ .debug_info 0x00000dfc 0xc19 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .debug_info 0x00001a15 0x5b1 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .debug_info 0x00001fc6 0x409 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .debug_info 0x000023cf 0x495 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .debug_info 0x00002864 0x0 ../../../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o
+ .debug_info 0x00002864 0xac6 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .debug_info 0x0000332a 0x642 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .debug_info 0x0000396c 0x0 ../../../../LUFA/Drivers/USB/Core/DeviceStandardReq.o
+ .debug_info 0x0000396c 0x85 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .debug_info 0x000039f1 0x62a ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .debug_info 0x0000401b 0x1e8 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .debug_info 0x00004203 0x6f9 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .debug_info 0x000048fc 0x413 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .debug_info 0x00004d0f 0x14f c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ .debug_info 0x00004e5e 0x1c6 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .debug_info 0x00005024 0x1ec c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .debug_info 0x00005210 0x350 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .debug_info 0x00005560 0x167 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+ *(.gnu.linkonce.wi.*)
+
+.debug_abbrev 0x00000000 0x1b65
+ *(.debug_abbrev)
+ .debug_abbrev 0x00000000 0x334 AudioInputHost.o
+ .debug_abbrev 0x00000334 0x185 ConfigDescriptor.o
+ .debug_abbrev 0x000004b9 0x1 ../../../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o
+ .debug_abbrev 0x000004ba 0x1 ../../../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o
+ .debug_abbrev 0x000004bb 0x2f6 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .debug_abbrev 0x000007b1 0x1d9 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .debug_abbrev 0x0000098a 0x14d ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .debug_abbrev 0x00000ad7 0x12a ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .debug_abbrev 0x00000c01 0x1 ../../../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o
+ .debug_abbrev 0x00000c02 0x164 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .debug_abbrev 0x00000d66 0x1ca ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .debug_abbrev 0x00000f30 0x1 ../../../../LUFA/Drivers/USB/Core/DeviceStandardReq.o
+ .debug_abbrev 0x00000f31 0x41 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .debug_abbrev 0x00000f72 0x1ea ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .debug_abbrev 0x0000115c 0x11a ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .debug_abbrev 0x00001276 0x1ec ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .debug_abbrev 0x00001462 0x1d1 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .debug_abbrev 0x00001633 0xc5 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ .debug_abbrev 0x000016f8 0x11c c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .debug_abbrev 0x00001814 0x119 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .debug_abbrev 0x0000192d 0x15f c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .debug_abbrev 0x00001a8c 0xd9 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+
+.debug_line 0x00000000 0x53bf
+ *(.debug_line)
+ .debug_line 0x00000000 0x725 AudioInputHost.o
+ .debug_line 0x00000725 0x3df ConfigDescriptor.o
+ .debug_line 0x00000b04 0x24 ../../../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o
+ .debug_line 0x00000b28 0x24 ../../../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o
+ .debug_line 0x00000b4c 0xa69 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .debug_line 0x000015b5 0x5f9 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .debug_line 0x00001bae 0x3f1 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .debug_line 0x00001f9f 0x464 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .debug_line 0x00002403 0x24 ../../../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o
+ .debug_line 0x00002427 0xcf7 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .debug_line 0x0000311e 0x3e3 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .debug_line 0x00003501 0x24 ../../../../LUFA/Drivers/USB/Core/DeviceStandardReq.o
+ .debug_line 0x00003525 0x86 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .debug_line 0x000035ab 0x5f5 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .debug_line 0x00003ba0 0x1e4 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .debug_line 0x00003d84 0x7b0 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .debug_line 0x00004534 0x326 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .debug_line 0x0000485a 0xe5 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ .debug_line 0x0000493f 0x1a4 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .debug_line 0x00004ae3 0x142 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .debug_line 0x00004c25 0x659 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .debug_line 0x0000527e 0x141 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+
+.debug_frame 0x00000000 0x540
+ *(.debug_frame)
+ .debug_frame 0x00000000 0xb0 AudioInputHost.o
+ .debug_frame 0x000000b0 0x50 ConfigDescriptor.o
+ .debug_frame 0x00000100 0x90 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .debug_frame 0x00000190 0x50 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .debug_frame 0x000001e0 0x40 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .debug_frame 0x00000220 0x40 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .debug_frame 0x00000260 0xd0 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .debug_frame 0x00000330 0x60 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .debug_frame 0x00000390 0x20 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .debug_frame 0x000003b0 0x30 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .debug_frame 0x000003e0 0x20 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .debug_frame 0x00000400 0x50 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .debug_frame 0x00000450 0x70 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .debug_frame 0x000004c0 0x20 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .debug_frame 0x000004e0 0x20 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .debug_frame 0x00000500 0x20 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .debug_frame 0x00000520 0x20 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+
+.debug_str 0x00000000 0x26bf
+ *(.debug_str)
+ .debug_str 0x00000000 0x830 AudioInputHost.o
+ 0x8aa (size before relaxing)
+ .debug_str 0x00000830 0x53e ConfigDescriptor.o
+ 0x7d0 (size before relaxing)
+ .debug_str 0x00000d6e 0x6cc ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ 0xbc8 (size before relaxing)
+ .debug_str 0x0000143a 0x269 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ 0x5b7 (size before relaxing)
+ .debug_str 0x000016a3 0x16d ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ 0x516 (size before relaxing)
+ .debug_str 0x00001810 0xaf ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ 0x4f5 (size before relaxing)
+ .debug_str 0x000018bf 0x260 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ 0x3a4 (size before relaxing)
+ .debug_str 0x00001b1f 0x234 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ 0x81e (size before relaxing)
+ .debug_str 0x00001d53 0x3a ../../../../LUFA/Drivers/USB/Core/Events.o
+ 0x11f (size before relaxing)
+ .debug_str 0x00001d8d 0x15b ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ 0x519 (size before relaxing)
+ .debug_str 0x00001ee8 0x45 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ 0x1ee (size before relaxing)
+ .debug_str 0x00001f2d 0x487 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ 0x60d (size before relaxing)
+ .debug_str 0x000023b4 0xfd ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ 0x26d (size before relaxing)
+ .debug_str 0x000024b1 0x4b c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ 0xef (size before relaxing)
+ .debug_str 0x000024fc 0x7a c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ 0x126 (size before relaxing)
+ .debug_str 0x00002576 0x55 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ 0x120 (size before relaxing)
+ .debug_str 0x000025cb 0xa1 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ 0x174 (size before relaxing)
+ .debug_str 0x0000266c 0x53 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+ 0xf8 (size before relaxing)
+
+.debug_loc 0x00000000 0x3422
+ *(.debug_loc)
+ .debug_loc 0x00000000 0xff AudioInputHost.o
+ .debug_loc 0x000000ff 0x280 ConfigDescriptor.o
+ .debug_loc 0x0000037f 0x3de ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .debug_loc 0x0000075d 0x400 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .debug_loc 0x00000b5d 0x13 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .debug_loc 0x00000b70 0x118 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .debug_loc 0x00000c88 0xfe0 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .debug_loc 0x00001c68 0x365 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .debug_loc 0x00001fcd 0x2c5 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .debug_loc 0x00002292 0x1f ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .debug_loc 0x000022b1 0x832 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .debug_loc 0x00002ae3 0x15e ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .debug_loc 0x00002c41 0xe0 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .debug_loc 0x00002d21 0x6b1 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .debug_loc 0x000033d2 0x50 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+
+.debug_macinfo
+ *(.debug_macinfo)
+OUTPUT(AudioInputHost.elf elf32-avr)
+LOAD linker stubs
+
+.debug_pubtypes
+ 0x00000000 0xa86
+ .debug_pubtypes
+ 0x00000000 0x117 AudioInputHost.o
+ .debug_pubtypes
+ 0x00000117 0x179 ConfigDescriptor.o
+ .debug_pubtypes
+ 0x00000290 0x146 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .debug_pubtypes
+ 0x000003d6 0x66 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .debug_pubtypes
+ 0x0000043c 0x59 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .debug_pubtypes
+ 0x00000495 0x88 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .debug_pubtypes
+ 0x0000051d 0x4b ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .debug_pubtypes
+ 0x00000568 0x17e ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .debug_pubtypes
+ 0x000006e6 0x12 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .debug_pubtypes
+ 0x000006f8 0xa0 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .debug_pubtypes
+ 0x00000798 0x44 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .debug_pubtypes
+ 0x000007dc 0x145 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .debug_pubtypes
+ 0x00000921 0x42 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .debug_pubtypes
+ 0x00000963 0x29 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ .debug_pubtypes
+ 0x0000098c 0x48 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .debug_pubtypes
+ 0x000009d4 0x36 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .debug_pubtypes
+ 0x00000a0a 0x53 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .debug_pubtypes
+ 0x00000a5d 0x29 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+
+.debug_ranges 0x00000000 0x490
+ .debug_ranges 0x00000000 0x58 AudioInputHost.o
+ .debug_ranges 0x00000058 0x58 ConfigDescriptor.o
+ .debug_ranges 0x000000b0 0x60 ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ .debug_ranges 0x00000110 0xb0 ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ .debug_ranges 0x000001c0 0x20 ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ .debug_ranges 0x000001e0 0x20 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ .debug_ranges 0x00000200 0x68 ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ .debug_ranges 0x00000268 0x30 ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ .debug_ranges 0x00000298 0x10 ../../../../LUFA/Drivers/USB/Core/Events.o
+ .debug_ranges 0x000002a8 0x30 ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ .debug_ranges 0x000002d8 0x10 ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ .debug_ranges 0x000002e8 0x100 ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+ .debug_ranges 0x000003e8 0x50 ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ .debug_ranges 0x00000438 0x10 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ .debug_ranges 0x00000448 0x10 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ .debug_ranges 0x00000458 0x28 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ .debug_ranges 0x00000480 0x10 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+
+Cross Reference Table
+
+Symbol File
+Audio_Task AudioInputHost.o
+CALLBACK_HIDParser_FilterHIDReportItem ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+DComp_NextAudioControlInterface ConfigDescriptor.o
+DComp_NextAudioInterfaceDataEndpoint ConfigDescriptor.o
+DComp_NextAudioStreamInterface ConfigDescriptor.o
+EVENT_USB_Host_DeviceAttached AudioInputHost.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+EVENT_USB_Host_DeviceEnumerationComplete AudioInputHost.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+EVENT_USB_Host_DeviceEnumerationFailed AudioInputHost.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+EVENT_USB_Host_DeviceUnattached AudioInputHost.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+EVENT_USB_Host_HostError AudioInputHost.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+EVENT_USB_Host_StartOfFrame ../../../../LUFA/Drivers/USB/Core/Events.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+Pipe_ClearPipes ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+Pipe_ConfigurePipe ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ ConfigDescriptor.o
+Pipe_Discard_Stream ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_IsEndpointBound ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+Pipe_Null_Stream ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Read_EStream_BE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Read_EStream_LE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Read_Stream_BE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Read_Stream_LE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_WaitUntilReady ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Write_EStream_BE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Write_EStream_LE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Write_PStream_BE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Write_PStream_LE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Write_Stream_BE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+Pipe_Write_Stream_LE ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ProcessConfigurationDescriptor ConfigDescriptor.o
+ AudioInputHost.o
+Serial_SendData ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+Serial_SendString ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+Serial_SendString_P ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+Serial_getchar ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ AudioInputHost.o
+Serial_getchar_Blocking ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+Serial_putchar ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ AudioInputHost.o
+SetupHardware AudioInputHost.o
+StreamingEndpointAddress ConfigDescriptor.o
+ AudioInputHost.o
+StreamingInterfaceAltSetting ConfigDescriptor.o
+ AudioInputHost.o
+StreamingInterfaceIndex ConfigDescriptor.o
+ AudioInputHost.o
+USARTSerialStream ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ AudioInputHost.o
+USB_ControlPipeSize ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+USB_ControlRequest ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ AudioInputHost.o
+USB_Disable ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ AudioInputHost.o
+USB_Event_Stub ../../../../LUFA/Drivers/USB/Core/Events.o
+USB_GetHIDReportItemInfo ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+USB_GetHIDReportSize ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+USB_GetNextDescriptorComp ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ ConfigDescriptor.o
+USB_GetNextDescriptorOfType ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+USB_GetNextDescriptorOfTypeAfter ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+USB_GetNextDescriptorOfTypeBefore ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+USB_HostState ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ AudioInputHost.o
+USB_Host_ClearPipeStall ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+USB_Host_GetDeviceConfigDescriptor ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ ConfigDescriptor.o
+USB_Host_GetDeviceDescriptor ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+USB_Host_GetDeviceStringDescriptor ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+USB_Host_ProcessNextHostState ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/USBTask.o
+USB_Host_SendControlRequest ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+ ../../../../LUFA/Drivers/USB/Core/ConfigDescriptor.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ AudioInputHost.o
+USB_Host_SetDeviceConfiguration ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ AudioInputHost.o
+USB_Host_SetInterfaceAltSetting ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ AudioInputHost.o
+USB_Host_WaitMS ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/HostStandardReq.o
+USB_INT_ClearAllInterrupts ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+USB_INT_DisableAllInterrupts ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+USB_Init ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ AudioInputHost.o
+USB_IsInitialized ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+USB_ProcessHIDReport ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+USB_ResetInterface ../../../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+USB_SetHIDReportItemInfo ../../../../LUFA/Drivers/USB/Class/Common/HIDParser.o
+USB_USBTask ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+ AudioInputHost.o
+__bad_interrupt c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__bss_end c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_clear_bss.o)
+__bss_start c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_clear_bss.o)
+__data_end c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+__data_load_start c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+__data_start c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+__do_clear_bss c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_clear_bss.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ ../../../../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/USBTask.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ ConfigDescriptor.o
+__do_copy_data c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_copy_data.o)
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
+ ../../../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
+ AudioInputHost.o
+__eerd_byte_usb1287 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eerd_byte_at90usb1287.o)
+ ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+__eeupd_byte_usb1287 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eeupd_byte_at90usb1287.o)
+ ../../../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
+__eeupd_r18_usb1287 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(eeupd_byte_at90usb1287.o)
+__heap_end c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__init c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__iob c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(iob.o)
+ AudioInputHost.o
+__stack c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__ultoa_invert c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(ultoa_invert.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+__vector_1 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_10 ../../../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_11 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_12 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_13 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_14 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_15 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_16 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_17 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_18 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_19 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_2 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_20 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_21 AudioInputHost.o
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_22 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_23 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_24 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_25 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_26 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_27 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_28 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_29 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_3 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_30 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_31 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_32 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_33 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_34 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_35 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_36 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_37 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_4 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_5 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_6 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_7 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_8 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_9 c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vector_default c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+__vectors c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+_exit c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_exit.o)
+exit c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr51\libgcc.a(_exit.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+fputc c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(fputc.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+main AudioInputHost.o
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51/crtusb1286.o
+printf_P c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
+ AudioInputHost.o
+puts_P c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(puts_p.o)
+ AudioInputHost.o
+strnlen c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+strnlen_P c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(strnlen_P.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+vfprintf c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(vfprintf_std.o)
+ c:/program files (x86)/atmel/avr studio 5.0/extensions/application/avr toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr51\libc.a(printf_p.o)
diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.o b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.o Binary files differnew file mode 100644 index 000000000..f8bafd3d1 --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.o diff --git a/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.sym b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.sym new file mode 100644 index 000000000..498ebbca4 --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/AudioInputHost.sym @@ -0,0 +1,267 @@ + U CALLBACK_HIDParser_FilterHIDReportItem
+00000000 W __heap_end
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 a __tmp_reg__
+00000000 W __vector_default
+00000000 T __vectors
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000001 a __zero_reg__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+00000034 a __CCP__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003d a __SP_L__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003e a __SP_H__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+0000003f a __SREG__
+00000098 t __c.3939
+000000b1 t __c.3935
+00000108 t __c.3933
+0000014b t __c.3930
+00000165 t __c.3928
+0000017c t __c.3926
+000001a6 t __c.3924
+000001bd t __c.3917
+00000213 t __c.3910
+00000242 t __c.3902
+00000261 t __c.3897
+0000027e t __c.3888
+000002a4 T __ctors_end
+000002a4 T __ctors_start
+000002a4 T __dtors_end
+000002a4 T __dtors_start
+000002a4 W __init
+000002a4 T __trampolines_end
+000002a4 T __trampolines_start
+000002b0 T __do_copy_data
+000002ca T __do_clear_bss
+000002d2 t .do_clear_bss_loop
+000002d4 t .do_clear_bss_start
+000002e0 T __bad_interrupt
+000002e0 W __vector_1
+000002e0 W __vector_11
+000002e0 W __vector_12
+000002e0 W __vector_13
+000002e0 W __vector_14
+000002e0 W __vector_15
+000002e0 W __vector_16
+000002e0 W __vector_17
+000002e0 W __vector_18
+000002e0 W __vector_19
+000002e0 W __vector_2
+000002e0 W __vector_20
+000002e0 W __vector_22
+000002e0 W __vector_23
+000002e0 W __vector_24
+000002e0 W __vector_25
+000002e0 W __vector_26
+000002e0 W __vector_27
+000002e0 W __vector_28
+000002e0 W __vector_29
+000002e0 W __vector_3
+000002e0 W __vector_30
+000002e0 W __vector_31
+000002e0 W __vector_32
+000002e0 W __vector_33
+000002e0 W __vector_34
+000002e0 W __vector_35
+000002e0 W __vector_36
+000002e0 W __vector_37
+000002e0 W __vector_4
+000002e0 W __vector_5
+000002e0 W __vector_6
+000002e0 W __vector_7
+000002e0 W __vector_8
+000002e0 W __vector_9
+000002e2 t LEDs_SetAllLEDs
+000002ec T SetupHardware
+0000037e T EVENT_USB_Host_DeviceAttached
+00000388 T EVENT_USB_Host_DeviceUnattached
+00000392 T EVENT_USB_Host_DeviceEnumerationComplete
+00000396 T EVENT_USB_Host_HostError
+000003d4 T EVENT_USB_Host_DeviceEnumerationFailed
+00000424 T Audio_Task
+00000558 T main
+0000056c T __vector_21
+0000063e T DComp_NextAudioControlInterface
+00000660 T DComp_NextAudioStreamInterface
+00000682 T DComp_NextAudioInterfaceDataEndpoint
+000006a4 T ProcessConfigurationDescriptor
+000007d6 t USB_Host_ResetDevice
+0000087e T USB_Host_WaitMS
+00000928 T USB_Host_ProcessNextHostState
+00000b8c T USB_Host_SetDeviceConfiguration
+00000bb8 T USB_Host_SetInterfaceAltSetting
+00000be6 T Pipe_ConfigurePipe
+00000cb4 T Pipe_ClearPipes
+00000cdc T USB_Disable
+00000d0c T USB_ResetInterface
+00000da8 T USB_Init
+00000dba T USB_INT_DisableAllInterrupts
+00000dca T USB_INT_ClearAllInterrupts
+00000dd4 T __vector_10
+00000efa T USB_Host_GetDeviceConfigDescriptor
+00000fa8 T USB_GetNextDescriptorComp
+0000102e W EVENT_USB_Host_StartOfFrame
+0000102e T USB_Event_Stub
+00001030 t USB_Host_WaitForIOS
+00001082 T USB_Host_SendControlRequest
+000012ae T USB_USBTask
+000012ca T Serial_putchar
+000012dc T Serial_getchar
+00001302 T printf_P
+00001340 T puts_P
+000013b0 T vfprintf
+000017b6 T strnlen_P
+000017cc T strnlen
+000017e2 T fputc
+0000183a T __ultoa_invert
+000018f6 T _exit
+000018f6 W exit
+000018f8 t __stop_program
+000018fa A __data_load_start
+000018fa T _etext
+00001916 A __data_load_end
+000020ff W __stack
+00800100 d C.5.5024
+00800100 D __data_start
+00800103 d C.0.3420
+0080010b d C.10.3637
+00800113 d C.7.3627
+0080011b D USB_ControlPipeSize
+0080011c B StreamingInterfaceIndex
+0080011c B __bss_start
+0080011c D __data_end
+0080011c D _edata
+0080011d B StreamingInterfaceAltSetting
+0080011e B StreamingEndpointAddress
+0080011f b PostWaitState.2492
+00800120 b WaitMSRemaining.2491
+00800122 B USB_IsInitialized
+00800123 B USB_ControlRequest
+0080012b B USB_HostState
+0080012c B USARTSerialStream
+0080013a B __iob
+00800140 B __bss_end
+00800140 N _end
+00810000 N __eeprom_end
diff --git a/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.c b/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.c new file mode 100644 index 000000000..d0ca91a08 --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.c @@ -0,0 +1,183 @@ +/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2011.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, distribute, and sell this
+ software and its documentation for any purpose is hereby granted
+ without fee, provided that the above copyright notice appear in
+ all copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaim all warranties with regard to this
+ software, including all implied warranties of merchantability
+ and fitness. In no event shall the author be liable for any
+ special, indirect or consequential damages or any damages
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+/** \file
+ *
+ * USB Device Configuration Descriptor processing routines, to determine the correct pipe configurations
+ * needed to communication with an attached USB device. Descriptors are special computer-readable structures
+ * which the host requests upon device enumeration, to determine the device's capabilities and functions.
+ */
+
+#include "ConfigDescriptor.h"
+
+uint8_t StreamingInterfaceIndex = 0;
+uint8_t StreamingInterfaceAltSetting = 0;
+uint8_t StreamingEndpointAddress = 0;
+
+uint8_t ProcessConfigurationDescriptor(void)
+{
+ uint8_t ConfigDescriptorData[512];
+ void* CurrConfigLocation = ConfigDescriptorData;
+ uint16_t CurrConfigBytesRem;
+
+ USB_Descriptor_Interface_t* AudioControlInterface = NULL;
+ USB_Descriptor_Interface_t* AudioStreamingInterface = NULL;
+ USB_Descriptor_Endpoint_t* DataINEndpoint = NULL;
+
+ /* Retrieve the entire configuration descriptor into the allocated buffer */
+ switch (USB_Host_GetDeviceConfigDescriptor(1, &CurrConfigBytesRem, ConfigDescriptorData, sizeof(ConfigDescriptorData)))
+ {
+ case HOST_GETCONFIG_Successful:
+ break;
+ case HOST_GETCONFIG_InvalidData:
+ return InvalidConfigDataReturned;
+ case HOST_GETCONFIG_BuffOverflow:
+ return DescriptorTooLarge;
+ default:
+ return ControlError;
+ }
+
+ while (!(DataINEndpoint))
+ {
+ if (!(AudioControlInterface) ||
+ USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ DComp_NextAudioInterfaceDataEndpoint) != DESCRIPTOR_SEARCH_COMP_Found)
+ {
+ if (!(AudioControlInterface))
+ {
+ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ DComp_NextAudioControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+ {
+ /* Descriptor not found, error out */
+ return NoCompatibleInterfaceFound;
+ }
+
+ /* Save the interface in case we need to refer back to it later */
+ AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t);
+ }
+
+ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ DComp_NextAudioStreamInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+ {
+ if (USB_GetNextDescriptorComp(&CurrConfigBytesRem, &CurrConfigLocation,
+ DComp_NextAudioControlInterface) != DESCRIPTOR_SEARCH_COMP_Found)
+ {
+ /* Descriptor not found, error out */
+ return NoCompatibleInterfaceFound;
+ }
+
+ /* Save the interface in case we need to refer back to it later */
+ AudioControlInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t);
+ }
+
+ /* Save the interface in case we need to refer back to it later */
+ AudioStreamingInterface = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Interface_t);
+
+ /* Skip the remainder of the loop as we have not found an endpoint yet */
+ continue;
+ }
+
+ /* Retrieve the endpoint address from the endpoint descriptor */
+ USB_Descriptor_Endpoint_t* EndpointData = DESCRIPTOR_PCAST(CurrConfigLocation, USB_Descriptor_Endpoint_t);
+
+ /* If the endpoint is a IN type endpoint */
+ if (EndpointData->EndpointAddress & ENDPOINT_DESCRIPTOR_DIR_IN)
+ DataINEndpoint = EndpointData;
+ }
+
+ StreamingInterfaceIndex = AudioStreamingInterface->InterfaceNumber;
+ StreamingInterfaceAltSetting = AudioStreamingInterface->AlternateSetting;
+ StreamingEndpointAddress = DataINEndpoint->EndpointAddress;
+
+ /* Configure the HID data IN pipe */
+ Pipe_ConfigurePipe(AUDIO_DATA_IN_PIPE, EP_TYPE_ISOCHRONOUS, PIPE_TOKEN_IN,
+ DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, PIPE_BANK_DOUBLE);
+
+ /* Valid data found, return success */
+ return SuccessfulConfigRead;
+}
+
+uint8_t DComp_NextAudioControlInterface(void* CurrentDescriptor)
+{
+ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+ if (Header->Type == DTYPE_Interface)
+ {
+ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t);
+
+ if ((Interface->Class == AUDIO_CSCP_AudioClass) &&
+ (Interface->SubClass == AUDIO_CSCP_ControlSubclass) &&
+ (Interface->Protocol == AUDIO_CSCP_ControlProtocol))
+ {
+ return DESCRIPTOR_SEARCH_Found;
+ }
+ }
+
+ return DESCRIPTOR_SEARCH_NotFound;
+}
+
+uint8_t DComp_NextAudioStreamInterface(void* CurrentDescriptor)
+{
+ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+ if (Header->Type == DTYPE_Interface)
+ {
+ USB_Descriptor_Interface_t* Interface = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Interface_t);
+
+ if ((Interface->Class == AUDIO_CSCP_AudioClass) &&
+ (Interface->SubClass == AUDIO_CSCP_AudioStreamingSubclass) &&
+ (Interface->Protocol == AUDIO_CSCP_StreamingProtocol))
+ {
+ return DESCRIPTOR_SEARCH_Found;
+ }
+ }
+
+ return DESCRIPTOR_SEARCH_NotFound;
+}
+
+uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor)
+{
+ USB_Descriptor_Header_t* Header = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Header_t);
+
+ if (Header->Type == DTYPE_Endpoint)
+ {
+ USB_Descriptor_Endpoint_t* Endpoint = DESCRIPTOR_PCAST(CurrentDescriptor, USB_Descriptor_Endpoint_t);
+
+ if ((Endpoint->Attributes & EP_TYPE_MASK) == EP_TYPE_ISOCHRONOUS)
+ return DESCRIPTOR_SEARCH_Found;
+ }
+ else if (Header->Type == DTYPE_Interface)
+ {
+ return DESCRIPTOR_SEARCH_Fail;
+ }
+
+ return DESCRIPTOR_SEARCH_NotFound;
+}
+
diff --git a/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.h b/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.h new file mode 100644 index 000000000..4a1cf9093 --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.h @@ -0,0 +1,72 @@ +/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2011.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, distribute, and sell this
+ software and its documentation for any purpose is hereby granted
+ without fee, provided that the above copyright notice appear in
+ all copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaim all warranties with regard to this
+ software, including all implied warranties of merchantability
+ and fitness. In no event shall the author be liable for any
+ special, indirect or consequential damages or any damages
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+/** \file
+ *
+ * Header file for ConfigDescriptor.c.
+ */
+
+#ifndef _CONFIGDESCRIPTOR_H_
+#define _CONFIGDESCRIPTOR_H_
+
+ /* Includes: */
+ #include <LUFA/Drivers/USB/USB.h>
+
+ #include "AudioInputHost.h"
+
+ /* Macros: */
+ /** Pipe number for the Audio data IN pipe. */
+ #define AUDIO_DATA_IN_PIPE 1
+
+ /* Enums: */
+ /** Enum for the possible return codes of the \ref ProcessConfigurationDescriptor() function. */
+ enum KeyboardHost_GetConfigDescriptorDataCodes_t
+ {
+ SuccessfulConfigRead = 0, /**< Configuration Descriptor was processed successfully */
+ ControlError = 1, /**< A control request to the device failed to complete successfully */
+ DescriptorTooLarge = 2, /**< The device's Configuration Descriptor is too large to process */
+ InvalidConfigDataReturned = 3, /**< The device returned an invalid Configuration Descriptor */
+ NoCompatibleInterfaceFound = 4, /**< A compatible interface with the required endpoints was not found */
+ };
+
+ /* External Variables: */
+ extern uint8_t StreamingInterfaceIndex;
+ extern uint8_t StreamingInterfaceAltSetting;
+ extern uint8_t StreamingEndpointAddress;
+
+ /* Function Prototypes: */
+ uint8_t ProcessConfigurationDescriptor(void);
+
+ uint8_t DComp_NextAudioControlInterface(void* CurrentDescriptor);
+ uint8_t DComp_NextAudioStreamInterface(void* CurrentDescriptor);
+ uint8_t DComp_NextAudioInterfaceDataEndpoint(void* CurrentDescriptor);
+
+#endif
+
diff --git a/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.lst b/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.lst new file mode 100644 index 000000000..9a6378629 --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.lst @@ -0,0 +1,400 @@ + 1 .file "ConfigDescriptor.c"
+ 2 __SREG__ = 0x3f
+ 3 __SP_H__ = 0x3e
+ 4 __SP_L__ = 0x3d
+ 5 __CCP__ = 0x34
+ 6 __tmp_reg__ = 0
+ 7 __zero_reg__ = 1
+ 15 .Ltext0:
+ 16 .section .text.DComp_NextAudioControlInterface,"ax",@progbits
+ 17 .global DComp_NextAudioControlInterface
+ 19 DComp_NextAudioControlInterface:
+ 20 .LFB132:
+ 21 .LSM0:
+ 22 .LVL0:
+ 23 /* prologue: function */
+ 24 /* frame size = 0 */
+ 25 /* stack size = 0 */
+ 26 .L__stack_usage = 0
+ 27 0000 FC01 movw r30,r24
+ 28 .LVL1:
+ 29 .LSM1:
+ 30 0002 8181 ldd r24,Z+1
+ 31 .LVL2:
+ 32 0004 8430 cpi r24,lo8(4)
+ 33 0006 01F4 brne .L5
+ 34 .LVL3:
+ 35 .LBB2:
+ 36 .LSM2:
+ 37 0008 8581 ldd r24,Z+5
+ 38 000a 8130 cpi r24,lo8(1)
+ 39 000c 01F4 brne .L5
+ 40 .LSM3:
+ 41 000e 8681 ldd r24,Z+6
+ 42 0010 8130 cpi r24,lo8(1)
+ 43 0012 01F4 brne .L5
+ 44 .LSM4:
+ 45 0014 8781 ldd r24,Z+7
+ 46 0016 8823 tst r24
+ 47 0018 01F0 breq .L6
+ 48 .LVL4:
+ 49 .L5:
+ 50 .LSM5:
+ 51 001a 82E0 ldi r24,lo8(2)
+ 52 001c 0895 ret
+ 53 .LVL5:
+ 54 .L6:
+ 55 .LSM6:
+ 56 001e 80E0 ldi r24,lo8(0)
+ 57 .LBE2:
+ 58 .LSM7:
+ 59 0020 0895 ret
+ 60 .LFE132:
+ 62 .section .text.DComp_NextAudioStreamInterface,"ax",@progbits
+ 63 .global DComp_NextAudioStreamInterface
+ 65 DComp_NextAudioStreamInterface:
+ 66 .LFB133:
+ 67 .LSM8:
+ 68 .LVL6:
+ 69 /* prologue: function */
+ 70 /* frame size = 0 */
+ 71 /* stack size = 0 */
+ 72 .L__stack_usage = 0
+ 73 0000 FC01 movw r30,r24
+ 74 .LVL7:
+ 75 .LSM9:
+ 76 0002 8181 ldd r24,Z+1
+ 77 .LVL8:
+ 78 0004 8430 cpi r24,lo8(4)
+ 79 0006 01F4 brne .L11
+ 80 .LVL9:
+ 81 .LBB3:
+ 82 .LSM10:
+ 83 0008 8581 ldd r24,Z+5
+ 84 000a 8130 cpi r24,lo8(1)
+ 85 000c 01F4 brne .L11
+ 86 .LSM11:
+ 87 000e 8681 ldd r24,Z+6
+ 88 0010 8230 cpi r24,lo8(2)
+ 89 0012 01F4 brne .L11
+ 90 .LSM12:
+ 91 0014 8781 ldd r24,Z+7
+ 92 0016 8823 tst r24
+ 93 0018 01F0 breq .L12
+ 94 .LVL10:
+ 95 .L11:
+ 96 .LSM13:
+ 97 001a 82E0 ldi r24,lo8(2)
+ 98 001c 0895 ret
+ 99 .LVL11:
+ 100 .L12:
+ 101 .LSM14:
+ 102 001e 80E0 ldi r24,lo8(0)
+ 103 .LBE3:
+ 104 .LSM15:
+ 105 0020 0895 ret
+ 106 .LFE133:
+ 108 .section .text.DComp_NextAudioInterfaceDataEndpoint,"ax",@progbits
+ 109 .global DComp_NextAudioInterfaceDataEndpoint
+ 111 DComp_NextAudioInterfaceDataEndpoint:
+ 112 .LFB134:
+ 113 .LSM16:
+ 114 .LVL12:
+ 115 /* prologue: function */
+ 116 /* frame size = 0 */
+ 117 /* stack size = 0 */
+ 118 .L__stack_usage = 0
+ 119 0000 FC01 movw r30,r24
+ 120 .LVL13:
+ 121 .LSM17:
+ 122 0002 8181 ldd r24,Z+1
+ 123 .LVL14:
+ 124 0004 8530 cpi r24,lo8(5)
+ 125 0006 01F4 brne .L14
+ 126 .LVL15:
+ 127 .LBB4:
+ 128 .LSM18:
+ 129 0008 8381 ldd r24,Z+3
+ 130 000a 8370 andi r24,lo8(3)
+ 131 000c 8130 cpi r24,lo8(1)
+ 132 000e 01F4 brne .L18
+ 133 0010 00C0 rjmp .L16
+ 134 .LVL16:
+ 135 .L14:
+ 136 .LBE4:
+ 137 .LSM19:
+ 138 0012 8430 cpi r24,lo8(4)
+ 139 0014 01F0 breq .L17
+ 140 .L18:
+ 141 .LSM20:
+ 142 0016 82E0 ldi r24,lo8(2)
+ 143 0018 0895 ret
+ 144 .LVL17:
+ 145 .L16:
+ 146 .LBB5:
+ 147 .LSM21:
+ 148 001a 80E0 ldi r24,lo8(0)
+ 149 001c 0895 ret
+ 150 .LVL18:
+ 151 .L17:
+ 152 .LBE5:
+ 153 .LSM22:
+ 154 001e 81E0 ldi r24,lo8(1)
+ 155 .LSM23:
+ 156 0020 0895 ret
+ 157 .LFE134:
+ 159 .section .text.ProcessConfigurationDescriptor,"ax",@progbits
+ 160 .global ProcessConfigurationDescriptor
+ 162 ProcessConfigurationDescriptor:
+ 163 .LFB131:
+ 164 .LSM24:
+ 165 0000 AF92 push r10
+ 166 0002 BF92 push r11
+ 167 0004 CF92 push r12
+ 168 0006 DF92 push r13
+ 169 0008 EF92 push r14
+ 170 000a FF92 push r15
+ 171 000c 0F93 push r16
+ 172 000e 1F93 push r17
+ 173 0010 DF93 push r29
+ 174 0012 CF93 push r28
+ 175 0014 CDB7 in r28,__SP_L__
+ 176 0016 DEB7 in r29,__SP_H__
+ 177 0018 C450 subi r28,lo8(-(-516))
+ 178 001a D240 sbci r29,hi8(-(-516))
+ 179 001c 0FB6 in __tmp_reg__,__SREG__
+ 180 001e F894 cli
+ 181 0020 DEBF out __SP_H__,r29
+ 182 0022 0FBE out __SREG__,__tmp_reg__
+ 183 0024 CDBF out __SP_L__,r28
+ 184 /* prologue: function */
+ 185 /* frame size = 516 */
+ 186 /* stack size = 526 */
+ 187 .L__stack_usage = 526
+ 188 .LSM25:
+ 189 0026 AE01 movw r20,r28
+ 190 0028 4B5F subi r20,lo8(-(5))
+ 191 002a 5F4F sbci r21,hi8(-(5))
+ 192 002c 5A83 std Y+2,r21
+ 193 002e 4983 std Y+1,r20
+ 194 .LVL19:
+ 195 .LSM26:
+ 196 0030 23E0 ldi r18,lo8(3)
+ 197 0032 E22E mov r14,r18
+ 198 0034 F12C mov r15,__zero_reg__
+ 199 0036 EC0E add r14,r28
+ 200 0038 FD1E adc r15,r29
+ 201 003a 81E0 ldi r24,lo8(1)
+ 202 003c B701 movw r22,r14
+ 203 003e 20E0 ldi r18,lo8(512)
+ 204 0040 32E0 ldi r19,hi8(512)
+ 205 0042 0E94 0000 call USB_Host_GetDeviceConfigDescriptor
+ 206 0046 8530 cpi r24,lo8(5)
+ 207 0048 01F4 brne .+2
+ 208 004a 00C0 rjmp .L31
+ 209 004c 8630 cpi r24,lo8(6)
+ 210 004e 01F0 breq .L23
+ 211 0050 8823 tst r24
+ 212 0052 01F4 brne .L34
+ 213 0054 00E0 ldi r16,lo8(0)
+ 214 0056 10E0 ldi r17,hi8(0)
+ 215 0058 CC24 clr r12
+ 216 005a DD24 clr r13
+ 217 005c 5701 movw r10,r14
+ 218 005e 7E01 movw r14,r28
+ 219 0060 0894 sec
+ 220 0062 E11C adc r14,__zero_reg__
+ 221 0064 F11C adc r15,__zero_reg__
+ 222 0066 00C0 rjmp .L24
+ 223 .L23:
+ 224 .LSM27:
+ 225 0068 83E0 ldi r24,lo8(3)
+ 226 006a 00C0 rjmp .L22
+ 227 .L34:
+ 228 .LSM28:
+ 229 006c 81E0 ldi r24,lo8(1)
+ 230 006e 00C0 rjmp .L22
+ 231 .LVL20:
+ 232 .L30:
+ 233 .LSM29:
+ 234 0070 9C01 movw r18,r24
+ 235 0072 032F mov r16,r19
+ 236 0074 182F mov r17,r24
+ 237 .LVL21:
+ 238 .L24:
+ 239 .LBB6:
+ 240 .LSM30:
+ 241 0076 C114 cp r12,__zero_reg__
+ 242 0078 D104 cpc r13,__zero_reg__
+ 243 007a 01F0 breq .L25
+ 244 .LSM31:
+ 245 007c C501 movw r24,r10
+ 246 007e B701 movw r22,r14
+ 247 0080 40E0 ldi r20,lo8(gs(DComp_NextAudioInterfaceDataEndpoint))
+ 248 0082 50E0 ldi r21,hi8(gs(DComp_NextAudioInterfaceDataEndpoint))
+ 249 0084 0E94 0000 call USB_GetNextDescriptorComp
+ 250 .LSM32:
+ 251 0088 8823 tst r24
+ 252 008a 01F4 brne .L26
+ 253 008c 00C0 rjmp .L36
+ 254 .L25:
+ 255 .LSM33:
+ 256 008e C501 movw r24,r10
+ 257 0090 B701 movw r22,r14
+ 258 0092 40E0 ldi r20,lo8(gs(DComp_NextAudioControlInterface))
+ 259 0094 50E0 ldi r21,hi8(gs(DComp_NextAudioControlInterface))
+ 260 0096 0E94 0000 call USB_GetNextDescriptorComp
+ 261 009a 8823 tst r24
+ 262 009c 01F4 brne .L33
+ 263 .LSM34:
+ 264 009e C980 ldd r12,Y+1
+ 265 00a0 DA80 ldd r13,Y+2
+ 266 .LVL22:
+ 267 .L26:
+ 268 .LSM35:
+ 269 00a2 C501 movw r24,r10
+ 270 00a4 B701 movw r22,r14
+ 271 00a6 40E0 ldi r20,lo8(gs(DComp_NextAudioStreamInterface))
+ 272 00a8 50E0 ldi r21,hi8(gs(DComp_NextAudioStreamInterface))
+ 273 00aa 0E94 0000 call USB_GetNextDescriptorComp
+ 274 00ae 8823 tst r24
+ 275 00b0 01F0 breq .L28
+ 276 .LSM36:
+ 277 00b2 C501 movw r24,r10
+ 278 00b4 B701 movw r22,r14
+ 279 00b6 40E0 ldi r20,lo8(gs(DComp_NextAudioControlInterface))
+ 280 00b8 50E0 ldi r21,hi8(gs(DComp_NextAudioControlInterface))
+ 281 00ba 0E94 0000 call USB_GetNextDescriptorComp
+ 282 00be 8823 tst r24
+ 283 00c0 01F4 brne .L33
+ 284 .LSM37:
+ 285 00c2 C980 ldd r12,Y+1
+ 286 00c4 DA80 ldd r13,Y+2
+ 287 .LVL23:
+ 288 .L28:
+ 289 .LSM38:
+ 290 00c6 0981 ldd r16,Y+1
+ 291 00c8 1A81 ldd r17,Y+2
+ 292 .LVL24:
+ 293 .LSM39:
+ 294 00ca 00C0 rjmp .L29
+ 295 .LVL25:
+ 296 .L36:
+ 297 .LSM40:
+ 298 00cc E981 ldd r30,Y+1
+ 299 00ce FA81 ldd r31,Y+2
+ 300 .LVL26:
+ 301 .LSM41:
+ 302 00d0 8281 ldd r24,Z+2
+ 303 00d2 87FF sbrs r24,7
+ 304 00d4 00C0 rjmp .L29
+ 305 .LSM42:
+ 306 00d6 902F mov r25,r16
+ 307 00d8 812F mov r24,r17
+ 308 .LVL27:
+ 309 .LBE6:
+ 310 .LSM43:
+ 311 00da 3097 sbiw r30,0
+ 312 00dc 01F0 breq .L30
+ 313 .LSM44:
+ 314 00de D801 movw r26,r16
+ 315 00e0 1296 adiw r26,2
+ 316 00e2 8C91 ld r24,X
+ 317 00e4 1297 sbiw r26,2
+ 318 00e6 8093 0000 sts StreamingInterfaceIndex,r24
+ 319 .LSM45:
+ 320 00ea 1396 adiw r26,3
+ 321 00ec 8C91 ld r24,X
+ 322 00ee 8093 0000 sts StreamingInterfaceAltSetting,r24
+ 323 .LSM46:
+ 324 00f2 2281 ldd r18,Z+2
+ 325 00f4 2093 0000 sts StreamingEndpointAddress,r18
+ 326 .LSM47:
+ 327 00f8 0481 ldd r16,Z+4
+ 328 00fa 1581 ldd r17,Z+5
+ 329 .LVL28:
+ 330 00fc 81E0 ldi r24,lo8(1)
+ 331 00fe 61E0 ldi r22,lo8(1)
+ 332 0100 40E1 ldi r20,lo8(16)
+ 333 0102 94E0 ldi r25,lo8(4)
+ 334 0104 E92E mov r14,r25
+ 335 .LVL29:
+ 336 0106 0E94 0000 call Pipe_ConfigurePipe
+ 337 .LVL30:
+ 338 .LSM48:
+ 339 010a 80E0 ldi r24,lo8(0)
+ 340 010c 00C0 rjmp .L22
+ 341 .LVL31:
+ 342 .L31:
+ 343 .LSM49:
+ 344 010e 82E0 ldi r24,lo8(2)
+ 345 0110 00C0 rjmp .L22
+ 346 .LVL32:
+ 347 .L33:
+ 348 .LBB7:
+ 349 .LSM50:
+ 350 0112 84E0 ldi r24,lo8(4)
+ 351 .L22:
+ 352 /* epilogue start */
+ 353 .LBE7:
+ 354 .LSM51:
+ 355 0114 CC5F subi r28,lo8(-(516))
+ 356 0116 DD4F sbci r29,hi8(-(516))
+ 357 0118 0FB6 in __tmp_reg__,__SREG__
+ 358 011a F894 cli
+ 359 011c DEBF out __SP_H__,r29
+ 360 011e 0FBE out __SREG__,__tmp_reg__
+ 361 0120 CDBF out __SP_L__,r28
+ 362 0122 CF91 pop r28
+ 363 0124 DF91 pop r29
+ 364 0126 1F91 pop r17
+ 365 0128 0F91 pop r16
+ 366 012a FF90 pop r15
+ 367 012c EF90 pop r14
+ 368 012e DF90 pop r13
+ 369 0130 CF90 pop r12
+ 370 0132 BF90 pop r11
+ 371 0134 AF90 pop r10
+ 372 0136 0895 ret
+ 373 .L29:
+ 374 .LVL33:
+ 375 .LSM52:
+ 376 0138 902F mov r25,r16
+ 377 013a 812F mov r24,r17
+ 378 013c 00C0 rjmp .L30
+ 379 .LFE131:
+ 381 .global StreamingInterfaceIndex
+ 382 .global StreamingInterfaceIndex
+ 383 .section .bss
+ 386 StreamingInterfaceIndex:
+ 387 0000 00 .skip 1,0
+ 388 .global StreamingInterfaceAltSetting
+ 389 .global StreamingInterfaceAltSetting
+ 392 StreamingInterfaceAltSetting:
+ 393 0001 00 .skip 1,0
+ 394 .global StreamingEndpointAddress
+ 395 .global StreamingEndpointAddress
+ 398 StreamingEndpointAddress:
+ 399 0002 00 .skip 1,0
+ 448 .Letext0:
+DEFINED SYMBOLS
+ *ABS*:00000000 ConfigDescriptor.c
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:2 *ABS*:0000003f __SREG__
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:3 *ABS*:0000003e __SP_H__
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:4 *ABS*:0000003d __SP_L__
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:5 *ABS*:00000034 __CCP__
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:6 *ABS*:00000000 __tmp_reg__
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:7 *ABS*:00000001 __zero_reg__
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:19 .text.DComp_NextAudioControlInterface:00000000 DComp_NextAudioControlInterface
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:65 .text.DComp_NextAudioStreamInterface:00000000 DComp_NextAudioStreamInterface
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:111 .text.DComp_NextAudioInterfaceDataEndpoint:00000000 DComp_NextAudioInterfaceDataEndpoint
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:162 .text.ProcessConfigurationDescriptor:00000000 ProcessConfigurationDescriptor
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:386 .bss:00000000 StreamingInterfaceIndex
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:392 .bss:00000001 StreamingInterfaceAltSetting
+C:\Users\Dean\AppData\Local\Temp\cc2CU2Sj.s:398 .bss:00000002 StreamingEndpointAddress
+
+UNDEFINED SYMBOLS
+USB_Host_GetDeviceConfigDescriptor
+USB_GetNextDescriptorComp
+Pipe_ConfigurePipe
+__do_clear_bss
diff --git a/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.o b/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.o Binary files differnew file mode 100644 index 000000000..8c4ba0511 --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/ConfigDescriptor.o diff --git a/Demos/Host/Incomplete/AudioInputHost/makefile b/Demos/Host/Incomplete/AudioInputHost/makefile new file mode 100644 index 000000000..6febc161d --- /dev/null +++ b/Demos/Host/Incomplete/AudioInputHost/makefile @@ -0,0 +1,714 @@ +# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+# >> Modified for use with the LUFA project. <<
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+# Carlos Lamas
+# Dean Camera
+# Opendous Inc.
+# Denver Gingerich
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+# Please customize the avrdude settings below first!
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+# have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+# have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+# (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+# (must have Atmel FLIP installed).
+#
+# make doxygen = Generate DoxyGen documentation for the project (must have
+# DoxyGen installed)
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+# with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+# bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+
+# MCU name
+MCU = at90usb1287
+
+
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+
+# Target board (see library "Board Types" documentation, NONE for projects not requiring
+# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
+# "Board" inside the application directory.
+BOARD = USBKEY
+
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 8000000
+
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = AudioInputHost
+
+
+# Object files directory
+# To put object files in current directory, use a dot (.), do NOT make
+# this an empty or blank macro!
+OBJDIR = .
+
+
+# Path to the LUFA library
+LUFA_PATH = ../../../..
+
+
+# LUFA library compile-time options and predefined tokens
+LUFA_OPTS = -D USB_HOST_ONLY
+LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
+
+
+# Create the LUFA source path variables by including the LUFA root makefile
+include $(LUFA_PATH)/LUFA/makefile
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(TARGET).c \
+ ConfigDescriptor.c \
+ $(LUFA_SRC_USB) \
+ $(LUFA_SRC_SERIAL)
+
+
+# List C++ source files here. (C dependencies are automatically generated.)
+CPPSRC =
+
+
+# List Assembler source files here.
+# Make them always end in a capital .S. Files ending in a lowercase .s
+# will not be considered source files but generated files (assembler
+# output from the compiler), and will be deleted upon "make clean"!
+# Even though the DOS/Win* filesystem matches both .s and .S the same,
+# it will preserve the spelling of the filenames, and gcc itself does
+# care about how the name is spelled on its command-line.
+ASRC =
+
+
+# Optimization level, can be [0, 1, 2, 3, s].
+# 0 = turn off optimization. s = optimize for size.
+# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+# AVR Studio 4.10 requires dwarf-2.
+# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+# Each directory must be seperated by a space.
+# Use forward slashes for directory separators.
+# For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(LUFA_PATH)/
+
+
+# Compiler flag to set the C Standard level.
+# c89 = "ANSI" C
+# gnu89 = c89 plus GCC extensions
+# c99 = ISO C99 standard (not yet fully implemented)
+# gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=c99
+
+
+# Place -D or -U options here for C sources
+CDEFS = -DF_CPU=$(F_CPU)UL
+CDEFS += -DF_USB=$(F_USB)UL
+CDEFS += -DBOARD=BOARD_$(BOARD) -DARCH=ARCH_$(ARCH)
+CDEFS += $(LUFA_OPTS)
+
+
+# Place -D or -U options here for ASM sources
+ADEFS = -DF_CPU=$(F_CPU)
+ADEFS += -DF_USB=$(F_USB)UL
+ADEFS += -DBOARD=BOARD_$(BOARD)
+ADEFS += $(LUFA_OPTS)
+
+# Place -D or -U options here for C++ sources
+CPPDEFS = -DF_CPU=$(F_CPU)UL
+CPPDEFS += -DF_USB=$(F_USB)UL
+CPPDEFS += -DBOARD=BOARD_$(BOARD)
+CPPDEFS += $(LUFA_OPTS)
+#CPPDEFS += -D__STDC_LIMIT_MACROS
+#CPPDEFS += -D__STDC_CONSTANT_MACROS
+
+
+
+#---------------- Compiler Options C ----------------
+# -g*: generate debugging information
+# -O*: optimization level
+# -f...: tuning, see GCC manual and avr-libc documentation
+# -Wall...: warning level
+# -Wa,...: tell GCC to pass this to the assembler.
+# -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char
+CFLAGS += -funsigned-bitfields
+CFLAGS += -ffunction-sections
+CFLAGS += -fno-inline-small-functions
+CFLAGS += -fpack-struct
+CFLAGS += -fshort-enums
+CFLAGS += -fno-strict-aliasing
+CFLAGS += -Wall
+CFLAGS += -Wstrict-prototypes
+#CFLAGS += -mshort-calls
+#CFLAGS += -fno-unit-at-a-time
+#CFLAGS += -Wundef
+#CFLAGS += -Wunreachable-code
+#CFLAGS += -Wsign-compare
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Compiler Options C++ ----------------
+# -g*: generate debugging information
+# -O*: optimization level
+# -f...: tuning, see GCC manual and avr-libc documentation
+# -Wall...: warning level
+# -Wa,...: tell GCC to pass this to the assembler.
+# -adhlns...: create assembler listing
+CPPFLAGS = -g$(DEBUG)
+CPPFLAGS += $(CPPDEFS)
+CPPFLAGS += -O$(OPT)
+CPPFLAGS += -funsigned-char
+CPPFLAGS += -funsigned-bitfields
+CPPFLAGS += -fpack-struct
+CPPFLAGS += -fshort-enums
+CPPFLAGS += -fno-exceptions
+CPPFLAGS += -Wall
+CPPFLAGS += -Wundef
+#CPPFLAGS += -mshort-calls
+#CPPFLAGS += -fno-unit-at-a-time
+#CPPFLAGS += -Wstrict-prototypes
+#CPPFLAGS += -Wunreachable-code
+#CPPFLAGS += -Wsign-compare
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+#CPPFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+# -Wa,...: tell GCC to pass this to the assembler.
+# -adhlns: create listing
+# -gstabs: have the assembler create line number information; note that
+# for use in COFF files, additional information about filenames
+# and function names needs to be present in the assembler source
+# files -- see avr-libc docs [FIXME: not yet described there]
+# -listing-cont-lines: Sets the maximum number of continuation lines of hex
+# dump that will be displayed for a given single line of source input.
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+# List any extra directories to look for libraries here.
+# Each directory must be seperated by a space.
+# Use forward slashes for directory separators.
+# For a directory that has spaces, enclose it in quotes.
+EXTRALIBDIRS =
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+# -Wl,...: tell GCC to pass this to linker.
+# -Map: create map file
+# --cref: add cross reference to map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += -Wl,--relax
+LDFLAGS += -Wl,--gc-sections
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+#LDFLAGS += -T linker_script.x
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = jtagmkII
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = usb
+
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level. Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+# just set to localhost unless doing some sort of crazy debugging when
+# avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+AR = avr-ar rcs
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = -------- end --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling C:
+MSG_COMPILING_CPP = Compiling C++:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+MSG_CREATING_LIBRARY = Creating library:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
+
+# Define all listing files.
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+# Change the build target to build a HEX file or a library.
+build: elf hex eep lss sym
+#build: lib
+
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+LIBNAME=lib$(TARGET).a
+lib: $(LIBNAME)
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+ @echo
+ @echo $(MSG_BEGIN)
+
+end:
+ @echo $(MSG_END)
+ @echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf
+MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )
+FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )
+
+
+sizebefore:
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+ 2>/dev/null; echo; fi
+
+sizeafter:
+ @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+ 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+ @$(CC) --version
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+flip: $(TARGET).hex
+ batchisp -hardware usb -device $(MCU) -operation erase f
+ batchisp -hardware usb -device $(MCU) -operation loadbuffer $(TARGET).hex program
+ batchisp -hardware usb -device $(MCU) -operation start reset 0
+
+dfu: $(TARGET).hex
+ dfu-programmer $(MCU) erase
+ dfu-programmer $(MCU) flash $(TARGET).hex
+ dfu-programmer $(MCU) reset
+
+flip-ee: $(TARGET).hex $(TARGET).eep
+ $(COPY) $(TARGET).eep $(TARGET)eep.hex
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase
+ batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(TARGET)eep.hex program
+ batchisp -hardware usb -device $(MCU) -operation start reset 0
+ $(REMOVE) $(TARGET)eep.hex
+
+dfu-ee: $(TARGET).hex $(TARGET).eep
+ dfu-programmer $(MCU) eeprom-flash $(TARGET).eep
+ dfu-programmer $(MCU) reset
+
+
+# Generate avr-gdb config/init file which does the following:
+# define the reset signal, load the target file, connect to target, and set
+# a breakpoint at main().
+gdb-config:
+ @$(REMOVE) $(GDBINIT_FILE)
+ @echo define reset >> $(GDBINIT_FILE)
+ @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+ @echo end >> $(GDBINIT_FILE)
+ @echo file $(TARGET).elf >> $(GDBINIT_FILE)
+ @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+ @echo load >> $(GDBINIT_FILE)
+endif
+ @echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+ @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+ @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+ $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+ @$(WINSHELL) /c pause
+
+else
+ @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+ $(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+ @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT = $(OBJCOPY) --debugging
+COFFCONVERT += --change-section-address .data-0x800000
+COFFCONVERT += --change-section-address .bss-0x800000
+COFFCONVERT += --change-section-address .noinit-0x800000
+COFFCONVERT += --change-section-address .eeprom-0x810000
+
+
+
+coff: $(TARGET).elf
+ @echo
+ @echo $(MSG_COFF) $(TARGET).cof
+ $(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+ @echo
+ @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+ $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+ @echo
+ @echo $(MSG_FLASH) $@
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@
+
+%.eep: %.elf
+ @echo
+ @echo $(MSG_EEPROM) $@
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+ --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+ @echo
+ @echo $(MSG_EXTENDED_LISTING) $@
+ $(OBJDUMP) -h -S -z $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+ @echo
+ @echo $(MSG_SYMBOL_TABLE) $@
+ $(NM) -n $< > $@
+
+
+
+# Create library from object files.
+.SECONDARY : $(TARGET).a
+.PRECIOUS : $(OBJ)
+%.a: $(OBJ)
+ @echo
+ @echo $(MSG_CREATING_LIBRARY) $@
+ $(AR) $@ $(OBJ)
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+ @echo
+ @echo $(MSG_LINKING) $@
+ $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+$(OBJDIR)/%.o : %.c
+ @echo
+ @echo $(MSG_COMPILING) $<
+ $(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create object files from C++ source files.
+$(OBJDIR)/%.o : %.cpp
+ @echo
+ @echo $(MSG_COMPILING_CPP) $<
+ $(CC) -c $(ALL_CPPFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+ $(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C++ source files.
+%.s : %.cpp
+ $(CC) -S $(ALL_CPPFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+$(OBJDIR)/%.o : %.S
+ @echo
+ @echo $(MSG_ASSEMBLING) $<
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+ $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+ @echo
+ @echo $(MSG_CLEANING)
+ $(REMOVE) $(TARGET).hex
+ $(REMOVE) $(TARGET).eep
+ $(REMOVE) $(TARGET).cof
+ $(REMOVE) $(TARGET).elf
+ $(REMOVE) $(TARGET).map
+ $(REMOVE) $(TARGET).sym
+ $(REMOVE) $(TARGET).lss
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
+ $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
+ $(REMOVE) $(SRC:.c=.s)
+ $(REMOVE) $(SRC:.c=.d)
+ $(REMOVE) $(SRC:.c=.i)
+ $(REMOVEDIR) .dep
+
+doxygen:
+ @echo Generating Project Documentation...
+ @doxygen Doxygen.conf
+ @echo Documentation Generation Complete.
+
+clean_doxygen:
+ rm -rf Documentation
+
+# Create object files directory
+$(shell mkdir $(OBJDIR) 2>/dev/null)
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff doxygen clean \
+clean_list clean_doxygen program dfu flip flip-ee dfu-ee \
+debug gdb-config
+
|