From 550252231865e5dc6d56d7c33761cb884e18da13 Mon Sep 17 00:00:00 2001 From: Michael Wiebusch Date: Thu, 11 Dec 2014 10:28:43 +0100 Subject: [PATCH] started modifying the code for the coral table --- .gitignore | 10 + firmware/Descriptors.d | 270 -- firmware/Descriptors.o | Bin 11468 -> 0 bytes firmware/TM1001A.c | 8 +- firmware/TM1001A.c~ | 360 -- firmware/USBtoSerial.c | 30 +- firmware/USBtoSerial.c~ | 704 ---- firmware/USBtoSerial.d | 312 -- firmware/USBtoSerial.eep | 1 - firmware/USBtoSerial.elf | Bin 159646 -> 0 bytes firmware/USBtoSerial.hex | 512 --- firmware/USBtoSerial.lss | 7045 -------------------------------------- firmware/USBtoSerial.map | 1860 ---------- firmware/USBtoSerial.o | Bin 64748 -> 0 bytes firmware/USBtoSerial.sym | 408 --- firmware/leds.c | 6 +- firmware/leds.c~ | 45 - firmware/makefile | 2 +- firmware/makefile~ | 44 - firmware/pins.h | 77 +- firmware/pins.h~ | 45 - firmware/rfm70.c | 533 --- firmware/rfm70.h | 172 - 23 files changed, 88 insertions(+), 12356 deletions(-) create mode 100644 .gitignore delete mode 100644 firmware/Descriptors.d delete mode 100644 firmware/Descriptors.o delete mode 100644 firmware/TM1001A.c~ delete mode 100644 firmware/USBtoSerial.c~ delete mode 100644 firmware/USBtoSerial.d delete mode 100644 firmware/USBtoSerial.eep delete mode 100755 firmware/USBtoSerial.elf delete mode 100644 firmware/USBtoSerial.hex delete mode 100644 firmware/USBtoSerial.lss delete mode 100644 firmware/USBtoSerial.map delete mode 100644 firmware/USBtoSerial.o delete mode 100644 firmware/USBtoSerial.sym delete mode 100644 firmware/leds.c~ delete mode 100644 firmware/makefile~ delete mode 100644 firmware/pins.h~ delete mode 100644 firmware/rfm70.c delete mode 100644 firmware/rfm70.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..280e909 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.eep +*.elf +*.hex +*.sym +*.a +*.map +*.lss +*.o +*~ +*.d diff --git a/firmware/Descriptors.d b/firmware/Descriptors.d deleted file mode 100644 index 6168db3..0000000 --- a/firmware/Descriptors.d +++ /dev/null @@ -1,270 +0,0 @@ -Descriptors.o: Descriptors.c Descriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/USB.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/Architectures.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/BoardTypes.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/ArchitectureSpecific.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/CompilerSpecific.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/Attributes.h \ - Config/LUFAConfig.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/Endianness.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBTask.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBController.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/USBInterrupt_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBController.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Device.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Endpoint_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBTask.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBInterrupt.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Device_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Endpoint.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../DeviceStandardReq.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdRequestType.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBController.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../EndpointStream.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/EndpointStream_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/StdRequestType.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/ConfigDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/HostStandardReq.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBController.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBInterrupt.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/Device.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/Endpoint.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/EndpointStream.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/AndroidAccessoryClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/../Core/USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/AudioClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/AudioClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../../USB.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../Core/StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/CDCClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/CDCClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/HIDClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/HIDClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDParser.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDReportData.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/MassStorageClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MassStorageClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/MIDIClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MIDIClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/PrinterClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/RNDISClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/RNDISClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/StillImageClass.h - -Descriptors.h: - -../../LUFA/../LUFA/Drivers/USB/USB.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/Architectures.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/BoardTypes.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/ArchitectureSpecific.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/CompilerSpecific.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/Attributes.h: - -Config/LUFAConfig.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/Endianness.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBTask.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBController.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/USBInterrupt_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBController.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Device.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Endpoint_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBTask.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBInterrupt.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Device_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Endpoint.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../DeviceStandardReq.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdRequestType.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBController.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../EndpointStream.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/EndpointStream_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/StdRequestType.h: - -../../LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h: - -../../LUFA/../LUFA/Drivers/USB/Core/Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/ConfigDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/HostStandardReq.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBController.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBInterrupt.h: - -../../LUFA/../LUFA/Drivers/USB/Core/Device.h: - -../../LUFA/../LUFA/Drivers/USB/Core/Endpoint.h: - -../../LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h: - -../../LUFA/../LUFA/Drivers/USB/Core/EndpointStream.h: - -../../LUFA/../LUFA/Drivers/USB/Class/AndroidAccessoryClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/../Core/USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Class/AudioClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/AudioClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../../USB.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../Core/StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Class/CDCClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/CDCClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/HIDClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/HIDClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDParser.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDReportData.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/MassStorageClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MassStorageClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/MIDIClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MIDIClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/PrinterClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/RNDISClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/RNDISClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/StillImageClass.h: diff --git a/firmware/Descriptors.o b/firmware/Descriptors.o deleted file mode 100644 index c3235c83ff40c3d0e6b3030a9fdd584d0ce64289..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11468 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 diff --git a/firmware/TM1001A.c b/firmware/TM1001A.c index f3819a7..7250b69 100644 --- a/firmware/TM1001A.c +++ b/firmware/TM1001A.c @@ -15,10 +15,10 @@ // define here the port and the pin where you cave connected // the ADB (I/O) line from your TM1001A touchpad -#define ADB_BIT (1<<0) -#define ADB_PIN PIND -#define ADB_POUT PORTD -#define ADB_PDIR DDRD +#define ADB_BIT (1<<1) +#define ADB_PIN PINB +#define ADB_POUT PORTB +#define ADB_PDIR DDRB // when touchpad is in keypad mode the next two defines set the number // of rows and columns of the diff --git a/firmware/TM1001A.c~ b/firmware/TM1001A.c~ deleted file mode 100644 index 504e1f2..0000000 --- a/firmware/TM1001A.c~ +++ /dev/null @@ -1,360 +0,0 @@ -// This code is based on the work of Frank H. (franky1969) from the -// Mikrocontroller.net forum. -// I modified the code thusly that it runs on an ATMega8 with more than 8 MHz -// (make use of the counter 0 overflow interrupt to count to numbers greater -// than 255) and added a set of functions that make your life easy, -// i.e. spare you the work of crawling through the ADB register documentation yourself. -// -// You cannot use counter 0 for any other thing when using the touchpad! -// -// Have fun! - Michael W. (acidbourbon) -// -// acidbourbon.wordpress.com -// June 2013 - - -// define here the port and the pin where you cave connected -// the ADB (I/O) line from your TM1001A touchpad -#define ADB_BIT (1<<0) -#define ADB_PIN PINB -#define ADB_POUT PORTB -#define ADB_PDIR DDRB - -// when touchpad is in keypad mode the next two defines set the number -// of rows and columns of the -#define PAD_ROWS 2 -#define PAD_COLS 3 - - - - - - - - - - - -#define TAKT F_CPU - -//Bits Makro -#define BITS(H,L) (0b##H ##L) - -#define MIN_ABS_X 150 -#define MAX_ABS_X 1450 -#define MIN_ABS_Y 210 -#define MAX_ABS_Y 1130 - -#define PAD_WIDTH (MAX_ABS_X-MIN_ABS_X) -#define PAD_HEIGHT (MAX_ABS_Y-MIN_ABS_Y) -#define PAD_COL_WIDTH (PAD_WIDTH/PAD_COLS) -#define PAD_ROW_HEIGHT (PAD_HEIGHT/PAD_ROWS) - -//Vorteiler Timer 0 und 1 bei 2313, 8515, Mega8 (nicht Timer 2) -#define TIMER_VT_1_B BITS(0000,0001) -#define TIMER_VT_8_B BITS(0000,0010) -#define TIMER_VT_64_B BITS(0000,0011) -#define TIMER_VT_256_B BITS(0000,0100) -#define TIMER_VT_1024_B BITS(0000,0101) - -#define TIMER_VT_1 1 -#define TIMER_VT_8 8 -#define TIMER_VT_64 64 -#define TIMER_VT_256 256 -#define TIMER_VT_1024 1024 - - - -typedef unsigned char u08; -typedef unsigned short int u16; - -#define COM_TALK0 BITS(0011,1100) //Adresse 3, Talk, Register0 -#define COM_TALK1 BITS(0011,1101) //Adresse 3, Talk, Register1 -#define COM_LISTEN1 BITS(0011,1001) //Adresse 3, Listen, Register1 -#define COM_TALK2 BITS(0011,1110) //Adresse 3, Talk, Register2 -#define COM_TALK3 BITS(0011,1111) //Adresse 3, Talk, Register3 -#define COM_LISTEN3 BITS(0011,1011) //Adresse 3, Listen, Register3 -#define MAX_ADB 9 -u08 adb_werte[MAX_ADB]; -u08 t0ovfcount; -volatile u08 adb_data_length; - - -ISR( TIMER0_OVF_vect) { - t0ovfcount++; -} - -uint16_t t0ext(void) { - return (t0ovfcount * 256 + (u16) TCNT0); // return current counter value - // plus number of already passed counter cycles times 256 -} - -void t0rst(void) { - TCNT0 = 0; // set counter to zero - t0ovfcount = 0; // set overflow counter to zero - -} - - - -// ADB Register auslesen / schreiben -// Rückgabe Anzahl der Empfangenen Daten -// Befehl in adb_werte[0]. Empfangene bzw. zu sendende Daten in adb_werte[1 bis 8] - - - - -u08 adb(void) { - u08 bitpos; - u08 z_byte; - u08 anzahl_out; - //Teilerwerte TC0 -#define ADB_VORTEILER_A TIMER_VT_64 -#define ADB_VORTEILER_A_BIT TIMER_VT_64_B -#define ADB_VORTEILER_B TIMER_VT_8 -#define ADB_VORTEILER_B_BIT TIMER_VT_8_B -#define ADB_IMPULS_LANG TAKT/ADB_VORTEILER_B*65/1000000 //97 -#define ADB_IMPULS_KURZ TAKT/ADB_VORTEILER_B*35/1000000 //52 -#define ADB_IMPULS_ATT TAKT/ADB_VORTEILER_A*570/1000000 // 106 - //#define ADB_IMPULS_SYNC TAKT/ADB_VORTEILER_B*70/1000000 -#define ADB_IMPULS_TLT TAKT/ADB_VORTEILER_B*250/1000000 // !!! 375 mach das mit anderem prescaler -// #define ADB_IMPULS_TLT TAKT/ADB_VORTEILER_A*31/1000000 // modified - //#define ADB_IMPULS_PAUSE TAKT/ADB_VORTEILER_B*200/1000000 - - //Attention Signal - TCCR0B = ADB_VORTEILER_A_BIT; - t0rst(); // TCNT0 = 0; // Zähler auf null setzen - ADB_PDIR |= ADB_BIT; // Ausgang 0 - ADB_POUT &= ~ADB_BIT; - while (t0ext() < ADB_IMPULS_ATT) - ; // Warteschleife - - TCCR0B = ADB_VORTEILER_B_BIT; // ab hier alles im schnellen modus - - anzahl_out = 1; // Mindestens Befehl übertragen - z_byte = 0; - do { - // START BIT (1) - t0rst(); // TCNT0 = 0; - ADB_PDIR |= ADB_BIT; // Ausgang 0 - ADB_POUT &= ~ADB_BIT; - while (t0ext() < ADB_IMPULS_KURZ) - ; - ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - ADB_POUT |= ADB_BIT; - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - ; - - for (; z_byte < anzahl_out; z_byte++) { - for (bitpos = 128; bitpos; bitpos >>= 1) { //Daten ausgeben - t0rst(); // TCNT0 = 0; - ADB_PDIR |= ADB_BIT; // Ausgang 0 - ADB_POUT &= ~ADB_BIT; - if (adb_werte[z_byte] & bitpos) - while (t0ext() < ADB_IMPULS_KURZ) - ; - else - while (t0ext() < ADB_IMPULS_LANG) - ; - ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - ADB_POUT |= ADB_BIT; - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - ; - } - } - // STOP BIT (0) - t0rst(); // TCNT0 = 0; - ADB_PDIR |= ADB_BIT; // Ausgang 0 - ADB_POUT &= ~ADB_BIT; - while (t0ext() < ADB_IMPULS_LANG) - ; - ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - ADB_POUT |= ADB_BIT; - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - ; - - // Entscheidung, ob noch weitere Daten übertragen werden - if (adb_werte[0] == COM_LISTEN3) - anzahl_out = 2 + 1; - else if (adb_werte[0] == COM_LISTEN1) - anzahl_out = 8 + 1; - else - z_byte = 8; - } while (z_byte < 2); - - // Warten auf Rückgabewerte sonst Abbruch - // TCCR0 = ADB_VORTEILER_A_BIT; // micha modifikation - t0rst(); // TCNT0 = 0; - - do { - if (t0ext() > ADB_IMPULS_TLT) { - return (0); - } - } while (ADB_PIN & ADB_BIT); - while (!(ADB_PIN & ADB_BIT)) - ; // Start Bit - - z_byte = 1; - while (z_byte < MAX_ADB) { - adb_werte[z_byte] = 0; - for (bitpos = 128; bitpos; bitpos >>= 1) { //Bits einlesen - //TCCR0 = ADB_VORTEILER_B_BIT; //micha modifikation - t0rst(); // TCNT0 = 0; - // Abbruch wenn keine weiteren Bytes übertragen werden. - do { - if (t0ext() > ADB_IMPULS_KURZ + ADB_IMPULS_LANG) { - return (z_byte - 1); - } - } while (ADB_PIN & ADB_BIT); - t0rst(); // TCNT0 = 0; - while (!(ADB_PIN & ADB_BIT)) - ; - if (t0ext() < (ADB_IMPULS_KURZ + ADB_IMPULS_LANG) / 2) - adb_werte[z_byte] += bitpos; - } - z_byte++; - } - return (z_byte - 1); -} - -void touchpad_init(void) { - // Eingänge - ADB_PDIR &= ~ADB_BIT; - - // Pull Up einschalten - ADB_POUT |= ADB_BIT; - - //enable timer0 interrupt - TIMSK0 |= (1 << TOIE0); -} - -uint8_t touchpad_read(void) { - adb_werte[0] = COM_TALK0; - adb_data_length = adb(); - return adb_data_length; -} - -void touchpad_set_abs_mode(void) { - // Auf Absolutmodus umschalten - adb_werte[0] = COM_LISTEN3; - adb_werte[1] = BITS(0110,0011); - adb_werte[2] = 4; //CDM Modus - adb(); - - adb_werte[0] = COM_TALK1; - adb(); // Werte holen - - adb_werte[0] = COM_LISTEN1; - adb_werte[7] = 0x00; //Absolutmodus - adb(); - _delay_ms(100); -} - -void touchpad_set_rel_mode_100dpi(void) { - // Auf Relativmodus umschalten - adb_werte[0] = COM_LISTEN3; - adb_werte[1] = BITS(0110,0011); - adb_werte[2] = 1; //default modus: 100 dpi mouse - adb(); - _delay_ms(100); - -} - -void touchpad_set_rel_mode_200dpi(void) { - // Auf Relativmodus umschalten - adb_werte[0] = COM_LISTEN3; - adb_werte[1] = BITS(0110,0011); - adb_werte[2] = 2; //200 dpi mouse - adb(); - _delay_ms(100); - -} - -uint8_t z_pressure(void) { - return ((adb_werte[5] & 0b01110000) >> 1) | (adb_werte[5] & 0b00000111); -} - -uint16_t x_abs(void) { - return ((adb_werte[4] & 0b111) << 10) | ((adb_werte[3] & 0b111) << 7) - | (adb_werte[2] & 0b01111111); -} - -uint16_t y_abs(void) { - return ((adb_werte[4] & 0b01110000) << 6) - | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); -} - -int8_t delta_y(void) { - if(adb_data_length ==0) { - return 0; - } - if (adb_werte[1] & 0b01000000) { - return -((128 - adb_werte[1]) & 0b00111111); - } else { - return adb_werte[1] & 0b00111111; - } -} - -int8_t delta_x(void) { - if(adb_data_length ==0) { - return 0; - } - if (adb_werte[2] & 0b01000000) { - return -((128 - adb_werte[2]) & 0b00111111); - } else { - return adb_werte[2] & 0b00111111; - } -} -/* -uint8_t touchpad_button_pressed(void){ - static uint8_t button_status=0; - - if(adb_data_length ==0) { - return button_status; - } - if(adb_werte[1]&0b10000000){ - button_status=1; - return 1; - }else{ - button_status=0; - return 0; - } - -} -*/ - -uint8_t decode_field(void) { - static uint8_t last_pressure = 0; - uint8_t pressure, i, j; - uint8_t return_val = 0; - static uint16_t x_mem, y_mem; - uint16_t x, y; - - pressure = z_pressure(); - x = x_abs(); - y = y_abs(); - - if (x) { - x_mem = x; - } else { - x = x_mem; - } - - if (y) { - y_mem = y; - } else { - y = y_mem; - } - - if ((pressure == 0) && (last_pressure > 0)) { - - i = (y - MIN_ABS_Y) / PAD_ROW_HEIGHT; - j = (x - MIN_ABS_X) / PAD_COL_WIDTH; - - return_val = i * PAD_COLS + j + 1; - - } - - last_pressure = pressure; - return return_val; -} diff --git a/firmware/USBtoSerial.c b/firmware/USBtoSerial.c index 51d2720..a334ba0 100644 --- a/firmware/USBtoSerial.c +++ b/firmware/USBtoSerial.c @@ -402,7 +402,8 @@ uint32_t times_ten_pow(uint8_t exponent) { return val; } -#define PHASE_DELAY_MS 10 +// #define PHASE_DELAY_MS 1 +#define PHASE_DELAY_US 0 uint8_t move_plate(int16_t dx, int16_t dy){ static int16_t todo_x,todo_y = 0; @@ -424,7 +425,7 @@ uint8_t move_plate(int16_t dx, int16_t dy){ } motor_step(Y,signum); todo_y -= signum; - _delay_ms(PHASE_DELAY_MS); + _delay_us(PHASE_DELAY_US); return returnval; // busy @@ -625,8 +626,8 @@ int main(void) { init_motors(); - init_leds(); - init_sw(); +// init_leds(); +// init_sw(); char dummy; @@ -661,9 +662,9 @@ int main(void) while (1) { - set_led0(sw0_state()); - set_led1(sw1_state()); - set_led2(sw2_state()); +// set_led0(sw0_state()); +// set_led1(sw1_state()); +// set_led2(sw2_state()); Usb2SerialTask(); // loopcounter++; @@ -672,10 +673,17 @@ int main(void) // } // loopcounter=0; parse_command(); // read data from virtual comport - touchpad_read(); // read data from touchpad - - dx = -delta_x();// returns the amount your finger has moved in x direction since last readout - dy = -delta_y();// returns the amount your finger has moved in y direction since last readout + touchpad_read(); // read data from touchpad +// if(sw0_state()){ // if left switch is active + dx = -4*delta_x();// returns the amount your finger has moved in x direction since last readout +// } else { +// dx = 0; +// } +// if(sw1_state()){ // if middle switch is active + dy = -4*delta_y();// returns the amount your finger has moved in y direction since last readout +// } else { +// dy = 0; +// } // increment/decrement some dummy variables with the diff --git a/firmware/USBtoSerial.c~ b/firmware/USBtoSerial.c~ deleted file mode 100644 index 13062d8..0000000 --- a/firmware/USBtoSerial.c~ +++ /dev/null @@ -1,704 +0,0 @@ -/* - LUFA Library - Copyright (C) Dean Camera, 2013. - - dean [at] fourwalledcubicle [dot] com - www.lufa-lib.org -*/ - -/* - Copyright 2013 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 disclaims 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 USBtoSerial project. This file contains the main tasks of - * the project and is responsible for the initial application hardware configuration. - */ -#define F_CPU 16e6 - -#include -#include -#include "USBtoSerial.h" -#include -#include "TM1001A.c" -// #include "rfm70.c" -#include "pins.h" -#include "leds.c" - -int16_t plate_pos_x = 0,plate_pos_y = 0; -char stringbuffer[16]; - -/** Circular buffer to hold data from the host before it is sent to the device via the serial port. */ -static RingBuffer_t USBtoUSART_Buffer; - -/** Underlying data buffer for \ref USBtoUSART_Buffer, where the stored bytes are located. */ -static uint8_t USBtoUSART_Buffer_Data[128]; - -/** Circular buffer to hold data from the serial port before it is sent to the host. */ -static RingBuffer_t USARTtoUSB_Buffer; - -/** Underlying data buffer for \ref USARTtoUSB_Buffer, where the stored bytes are located. */ -static uint8_t USARTtoUSB_Buffer_Data[128]; - -/** LUFA CDC Class driver interface configuration and state information. This structure is - * passed to all CDC Class driver functions, so that multiple instances of the same class - * within a device can be differentiated from one another. - */ -USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface = - { - .Config = - { - .ControlInterfaceNumber = 0, - .DataINEndpoint = - { - .Address = CDC_TX_EPADDR, - .Size = CDC_TXRX_EPSIZE, - .Banks = 1, - }, - .DataOUTEndpoint = - { - .Address = CDC_RX_EPADDR, - .Size = CDC_TXRX_EPSIZE, - .Banks = 1, - }, - .NotificationEndpoint = - { - .Address = CDC_NOTIFICATION_EPADDR, - .Size = CDC_NOTIFICATION_EPSIZE, - .Banks = 1, - }, - }, - }; - - - - - -void Usb2SerialTask(void) { - - /* Only try to read in bytes from the CDC interface if the transmit buffer is not full */ - if (!(RingBuffer_IsFull(&USBtoUSART_Buffer))) - { - int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); - - /* Read bytes from the USB OUT endpoint into the USART transmit buffer */ - if (!(ReceivedByte < 0)) - RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte); - } - - /* Check if the UART receive buffer flush timer has expired or the buffer is nearly full */ - uint16_t BufferCount = RingBuffer_GetCount(&USARTtoUSB_Buffer); - if (BufferCount) - { - Endpoint_SelectEndpoint(VirtualSerial_CDC_Interface.Config.DataINEndpoint.Address); - - /* Check if a packet is already enqueued to the host - if so, we shouldn't try to send more data - * until it completes as there is a chance nothing is listening and a lengthy timeout could occur */ - if (Endpoint_IsINReady()) - { - /* Never send more than one bank size less one byte to the host at a time, so that we don't block - * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ - uint8_t BytesToSend = MIN(BufferCount, (CDC_TXRX_EPSIZE - 1)); - - /* Read bytes from the USART receive buffer into the USB IN endpoint */ - while (BytesToSend--) - { - /* Try to send the next byte of data to the host, abort if there is an error without dequeuing */ - if (CDC_Device_SendByte(&VirtualSerial_CDC_Interface, - RingBuffer_Peek(&USARTtoUSB_Buffer)) != ENDPOINT_READYWAIT_NoError) - { - break; - } - - /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */ - RingBuffer_Remove(&USARTtoUSB_Buffer); - } - } - } - - /* Load the next byte from the USART transmit buffer into the USART */ -// if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) { -// Serial_SendByte(RingBuffer_Remove(&USBtoUSART_Buffer)); -// dummy = RingBuffer_Remove(&USBtoUSART_Buffer); -// sendPayload(&dummy,1,0); -// } - CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - 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 */ -// LEDs_Init(); - USB_Init(); -} - -/** Event handler for the library USB Connection event. */ -void EVENT_USB_Device_Connect(void) -{ -// LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); -} - -/** Event handler for the library USB Disconnection event. */ -void EVENT_USB_Device_Disconnect(void) -{ -// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); -} - -/** Event handler for the library USB Configuration Changed event. */ -void EVENT_USB_Device_ConfigurationChanged(void) -{ - bool ConfigSuccess = true; - - ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); - -// LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); -} - -/** Event handler for the library USB Control Request reception event. */ -void EVENT_USB_Device_ControlRequest(void) -{ - CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); -} - -/** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer - * for later transmission to the host. - */ -ISR(USART1_RX_vect, ISR_BLOCK) -{ - uint8_t ReceivedByte = UDR1; - - if (USB_DeviceState == DEVICE_STATE_Configured) - RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte); -} - -/** Event handler for the CDC Class driver Line Encoding Changed event. - * - * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced - */ -void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - uint8_t ConfigMask = 0; - - switch (CDCInterfaceInfo->State.LineEncoding.ParityType) - { - case CDC_PARITY_Odd: - ConfigMask = ((1 << UPM11) | (1 << UPM10)); - break; - case CDC_PARITY_Even: - ConfigMask = (1 << UPM11); - break; - } - - if (CDCInterfaceInfo->State.LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits) - ConfigMask |= (1 << USBS1); - - switch (CDCInterfaceInfo->State.LineEncoding.DataBits) - { - case 6: - ConfigMask |= (1 << UCSZ10); - break; - case 7: - ConfigMask |= (1 << UCSZ11); - break; - case 8: - ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10)); - break; - } - - /* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */ - UCSR1B = 0; - UCSR1A = 0; - UCSR1C = 0; - - /* Set the new baud rate before configuring the USART */ - UBRR1 = SERIAL_2X_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - - /* Reconfigure the USART in double speed mode for a wider baud rate range at the expense of accuracy */ - UCSR1C = ConfigMask; - UCSR1A = (1 << U2X1); - UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); -} - - - - -void uart_putc(unsigned char data) -{ - - if (USB_DeviceState == DEVICE_STATE_Configured){ - RingBuffer_Insert(&USARTtoUSB_Buffer, data); - } - -} - -void uart_puts(const char *s ) -{ - while (*s) - uart_putc(*s++); - -}/* uart_puts */ - - -// convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { - int8_t i; // schleifenzähler - - string[no_digits] = '\0'; // String Terminator - for (i = (no_digits - 1); i >= 0; i--) { - if (zahl == 0 && i < (no_digits - 1)) { - string[i] = leading_char; - } else { - string[i] = (zahl % 10) + '0'; - } // Modulo rechnen, dann den ASCII-Code von '0' addieren - zahl /= 10; - } - -} - -int8_t sign(int16_t x) { - return (x > 0) - (x < 0); -} - - -void uart_print_number(uint32_t zahl, uint8_t no_digits) { - my_uitoa(abs(zahl),stringbuffer,no_digits,' '); - uart_puts(stringbuffer); -} - - -void uart_print_number_wlzeros(uint32_t zahl, uint8_t no_digits) { - my_uitoa(abs(zahl),stringbuffer,no_digits,'0'); - uart_puts(stringbuffer); -} - -void uart_print_signed_number(uint32_t zahl, uint8_t no_digits) { - my_uitoa(abs(zahl),stringbuffer,no_digits,' '); - if (sign(zahl) < 0) { - uart_putc('-'); - } else { - uart_putc('+'); - } - uart_puts(stringbuffer); - -} - - -/** Main program entry point. This routine contains the overall program flow, including initial - * setup of all components and the main program loop. - */ - -/* motor stuff */ - -uint8_t phase_pattern[4] = { 0b00001010, 0b00001001, 0b00000101, 0b00000110}; - - -void set_x(uint8_t byte) { - PORTX0 &= ~(1<>0)<>1)<>2)<>3)<>0)<>1)<>2)<>3)<= 48 && cmdbuffer[i] <= 57 ){ // is it a number? - if ( num_start == 0) { // this is the first digit in the string - num_start = i; - } - } else { // no digit! - if ( num_start != 0) { // digits have been found before - strncpy(numbuffer,cmdbuffer+num_start,i-num_start); // copy number found to - // numbuffer - numbuffer[i-num_start] = '\0'; // make sure it's always a terminated string - nums_found++; - if(nums_found == 1) { // its the predot digits - predot = atoi(numbuffer); - } else { // its the postdot digits - uint8_t postdotlen = i-num_start; - if (postdotlen < 3){ // if too small ,fill with zeros - for( uint8_t j = postdotlen; j <=2; j++) { - numbuffer[j] = '0'; - } - } - // crop the number to three post dot digits - numbuffer[3] = '\0'; - - postdot = atoi(numbuffer); - } - num_start = 0; - } - } - } - - } - - int16_t steps = 0,dest=0; - - switch (action) { - case GOTO: - uart_puts("GOTO "); - uart_putc(88+axis);// x or y - uart_putc(' '); - uart_print_signed_number(predot*num_sign,3); - uart_putc('.'); - uart_print_number_wlzeros(postdot,3); - uart_puts("\r\n"); - - dest = num_sign *( predot*24 +(postdot*10)/416); - - if (axis == X) { - steps = dest - plate_pos_x; // experimental correction! - move_plate(steps,0); - plate_pos_x += steps; - } else if (axis == Y) { - steps = dest - plate_pos_y; - move_plate(0,steps); - plate_pos_y += steps; - } - pos_report(); - - break; - case MOVEREL: - uart_puts("MOVE "); - uart_putc(88+axis);// x or y - uart_putc(' '); - uart_print_signed_number(predot*num_sign,3); - uart_putc('.'); - uart_print_number_wlzeros(postdot,3); - uart_puts("\r\n"); - - steps = num_sign *( predot*24 +(postdot*10)/416); - - if (axis == X) { - move_plate(steps,0); - plate_pos_x += steps; - } else if (axis == Y) { - move_plate(0,steps); - plate_pos_y += steps; - } - pos_report(); - break; - - case SETZERO: - plate_pos_x = 0; - plate_pos_y = 0; - pos_report(); - break; - - case POSITION: - pos_report(); - break; - - } - - - - } else { // queue command - if( cmdPos == 0 ){ - uart_puts("\r\n$ "); - } - - if( byte == 8 ){ // backspace - cmdPos--; - } else { - cmdbuffer[cmdPos++] = byte; - } - uart_putc(byte); - - - } - } -} - -int main(void) -{ - - init_motors(); -// init_leds(); - - - char dummy; - uint8_t field_val = 0; - SetupHardware(); - - - - RingBuffer_InitBuffer(&USBtoUSART_Buffer, USBtoUSART_Buffer_Data, sizeof(USBtoUSART_Buffer_Data)); - RingBuffer_InitBuffer(&USARTtoUSB_Buffer, USARTtoUSB_Buffer_Data, sizeof(USARTtoUSB_Buffer_Data)); - -// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - GlobalInterruptEnable(); - - touchpad_init(); // you need to call this to setup the I/O pin! - _delay_ms(500); - sei(); - - - - - uint16_t loopcounter=0; - - - -// uart_puts("you selected the relative position demo modus:\n\r"); - touchpad_set_rel_mode_100dpi();// use touchpad in relative mode -// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution - int16_t x, y = 0; - int8_t dx, dy = 0; - uint8_t busy = 0, last_busy = 0; - - while (1) { - - set_led0(sw0_state()); - set_led1(sw1_state()); - set_led2(sw2_state()); - - Usb2SerialTask(); -// loopcounter++; -// if(loopcounter<2000) { -// continue; -// } -// loopcounter=0; - parse_command(); // read data from virtual comport - touchpad_read(); // read data from touchpad - - dx = -delta_x();// returns the amount your finger has moved in x direction since last readout - dy = -delta_y();// returns the amount your finger has moved in y direction since last readout - - // increment/decrement some dummy variables with the - - plate_pos_x += dx; - plate_pos_y += dy; - - - last_busy = busy; - busy = move_plate(dx,dy); - - - if (last_busy && !(busy)){ - pos_report(); - } - - - } - // end of relative mode demo block - -// #endif - - - - - - -} // end of main \ No newline at end of file diff --git a/firmware/USBtoSerial.d b/firmware/USBtoSerial.d deleted file mode 100644 index c71da10..0000000 --- a/firmware/USBtoSerial.d +++ /dev/null @@ -1,312 +0,0 @@ -USBtoSerial.o: USBtoSerial.c USBtoSerial.h Descriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/USB.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/Architectures.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/BoardTypes.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/ArchitectureSpecific.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/CompilerSpecific.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/Attributes.h \ - Config/LUFAConfig.h \ - ../../LUFA/../LUFA/Drivers/USB/../../Common/Endianness.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBTask.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBController.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/USBInterrupt_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBController.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Device.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Endpoint_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBTask.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBInterrupt.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Device_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Endpoint.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../DeviceStandardReq.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdRequestType.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBController.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../EndpointStream.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/EndpointStream_AVR8.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/StdRequestType.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/Events.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/ConfigDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/HostStandardReq.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBController.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/USBInterrupt.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/Device.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/Endpoint.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h \ - ../../LUFA/../LUFA/Drivers/USB/Core/EndpointStream.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/AndroidAccessoryClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/../Core/USBMode.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/AudioClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/AudioClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../../USB.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../Core/StdDescriptors.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/CDCClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/CDCClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/HIDClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/HIDClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDParser.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDReportData.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/MassStorageClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MassStorageClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/MIDIClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MIDIClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/PrinterClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/RNDISClass.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/RNDISClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h \ - ../../LUFA/../LUFA/Drivers/USB/Class/StillImageClass.h \ - ../../LUFA/../LUFA/Drivers/Board/LEDs.h \ - ../../LUFA/../LUFA/Drivers/Board/../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/Board/AVR8/USBKEY/LEDs.h \ - ../../LUFA/../LUFA/Drivers/Board/AVR8/USBKEY/../../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/Peripheral/Serial.h \ - ../../LUFA/../LUFA/Drivers/Peripheral/../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.h \ - ../../LUFA/../LUFA/Drivers/Peripheral/AVR8/../../../Common/Common.h \ - ../../LUFA/../LUFA/Drivers/Peripheral/AVR8/../../Misc/TerminalCodes.h \ - ../../LUFA/../LUFA/Drivers/Misc/RingBuffer.h \ - ../../LUFA/../LUFA/Drivers/Misc/../../Common/Common.h TM1001A.c pins.h \ - leds.c - -USBtoSerial.h: - -Descriptors.h: - -../../LUFA/../LUFA/Drivers/USB/USB.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/Architectures.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/BoardTypes.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/ArchitectureSpecific.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/CompilerSpecific.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/Attributes.h: - -Config/LUFAConfig.h: - -../../LUFA/../LUFA/Drivers/USB/../../Common/Endianness.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBTask.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBController.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/USBInterrupt_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBController.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Device.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Endpoint_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBTask.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBInterrupt.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Device_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Endpoint.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../DeviceStandardReq.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdRequestType.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBController.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../EndpointStream.h: - -../../LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/EndpointStream_AVR8.h: - -../../LUFA/../LUFA/Drivers/USB/Core/Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/StdRequestType.h: - -../../LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h: - -../../LUFA/../LUFA/Drivers/USB/Core/Events.h: - -../../LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/ConfigDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Core/HostStandardReq.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBController.h: - -../../LUFA/../LUFA/Drivers/USB/Core/USBInterrupt.h: - -../../LUFA/../LUFA/Drivers/USB/Core/Device.h: - -../../LUFA/../LUFA/Drivers/USB/Core/Endpoint.h: - -../../LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h: - -../../LUFA/../LUFA/Drivers/USB/Core/EndpointStream.h: - -../../LUFA/../LUFA/Drivers/USB/Class/AndroidAccessoryClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/../Core/USBMode.h: - -../../LUFA/../LUFA/Drivers/USB/Class/AudioClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/AudioClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../../USB.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../Core/StdDescriptors.h: - -../../LUFA/../LUFA/Drivers/USB/Class/CDCClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/CDCClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/HIDClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/HIDClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDParser.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDReportData.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/MassStorageClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MassStorageClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/MIDIClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MIDIClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/PrinterClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/RNDISClass.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/RNDISClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h: - -../../LUFA/../LUFA/Drivers/USB/Class/StillImageClass.h: - -../../LUFA/../LUFA/Drivers/Board/LEDs.h: - -../../LUFA/../LUFA/Drivers/Board/../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/Board/AVR8/USBKEY/LEDs.h: - -../../LUFA/../LUFA/Drivers/Board/AVR8/USBKEY/../../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/Peripheral/Serial.h: - -../../LUFA/../LUFA/Drivers/Peripheral/../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.h: - -../../LUFA/../LUFA/Drivers/Peripheral/AVR8/../../../Common/Common.h: - -../../LUFA/../LUFA/Drivers/Peripheral/AVR8/../../Misc/TerminalCodes.h: - -../../LUFA/../LUFA/Drivers/Misc/RingBuffer.h: - -../../LUFA/../LUFA/Drivers/Misc/../../Common/Common.h: - -TM1001A.c: - -pins.h: - -leds.c: diff --git a/firmware/USBtoSerial.eep b/firmware/USBtoSerial.eep deleted file mode 100644 index 1996e8f..0000000 --- a/firmware/USBtoSerial.eep +++ /dev/null @@ -1 +0,0 @@ -:00000001FF diff --git a/firmware/USBtoSerial.elf b/firmware/USBtoSerial.elf deleted file mode 100755 index 1efaec76d80f86e1b55e69285ae1be5ce8db81fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159646 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

uVrs%k=E`zjiW_R?D!jNVyN`z?LD> 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 J`>q~s|34)=yJ!Fa diff --git a/firmware/USBtoSerial.hex b/firmware/USBtoSerial.hex deleted file mode 100644 index 1c1e020..0000000 --- a/firmware/USBtoSerial.hex +++ /dev/null @@ -1,512 +0,0 @@ -:100000009AC00000B4C00000B2C00000B0C0000040 -:10001000AEC00000ACC00000AAC00000A8C0000034 -:10002000A6C00000A4C00000A2C000000C94B70944 -:100030000C945B0A9CC000009AC0000098C00000AD -:1000400096C0000094C0000092C0000090C0000064 -:100050008EC000004BC100008AC0000069C30000D0 -:1000600086C0000084C0000082C0000080C0000084 -:100070007EC000007CC000007AC0000078C0000094 -:1000800076C0000074C0000072C0000070C00000A4 -:100090006EC000006CC000001201100102000008D8 -:1000A000EB034B2001000102DC0109023E000201CA -:1000B00000C0320904000001020201000524001002 -:1000C0000104240206052406000107058203080036 -:1000D000FF09040100020A000000070504021000E5 -:1000E00005070583021000050403090418034400F2 -:1000F000650061006E002000430061006D00650036 -:100100007200610000002E034C00550046004100C3 -:1001100020005500530042002D00520053003200D1 -:100120003300320020004100640061007000740060 -:1001300065007200000011241FBECFEFD4E0DEBFC7 -:10014000CDBF11E0A0E0B1E0E4E9FFE102C005901D -:100150000D92AE34B107D9F712E0AEE4B1E001C0C0 -:100160001D92A43DB107E1F7B3D60C94C80F48CF58 -:10017000FC01A081B1816C93808191810196918372 -:100180008083268137818217930721F484819581AA -:10019000918380832FB7F894828593850196938706 -:1001A00082872FBF0895FC01A281B3818D91B38313 -:1001B000A28326813781A217B30721F424813581D8 -:1001C000338322839FB7F8942285338521503040B2 -:1001D000338722879FBF08952A982B982C982D98B3 -:1001E00045B190E09C0121703070220F331F220F27 -:1001F000331F422B45B945B19C01227030703595B3 -:10020000279573E0220F331F7A95E1F7422B45B90A -:1002100045B19C012470307035952795359527950B -:1002200054E0220F331F5A95E1F7422B45B925B10F -:100230008870907043E0959587954A95E1F735E091 -:10024000880F991F3A95E1F7282B25B908952F9823 -:100250002E984798469845B190E09C013695322FEC -:10026000222737952795422B45B945B19C0122702D -:1002700030703595279576E0220F331F7A95E1F798 -:10028000422B45B948B19C012470307035952795B3 -:10029000359527953695322F222737952795422B6E -:1002A00048B928B188709070B3E095958795BA9554 -:1002B000E1F7A6E0880F991FAA95E1F7282B28B946 -:1002C0000895FC012FB7F894718360837383628370 -:1002D0007583648360587F4F7783668380E890E0FE -:1002E00091878087138612862FBF08951F920F92E1 -:1002F0000FB60F9211248F938091C6028F5F809367 -:10030000C6028F910F900FBE0F901F90189586B563 -:100310003091C60220E0280F311DC901089516BC96 -:100320001092C6020895DF92EF92FF920F931F93EF -:10033000CF93DF9383E085BDF2DF509A5898E7DFD3 -:10034000BC0180E090E00E94810E20E030E84EE0A9 -:1003500053E40E94E90D87FDF2CF82E085BDDD24E4 -:10036000D39410E0DCDF509A5898D1DFBC0180E0D4 -:1003700090E00E94810E20E030E04CE852E40E94C0 -:10038000E90D87FDF2CF5098589AC1DFBC0180E09B -:1003900090E00E94810E20E030E048E453E40E94A7 -:1003A000E90D87FDF2CF41C0C8E0D0E000E8E12EC2 -:1003B000FF248DEA92E0E80EF91EB1DF509A5898BA -:1003C000F7018081802379F0A2DFBC0180E090E01A -:1003D0000E94810E20E030E04CE852E40E94E90DDA -:1003E00087FDF2CF0EC093DFBC0180E090E00E9459 -:1003F000810E20E030E042E053E40E94E90D87FDE9 -:10040000F2CF5098589A83DFBC0180E090E00E94C0 -:10041000810E20E030E048E453E40E94E90D87FDBE -:10042000F2CF0695219749F61F5F1D1508F4BCCF42 -:1004300076DF509A58986BDFBC0180E090E00E9414 -:10044000810E20E030E042E053E40E94E90D87FD98 -:10045000F2CF5098589A5BDFBC0180E090E00E9498 -:10046000810E20E030E048E453E40E94E90D87FD6E -:10047000F2CF8091AD028B3329F0893341F409E04A -:10048000D02E02C0B3E0DB2E113009F46BCF47DF72 -:100490003EDFBC0180E090E00E94810E20E030E071 -:1004A0004AEF53E40E94330F18160CF442C04899E7 -:1004B000EFCF489BFECFCEEAD2E011E001C0182F6B -:1004C0001882A8E0EA2EF12C00E829DF20DFBC0129 -:1004D00080E090E00E94810E20E030E048E453E4A8 -:1004E0000E94330F181614F4115024C04899EECF0F -:1004F00016DF489BFECF0BDFBC0180E090E00E943E -:10050000810E20E030E048EC52E40E94E90D87FFC4 -:1005100003C08881800F888306950894E108F1085C -:10052000E114F10491F6812F8F5F2196893039F61D -:1005300001C010E0812FDF91CF911F910F91FF90AB -:10054000EF90DF9008955098589AEEE6F0E08081A1 -:100550008160808308958CE38093AD02E4DE809314 -:10056000C7028091C70208958BE38093AD0283E6B2 -:100570008093AE0281E08093AF02D5DE8FEF91EEE3 -:10058000A4E081509040A040E1F700C00000089531 -:100590008091C702882351F08091AE0286FF04C08B -:1005A00081958F73819508958F73089580E00895E4 -:1005B0008091C702882351F08091AF0286FF04C06A -:1005C00081958F73819508958F73089580E00895C4 -:1005D000219A209A569A0895299825B190E0817021 -:1005E0009070880F991F282B25B90895289895B1E8 -:1005F0008170892B85B908955E982BB190E0817048 -:100600009070F6E0880F991FFA95E1F7282B2BB927 -:10061000089554983D983C985C9A459A449A089558 -:1006200089B190E080719070A4E095958795AA9526 -:10063000E1F7089586B190E080729070B5E09595ED -:100640008795BA95E1F7089586B190E08071907032 -:1006500024E0959587952A95E1F708951F938FB724 -:10066000F89420915C0130915D018FBF80915A0117 -:1006700090915B012817390751F088E291E00E94C0 -:10068000560DBC0197FD03C082E591E071DD2FB7E7 -:10069000F8948091E8019091E9012FBF009709F14A -:1006A000209129012F702093E9002091E80020FF7C -:1006B00018C08031910510F08FE090E0182F0FC026 -:1006C000E091E001F091E10188E291E060810E9417 -:1006D000E50C1150882329F48EED91E064DD11239F -:1006E00079F788E291E00E943F0D0E94F90B1F917B -:1006F000089584B7877F84BF88E10FB6F89480930C -:100700006000109260000FBE90E080E80FB6F89491 -:1007100080936100909361000FBE1AC608950895FA -:1007200088E291E00C94C10C88E291E00C94140CE6 -:100730001F920F920FB60F9211242F933F934F9356 -:100740005F936F937F938F939F93AF93BF93EF9339 -:10075000FF936091CE008EB3843019F48EED91E05A -:1007600007DDFF91EF91BF91AF919F918F917F91A5 -:100770006F915F914F913F912F910F900FBE0F900E -:100780001F9018958F929F92AF92BF92CF92DF9257 -:10079000EF92FF921F93FC01A18DA150A23028F48B -:1007A000B0E0A95BBE4F1C9101C010E0808D82308B -:1007B00009F41860828D873031F0883031F086304E -:1007C00029F4126003C0146001C016601092C900C1 -:1007D0001092C8001092CA00C488D588E688F788AD -:1007E000C701B60196958795779567950E94810E0A -:1007F00020E034E244EF59E40E94850D4B015C0196 -:10080000C701B6010E94810E9B01AC01C501B40174 -:100810000E94ED0D20E030E040E85FE30E94840D8F -:100820000E94550E7093CD006093CC001093CA00C7 -:1008300082E08093C80088E98093C9001F91FF90EF -:10084000EF90DF90CF90BF90AF909F908F900895E2 -:10085000682F8EB3843019F48EED91E089CC089521 -:10086000EF92FF92CF93DF93E82EE7017E01F92EFE -:10087000E70101C0EDDF89918823E1F7DF91CF9196 -:10088000FF90EF9008952F923F924F925F926F9258 -:100890007F928F929F92AF92BF92CF92DF92EF9210 -:1008A000FF920F931F93CF93DF936B017C01822FF5 -:1008B00090E0FA01E80FF91F1082122F1150412E1B -:1008C000552447FC5094EA01C40DD51DAA24BB242D -:1008D0004AE0642E712C812C912C1C010894210873 -:1008E000310822C0C114D104E104F10441F4C5016E -:1008F000840D951D8215930514F4088308C0C70163 -:10090000B601A40193010E94700F605D6883C70166 -:10091000B601A40193010E94700F69017A01115080 -:1009200021970894A108B10817FFDCCFDF91CF9180 -:100930001F910F91FF90EF90DF90CF90BF90AF90FD -:100940009F908F907F906F905F904F903F902F90EF -:10095000089521E0181619060CF020E0892F881F51 -:100960008827881F281B822F08950F93242F77FF35 -:1009700003C0709561957F4F882777FD8095982FEC -:1009800046EB52E000E37FDF86EB92E069DF0F91F8 -:100990000895FF920F931F93242FF62E172F77FFA2 -:1009A00003C0709561957F4F882777FD8095982FBC -:1009B00046EB52E000E267DF8F2D912FCADF87FF01 -:1009C00002C08DE201C08BE243DF86EB92E048DF9C -:1009D0001F910F91FF90089580E0FEDB80E037DCEF -:1009E000229A239A249A259A279A269A3F9A3E9ADF -:1009F00008950F931F93162F823050F4A82FB0E064 -:100A0000AA0FBB1FA75BBE4F2D913C91119702C04F -:100A10002CEE30E0E82FF0E0812F992787FD9095AC -:100A20000496EA55FD4F4081840F911D64E070E00B -:100A30000E945D0F8083E82FF0E0ED5BFE4F0081A8 -:100A4000112311F0802F01C080E0F9010995802F5A -:100A50001F910F9108950F931F932091A40230913D -:100A6000A502280F391F3093A5022093A40280917C -:100A7000A2029091A302860F971F9093A3028093E6 -:100A8000A202C90166DF082F11E0882309F410E0F3 -:100A900080E0602FAEDF602F772767FD7095209193 -:100AA000A4023091A502261B370B3093A502209398 -:100AB000A4028091A2029091A3024BDF082F811122 -:100AC0001F5F81E0602F95DF602F772767FD7095AE -:100AD0002091A2023091A302261B370B3093A30270 -:100AE0002093A2028FE39CE90197F1F700C0000078 -:100AF000812F1F910F9108950F931F938C0168E12F -:100B000070E00E945D0F882777FD8095982F43E065 -:100B100040DF8EE29DDEC80117FF03C090958195EE -:100B20009F4F68E170E00E945D0F61EA71E00E94F2 -:100B3000370F6AE070E00E945D0F882777FD80958F -:100B4000982F43E012DF1F910F91089580E091E00C -:100B500087DE80914E0190914F01CEDF88E091E0D9 -:100B60007FDE8091500190915101C6DF82E191E0DA -:100B700077CECF92DF92EF92FF920F931F93CF9396 -:100B8000DF932FB7F89480915C0190915D012FBFA6 -:100B9000009709F494C182E591E005DB182F8D30B0 -:100BA00019F08A3009F074C184E191E059DE809136 -:100BB0006D02E82FF0E0EE57FD4F108280936C023B -:100BC00010926D0280918202873659F0873449F085 -:100BD0008D3649F08D3439F08A3739F08A3539F459 -:100BE00004C001E005C002E003C003E001C000E072 -:100BF00080918302883739F0883529F0893729F0C8 -:100C000011E0893519F010E001C011E0802F81500A -:100C1000823008F06DC01092710210927002109232 -:100C20006F0210926E0210926B0210926A0272E0D2 -:100C3000F72EDD24D39460E3C62E54C0E0906B02FF -:100C4000EE2049F4EF2DF0E0EE57FD4F80818D321C -:100C500011F4DD24DA94CF2DD0E0FE01EE57FD4FE4 -:100C6000808180538A3028F4EE20D9F5F0926B020F -:100C700038C0EE20B1F16E2D70E0C61BD70B6E5759 -:100C80007D4F82E792E0AE010E94AF0FCE58DD4F5C -:100C9000188280916A028F5F80936A02813049F4E2 -:100CA00082E792E00E94920F90937102809370020B -:100CB00016C08F2D8E19833040F4E82FF0E0EE58E7 -:100CC000FD4FC0828F5F8330C1F71092750282E7BB -:100CD00092E00E94920F90936F0280936E021092A6 -:100CE0006B02F39480916C028F1508F0A7CF02C0BD -:100CF000DD24D394023009F461C0033009F4BEC08E -:100D0000013009F0C3C087E191E0AADD812F885A44 -:100D10009FDD80E29DDDCD2DDD27C7FDD095609163 -:100D2000700270917102CE010E94370FBC0180E009 -:100D300090E043E02EDE8EE28BDD60916E027091DA -:100D40006F0280E090E043E010DE84E191E088DD16 -:100D500080916E0290916F026AE070E00E94370FFE -:100D600060EA71E00E94490F9B01809170029091AE -:100D7000710268E170E00E94370F280F391FCE0121 -:100D8000B9010E94370F112369F420914E0130916F -:100D90004F01E82EE7017E01F92EE701C21BD30BBC -:100DA000CE014FC02091500130915101E82EE70152 -:100DB0007E01F92EE701C21BD30B51C08DE191E0FA -:100DC0004FDD812F885A44DD80E242DDCD2DDD27C5 -:100DD000C7FDD0956091700270917102CE010E94A2 -:100DE000370FBC0180E090E043E0D3DD8EE230DDE0 -:100DF00060916E0270916F0280E090E043E0B5DD9B -:100E000084E191E02DDD80916E0290916F026AE0A5 -:100E100070E00E94370F60EA71E00E94490F9B0169 -:100E2000809170029091710268E170E00E94370F2A -:100E3000280F391FCE01B9010E94370FEC01112391 -:100E400071F460E070E007DE80914E0190914F01F7 -:100E50008C0F9D1F90934F0180934E0117C080E02F -:100E600090E0BE01F8DD80915001909151018C0F0E -:100E70009D1F909351018093500108C010924F0123 -:100E800010924E0110925101109250015FDE17C076 -:100E900080916D02882319F483E291E0E1DC809176 -:100EA0006D02183011F4815006C0E82FF0E0EE57C3 -:100EB000FD4F10838F5F80936D02812FC9DCDF911E -:100EC000CF911F910F91FF90EF90DF90CF900895F9 -:100ED0000F931F93DF93CF930F92CDB7DEB77CDDD7 -:100EE00077DB97DB06DC82E591E06EE571E0E9D91E -:100EF0008EED91E06AEE71E0E4D9789424DB8FEF17 -:100F000099E6A8E181509040A040E1F700C00000C0 -:100F100078942ADB10E001C0182F82DB5DDB8ADBCE -:100F200065DB92DB69DB9ADB24DE15DB41DB082F16 -:100F30002FDB0195402F552747FD509520914E01FD -:100F400030914F01240F351F30934F0120934E01F4 -:100F50008195682F772767FD70958091500190915A -:100F60005101860F971F9093510180935001CA0140 -:100F700072DD112389F2882379F68983E7DD89817F -:100F8000CBCF923029F0933041F09130E9F417C083 -:100F90002EE330E0EAEAF0E01BC0813041F081301E -:100FA00018F0823089F406C0E8EEF0E005C0ECEEFF -:100FB000F0E002C0E6E0F1E0249130E009C022E177 -:100FC00030E0E8E9F0E004C020E030E0E0E0F0E00C -:100FD000DA011196FC93EE93C9010895282F392F59 -:100FE000F9018091D2029091D3028617970718F4E5 -:100FF000BC0120E034C061157105D9F78091E8008B -:101000008E778093E800F5CF8EB38823E9F18530A1 -:10101000B9F18091E80083FD35C08091E80082FD40 -:1010200029C08091E80080FF1AC08091F20090E012 -:1010300006C021912093F100615070400196611526 -:10104000710519F088309105A0F321E088309105F1 -:1010500009F020E08091E8008E778093E800611528 -:10106000710591F6222381F605C08EB3882361F0C5 -:10107000853061F08091E80082FFF7CF80E008952D -:1010800083E0089581E0089582E0089583E0089563 -:10109000E82FF92F8091D2029091D30286179707FB -:1010A00018F4BC0120E036C061157105D9F78091B4 -:1010B000E8008E778093E800F5CF8EB3882309F49B -:1010C0003EC08530C1F18091E80083FD36C080913B -:1010D000E80082FD2AC08091E80080FF1BC080915B -:1010E000F20090E007C024912093F1003196615006 -:1010F000704001966115710519F08830910598F3DB -:1011000021E08830910509F020E08091E8008E7799 -:101110008093E8006115710581F6222371F605C000 -:101120008EB3882361F0853061F08091E80082FF02 -:10113000F7CF80E0089583E0089581E0089582E08C -:10114000089583E00895982F2CC0292F2F702093A5 -:10115000E900981739F07091EC002091ED00509162 -:10116000F00003C0242F762F50E021FF19C03091EA -:10117000EB003E7F3093EB003091ED003D7F3093EC -:10118000ED003091EB0031603093EB007093EC0098 -:101190002093ED005093F0002091EE0027FF08C04F -:1011A0009F5F953090F28F708093E90081E0089501 -:1011B00080E00895EF92FF920F931F93CF93DF93F8 -:1011C000162FE82EE7017E01F92EE70100E02AC084 -:1011D0009881992329F16B81E981FA812C81892FEA -:1011E0008F70853018F56295660F660F607C991FC9 -:1011F0009927991F692B223010F096E001C092E0E8 -:1012000028E030E040E003C04F5F220F331F2E176D -:101210003F07D0F34295407F492B95DF882331F07B -:101220000F5F25960117A0F281E001C080E0DF91F9 -:10123000CF911F910F91FF90EF9008958091CC0274 -:1012400087FF11C003C08EB38823B1F08091E800FE -:1012500082FFF9CF8091E8008B778093E8000895B2 -:101260008EB3882349F08091E80080FFF9CF809108 -:10127000E8008E778093E80008958091E4009091D3 -:10128000E50044E62091EC0020FF25C02091E80015 -:1012900020FD15C02EB32223A1F02530A1F020910E -:1012A000EB0025FD12C02091E4003091E5002817E5 -:1012B000390741F3442359F04150C901E3CF80E09D -:1012C000089582E0089583E0089581E0089584E020 -:1012D000089580E008952091E80022FFDBCFF9CF48 -:1012E00040D042D08091D8008F778093D8008091F1 -:1012F000D80080688093D8008091D8008F7D80933B -:10130000D80084E089BD86E089BD09B400FEFDCF28 -:101310001EBA1092C8021092CA021092C90280E04E -:1013200060E042E010DF8091E1008E7F8093E10079 -:101330008091E20081608093E2008091E200886009 -:101340008093E2008091E0008E7F8093E00008951A -:10135000E3E6F0E080818E7F808381E08093CB02A2 -:10136000BFCF1092E20008951092E10008951F92FD -:101370000F920FB60F9211242F933F934F935F93C9 -:101380006F937F938F939F93AF93BF93EF93FF934D -:101390008091E10082FF0AC08091E20082FF06C0D6 -:1013A0008091E1008B7F8093E10022D28091E10067 -:1013B00080FF16C08091E20080FF12C08091E200A1 -:1013C0008E7F8093E2008091E20080618093E20052 -:1013D0008091D80080628093D80019BC1EBA9FD932 -:1013E0008091E10084FF2CC08091E20084FF28C03E -:1013F00084E089BD86E089BD09B400FEFDCF8091FF -:10140000D8008F7D8093D8008091E1008F7E8093FB -:10141000E1008091E2008F7E8093E2008091E20003 -:1014200081608093E2008091C802882321F480913A -:10143000E30087FF02C084E001C081E08EBB6ED96B -:101440008091E10083FF26C08091E20083FF22C0EB -:101450008091E100877F8093E10082E08EBB109253 -:10146000C8028091E1008E7F8093E1008091E200CC -:101470008E7F8093E2008091E20080618093E200A1 -:1014800080E060E042E05FDE8091F0008860809361 -:10149000F000AED1FF91EF91BF91AF919F918F91ED -:1014A0007F916F915F914F913F912F910F900FBE60 -:1014B0000F901F9018951F920F920FB60F92112444 -:1014C0001F932F933F934F935F936F937F938F93CC -:1014D0009F93AF93BF93EF93FF931091E9001F7019 -:1014E0008091EC001092E9008091F000877F80935A -:1014F000F00078941BD01092E9008091F000886091 -:101500008093F0001093E900FF91EF91BF91AF91AC -:101510009F918F917F916F915F914F913F912F910B -:101520001F910F900FBE0F901F9018951F93DF9380 -:10153000CF93CDB7DEB7AC970FB6F894DEBF0FBE32 -:10154000CDBFECECF2E08091F100819322E0E43D2C -:10155000F207C9F7E9D88091E80083FF31C1809193 -:10156000CC022091CD02253009F484C0263040F40D -:101570002130A1F1213070F0233009F021C12EC0BB -:10158000283009F4EFC0293009F4FEC0263009F0F4 -:1015900017C192C0803821F0823809F011C108C00B -:1015A0008091C9029091CA02992371F082600CC0A7 -:1015B0008091D0028F708093E9009091EB0081E0E0 -:1015C00095FF80E01092E9009091E800977F90935A -:1015D000E8008093F1001092F100CFC0882319F049 -:1015E000823009F0EDC090E08F719070009729F083 -:1015F0008230910509F0E4C00BC08091CE028130A9 -:1016000009F0DEC0233009F080E08093CA022CC0CC -:101610008091CE02882341F52091D0022F7009F4E9 -:10162000CFC02093E9008091EB0080FF1DC0809126 -:10163000CD02833021F48091EB00806213C0809151 -:10164000EB0080618093EB0081E090E002C0880FA6 -:10165000991F2A95E2F78093EA001092EA008091A0 -:10166000EB0088608093EB001092E9008091E80025 -:10167000877F86C0882309F0A3C01091CE021F7710 -:101680008091E3008078812B8093E3008091E800D3 -:10169000877F8093E800D2DD8091E80080FFFCCF57 -:1016A0008091E30080688093E300112311F083E0D0 -:1016B00001C082E08EBB84C08058823008F080C0B8 -:1016C0008091CE029091CF0223E08C3D920791F55C -:1016D00083E08C838AE28B835FB7F894DE011596F2 -:1016E00080E090E04EE061E2E42FF0E0609357008C -:1016F000E49180FF03C0E295EF704F5FEF702E2FF3 -:1017000030E0EA3018F0295C3F4F02C0205D3F4FC7 -:101710002D933D9301968431910531F75FBF809100 -:10172000E800877F8093E800CE0103966AE270E0CC -:1017300055DC12C06091D002AE014F5F5F4F21DCDB -:10174000BC01009709F43CC08091E800877F80933A -:10175000E80089819A819CDC8091E8008B778093F6 -:10176000E8002EC0803861F58091E800877F809383 -:10177000E8008091C8028093F1008091E8008E77A4 -:101780008093E8005BDD1CC08823D1F49091CE02E9 -:101790009230B0F48091E800877F8093E8009093C6 -:1017A000C8024CDD8091C802882321F48091E300B7 -:1017B00087FF02C084E001C081E08EBB0E949003DD -:1017C0008091E80083FF0AC08091E800877F8093C2 -:1017D000E8008091EB0080628093EB00AC960FB63E -:1017E000F894DEBF0FBECDBFCF91DF911F9108955A -:1017F00008951F938EB38823A9F08091E9008F701C -:101800009091EC0090FF02C010E801C010E0182B8E -:101810001092E9008091E80083FF01C087DE1F700D -:101820001093E9001F910895CF93DF93EC0180910D -:10183000E80083FFA3C0888190E02091D00230911E -:10184000D1022817390709F099C08091CD02813261 -:1018500069F0823220F4803209F090C03CC08232BC -:1018600009F46BC0833209F089C07AC08091CC0240 -:10187000813A09F083C08091E800877F8093E80077 -:101880008091E80080FFFCCF8C899D89AE89BF895B -:101890008093F100292F3A2F4B2F55272093F100E9 -:1018A0009D01442755272093F1008B2F9927AA27C4 -:1018B000BB278093F100888D8093F100898D809300 -:1018C000F1008A8D8093F1008091E8008E778093FB -:1018D000E800B4DC53C08091CC02813209F04EC0E4 -:1018E0008091E800877F8093E80004C08EB388234E -:1018F00009F444C08091E80082FFF8CF3091F100F4 -:101900002091F1009091F1008091F1003C8B2D8BA2 -:101910009E8B8F8B8091F100888F8091F100898F51 -:101920008091F1008A8F8091E8008B778093E800A6 -:1019300085DCCE010E94C20321C08091CC0281329D -:10194000E9F48091E800877F8093E80077DC80915C -:10195000CE029091CF02998B888BCE01D4D00EC04D -:101960008091CC02813251F48091E800877F80938E -:10197000E80064DCCE016091CE02C5D0DF91CF914A -:101980000895CF93DF93EC014096FC018BE0DF01DB -:101990001D928A95E9F782E08C83898783E08E87A0 -:1019A000CE01019661E006DC882359F0CE0106964F -:1019B00061E000DC882329F0CE010B9661E0FADBC0 -:1019C00001C080E0DF91CF910895DF93CF930F9214 -:1019D000CDB7DEB7FC018EB38430F9F424893589A4 -:1019E000468957892115310541055105B1F081819D -:1019F0008F708093E9008091E80085FD0AC0809196 -:101A0000E8008E778093E800698337DC698188235A -:101A100029F46093F10080E001C082E00F90CF9143 -:101A2000DF910895FC018EB3843019F5248935893E -:101A3000468957892115310541055105D1F081812C -:101A40008F708093E9008091F2008823A1F090913B -:101A5000E8008091E8008E778093E80095FD0DC046 -:101A60000CDC882359F49091E8009E779093E8006D -:101A7000089582E0089580E0089580E008952EB3EF -:101A8000243099F4FC012489358946895789211528 -:101A900031054105510549F021812F702093E9005E -:101AA0002091E80020FF01C0BDCF0895FC018EB356 -:101AB000843029F5248935894689578921153105CE -:101AC00041055105E1F086818F708093E900809196 -:101AD000E80082FF14C08091F200882321F0209159 -:101AE000F10030E002C02FEF3FEF8091F200882339 -:101AF00041F48091E8008B778093E80002C02FEFDB -:101B00003FEFC901089508955058BB27AA270ED06A -:101B100070C161D130F066D120F031F49F3F11F4F3 -:101B20001EF456C10EF4E095E7FB4CC1E92F72D1CB -:101B300080F3BA17620773078407950718F071F4EA -:101B40009EF58AC10EF4E0950B2EBA2FA02D0B0145 -:101B5000B90190010C01CA01A0011124FF27591BF2 -:101B600099F0593F50F4503E68F11A16F040A22FF8 -:101B7000232F342F4427585FF3CF46953795279569 -:101B8000A795F0405395C9F77EF41F16BA0B620B68 -:101B9000730B840BBAF09150A1F0FF0FBB1F661FAF -:101BA000771F881FC2F70EC0BA0F621F731F841FF2 -:101BB00048F4879577956795B795F7959E3F08F018 -:101BC000B3CF9395880F08F09927EE0F97958795D7 -:101BD0000895D4D008F481E008950CD00AC102D150 -:101BE00040F0F9D030F021F45F3F19F0EBC0511113 -:101BF00034C1EEC00FD198F39923C9F35523B1F343 -:101C0000951B550BBB27AA2762177307840738F06B -:101C10009F5F5F4F220F331F441FAA1FA9F333D0CA -:101C20000E2E3AF0E0E830D091505040E695001C7E -:101C3000CAF729D0FE2F27D0660F771F881FBB1F3A -:101C4000261737074807AB07B0E809F0BB0B802D14 -:101C5000BF01FF2793585F4F2AF09E3F510568F060 -:101C6000B1C0FBC05F3FECF3983EDCF386957795FF -:101C70006795B795F7959F5FC9F7880F911D969562 -:101C8000879597F90895E1E0660F771F881FBB1FBE -:101C9000621773078407BA0720F0621B730B840B6B -:101CA000BA0BEE1F88F7E0950895BCD088F09F57D7 -:101CB00090F0B92F9927B751A0F0D1F0660F771F98 -:101CC000881F991F1AF0BA95C9F712C0B13081F078 -:101CD000C3D0B1E00895C0C0672F782F8827B85FC0 -:101CE00039F0B93FCCF3869577956795B395D9F7D9 -:101CF0003EF490958095709561957F4F8F4F9F4FE3 -:101D00000895E89409C097FB3EF4909580957095EE -:101D100061957F4F8F4F9F4F9923A9F0F92F96E937 -:101D2000BB279395F695879577956795B795F111AC -:101D3000F8CFFAF4BB0F11F460FF1BC06F5F7F4F49 -:101D40008F4F9F4F16C0882311F096E911C077235B -:101D500021F09EE8872F762F05C0662371F096E864 -:101D6000862F70E060E02AF09A95660F771F881F33 -:101D7000DAF7880F9695879597F90895990F0008D7 -:101D8000550FAA0BE0E8FEEF16161706E807F9074D -:101D9000C0F012161306E407F50798F0621B730BE8 -:101DA000840B950B39F40A2661F0232B242B252B69 -:101DB00021F408950A2609F4A140A6958FEF811D0C -:101DC000811D089597F99F6780E870E060E00895AD -:101DD0009FEF80EC089500240A9416161706180643 -:101DE0000906089500240A9412161306140605061F -:101DF0000895092E0394000C11F4882352F0BB0FB0 -:101E000040F4BF2B11F460FF04C06F5F7F4F8F4F12 -:101E10009F4F089557FD9058440F551F59F05F3F4D -:101E200071F04795880F97FB991F61F09F3F79F0FC -:101E300087950895121613061406551FF2CF46957E -:101E4000F1DF08C0161617061806991FF1CF869500 -:101E50007105610508940895E894BB2766277727E4 -:101E6000CB0197F908958ADF08F48FEF089555277D -:101E7000002480FF02C0060E571F660F771F6115F2 -:101E8000710521F096958795009799F7952F802DEC -:101E90000895AA1BBB1B51E107C0AA1FBB1FA617B1 -:101EA000B70710F0A61BB70B881F991F5A95A9F703 -:101EB00080959095BC01CD01089597FB092E0726CA -:101EC0000AD077FD04D0E5DF06D000201AF4709523 -:101ED00061957F4F0895F6F7909581959F4F0895EE -:101EE000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F1E -:101EF000EE1FFF1FA217B307E407F50720F0A21B90 -:101F0000B30BE40BF50B661F771F881F991F1A94FC -:101F100069F760957095809590959B01AC01BD0126 -:101F2000CF010895FC0188279927E8942191203258 -:101F3000E9F3293010F02E30C8F32B3239F02D326E -:101F400031F4689403C01AD0820F911D219120535F -:101F50002A30C8F31EF4909581959F4F0895FB0198 -:101F6000DC014150504048F001900D920020C9F72B -:101F700001C01D9241505040E0F70895BC01880F08 -:101F8000991F880F991F860F971F880F991F089513 -:041F9000F894FFCFF3 -:101F9400785F706F733A20002020795F706F733A16 -:101FA40020000D000D0A00474F544F20004D4F569E -:101FB4004520000D0A2420000083100000010410B5 -:101FC4000000018208000001000000000000000081 -:0E1FD4000000000A0905063020EC002701007D -:00000001FF diff --git a/firmware/USBtoSerial.lss b/firmware/USBtoSerial.lss deleted file mode 100644 index 531cab1..0000000 --- a/firmware/USBtoSerial.lss +++ /dev/null @@ -1,7045 +0,0 @@ - -USBtoSerial.elf: file format elf32-avr - -Sections: -Idx Name Size VMA LMA File off Algn - 0 .data 0000004e 00800100 00001f94 00002028 2**0 - CONTENTS, ALLOC, LOAD, DATA - 1 .text 00001f94 00000000 00000000 00000094 2**1 - CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000186 0080014e 0080014e 00002076 2**0 - ALLOC - 3 .stab 0000255c 00000000 00000000 00002078 2**2 - CONTENTS, READONLY, DEBUGGING - 4 .stabstr 000004d5 00000000 00000000 000045d4 2**0 - CONTENTS, READONLY, DEBUGGING - 5 .debug_aranges 000005e0 00000000 00000000 00004aa9 2**0 - CONTENTS, READONLY, DEBUGGING - 6 .debug_pubnames 00000fa4 00000000 00000000 00005089 2**0 - CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00009390 00000000 00000000 0000602d 2**0 - CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 000021fc 00000000 00000000 0000f3bd 2**0 - CONTENTS, READONLY, DEBUGGING - 9 .debug_line 00007d90 00000000 00000000 000115b9 2**0 - CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000980 00000000 00000000 0001934c 2**2 - CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00003dc5 00000000 00000000 00019ccc 2**0 - CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00004b8d 00000000 00000000 0001da91 2**0 - CONTENTS, READONLY, DEBUGGING - 13 .debug_pubtypes 00001111 00000000 00000000 0002261e 2**0 - CONTENTS, READONLY, DEBUGGING - 14 .debug_ranges 00000868 00000000 00000000 0002372f 2**0 - CONTENTS, READONLY, DEBUGGING - -Disassembly of section .text: - -00000000 <__vectors>: - BytesInTransfer++; - } - } - - return ENDPOINT_RWSTREAM_NoError; -} - 0: 9a c0 rjmp .+308 ; 0x136 <__ctors_end> - #if defined(USB_CAN_BE_BOTH) - USB_CurrentMode = USB_MODE_None; - #endif - - USB_IsInitialized = false; -} - 2: 00 00 nop - 4: b4 c0 rjmp .+360 ; 0x16e <__bad_interrupt> - 6: 00 00 nop - 8: b2 c0 rjmp .+356 ; 0x16e <__bad_interrupt> - a: 00 00 nop - c: b0 c0 rjmp .+352 ; 0x16e <__bad_interrupt> - e: 00 00 nop - 10: ae c0 rjmp .+348 ; 0x16e <__bad_interrupt> - 12: 00 00 nop - 14: ac c0 rjmp .+344 ; 0x16e <__bad_interrupt> - 16: 00 00 nop - 18: aa c0 rjmp .+340 ; 0x16e <__bad_interrupt> - 1a: 00 00 nop - 1c: a8 c0 rjmp .+336 ; 0x16e <__bad_interrupt> - 1e: 00 00 nop - 20: a6 c0 rjmp .+332 ; 0x16e <__bad_interrupt> - 22: 00 00 nop - 24: a4 c0 rjmp .+328 ; 0x16e <__bad_interrupt> - 26: 00 00 nop - 28: a2 c0 rjmp .+324 ; 0x16e <__bad_interrupt> - 2a: 00 00 nop - 2c: 0c 94 b7 09 jmp 0x136e ; 0x136e <__vector_11> - 30: 0c 94 5b 0a jmp 0x14b6 ; 0x14b6 <__vector_12> - 34: 9c c0 rjmp .+312 ; 0x16e <__bad_interrupt> - 36: 00 00 nop - 38: 9a c0 rjmp .+308 ; 0x16e <__bad_interrupt> - 3a: 00 00 nop - 3c: 98 c0 rjmp .+304 ; 0x16e <__bad_interrupt> - 3e: 00 00 nop - 40: 96 c0 rjmp .+300 ; 0x16e <__bad_interrupt> - 42: 00 00 nop - 44: 94 c0 rjmp .+296 ; 0x16e <__bad_interrupt> - 46: 00 00 nop - 48: 92 c0 rjmp .+292 ; 0x16e <__bad_interrupt> - 4a: 00 00 nop - 4c: 90 c0 rjmp .+288 ; 0x16e <__bad_interrupt> - 4e: 00 00 nop - 50: 8e c0 rjmp .+284 ; 0x16e <__bad_interrupt> - 52: 00 00 nop - 54: 4b c1 rjmp .+662 ; 0x2ec <__vector_21> - 56: 00 00 nop - 58: 8a c0 rjmp .+276 ; 0x16e <__bad_interrupt> - 5a: 00 00 nop - 5c: 69 c3 rjmp .+1746 ; 0x730 <__vector_23> - 5e: 00 00 nop - 60: 86 c0 rjmp .+268 ; 0x16e <__bad_interrupt> - 62: 00 00 nop - 64: 84 c0 rjmp .+264 ; 0x16e <__bad_interrupt> - 66: 00 00 nop - 68: 82 c0 rjmp .+260 ; 0x16e <__bad_interrupt> - 6a: 00 00 nop - 6c: 80 c0 rjmp .+256 ; 0x16e <__bad_interrupt> - 6e: 00 00 nop - 70: 7e c0 rjmp .+252 ; 0x16e <__bad_interrupt> - 72: 00 00 nop - 74: 7c c0 rjmp .+248 ; 0x16e <__bad_interrupt> - 76: 00 00 nop - 78: 7a c0 rjmp .+244 ; 0x16e <__bad_interrupt> - 7a: 00 00 nop - 7c: 78 c0 rjmp .+240 ; 0x16e <__bad_interrupt> - 7e: 00 00 nop - 80: 76 c0 rjmp .+236 ; 0x16e <__bad_interrupt> - 82: 00 00 nop - 84: 74 c0 rjmp .+232 ; 0x16e <__bad_interrupt> - 86: 00 00 nop - 88: 72 c0 rjmp .+228 ; 0x16e <__bad_interrupt> - 8a: 00 00 nop - 8c: 70 c0 rjmp .+224 ; 0x16e <__bad_interrupt> - 8e: 00 00 nop - 90: 6e c0 rjmp .+220 ; 0x16e <__bad_interrupt> - 92: 00 00 nop - 94: 6c c0 rjmp .+216 ; 0x16e <__bad_interrupt> - 96: 00 00 nop - -00000098 : - 98: 12 01 10 01 02 00 00 08 eb 03 4b 20 01 00 01 02 ..........K .... - a8: dc 01 .. - -000000aa : - aa: 09 02 3e 00 02 01 00 c0 32 09 04 00 00 01 02 02 ..>.....2....... - ba: 01 00 05 24 00 10 01 04 24 02 06 05 24 06 00 01 ...$....$...$... - ca: 07 05 82 03 08 00 ff 09 04 01 00 02 0a 00 00 00 ................ - da: 07 05 04 02 10 00 05 07 05 83 02 10 00 05 .............. - -000000e8 : - e8: 04 03 09 04 .... - -000000ec : - ec: 18 03 44 00 65 00 61 00 6e 00 20 00 43 00 61 00 ..D.e.a.n. .C.a. - fc: 6d 00 65 00 72 00 61 00 00 00 m.e.r.a... - -00000106 : - 106: 2e 03 4c 00 55 00 46 00 41 00 20 00 55 00 53 00 ..L.U.F.A. .U.S. - 116: 42 00 2d 00 52 00 53 00 32 00 33 00 32 00 20 00 B.-.R.S.2.3.2. . - 126: 41 00 64 00 61 00 70 00 74 00 65 00 72 00 00 00 A.d.a.p.t.e.r... - -00000136 <__ctors_end>: - 136: 11 24 eor r1, r1 - 138: 1f be out 0x3f, r1 ; 63 - 13a: cf ef ldi r28, 0xFF ; 255 - 13c: d4 e0 ldi r29, 0x04 ; 4 - 13e: de bf out 0x3e, r29 ; 62 - 140: cd bf out 0x3d, r28 ; 61 - -00000142 <__do_copy_data>: - 142: 11 e0 ldi r17, 0x01 ; 1 - 144: a0 e0 ldi r26, 0x00 ; 0 - 146: b1 e0 ldi r27, 0x01 ; 1 - 148: e4 e9 ldi r30, 0x94 ; 148 - 14a: ff e1 ldi r31, 0x1F ; 31 - 14c: 02 c0 rjmp .+4 ; 0x152 <__do_copy_data+0x10> - 14e: 05 90 lpm r0, Z+ - 150: 0d 92 st X+, r0 - 152: ae 34 cpi r26, 0x4E ; 78 - 154: b1 07 cpc r27, r17 - 156: d9 f7 brne .-10 ; 0x14e <__do_copy_data+0xc> - -00000158 <__do_clear_bss>: - 158: 12 e0 ldi r17, 0x02 ; 2 - 15a: ae e4 ldi r26, 0x4E ; 78 - 15c: b1 e0 ldi r27, 0x01 ; 1 - 15e: 01 c0 rjmp .+2 ; 0x162 <.do_clear_bss_start> - -00000160 <.do_clear_bss_loop>: - 160: 1d 92 st X+, r1 - -00000162 <.do_clear_bss_start>: - 162: a4 3d cpi r26, 0xD4 ; 212 - 164: b1 07 cpc r27, r17 - 166: e1 f7 brne .-8 ; 0x160 <.do_clear_bss_loop> - 168: b3 d6 rcall .+3430 ; 0xed0

- 16a: 0c 94 c8 0f jmp 0x1f90 ; 0x1f90 <_exit> - -0000016e <__bad_interrupt>: - 16e: 48 cf rjmp .-368 ; 0x0 <__vectors> - -00000170 : - * \param[in] Data Data element to insert into the buffer. - */ - static inline void RingBuffer_Insert(RingBuffer_t* Buffer, const uint8_t Data) ATTR_NON_NULL_PTR_ARG(1); - static inline void RingBuffer_Insert(RingBuffer_t* Buffer, const uint8_t Data) - { - GCC_FORCE_POINTER_ACCESS(Buffer); - 170: fc 01 movw r30, r24 - - *Buffer->In = Data; - 172: a0 81 ld r26, Z - 174: b1 81 ldd r27, Z+1 ; 0x01 - 176: 6c 93 st X, r22 - - if (++Buffer->In == Buffer->End) - 178: 80 81 ld r24, Z - 17a: 91 81 ldd r25, Z+1 ; 0x01 - 17c: 01 96 adiw r24, 0x01 ; 1 - 17e: 91 83 std Z+1, r25 ; 0x01 - 180: 80 83 st Z, r24 - 182: 26 81 ldd r18, Z+6 ; 0x06 - 184: 37 81 ldd r19, Z+7 ; 0x07 - 186: 82 17 cp r24, r18 - 188: 93 07 cpc r25, r19 - 18a: 21 f4 brne .+8 ; 0x194 - Buffer->In = Buffer->Start; - 18c: 84 81 ldd r24, Z+4 ; 0x04 - 18e: 95 81 ldd r25, Z+5 ; 0x05 - 190: 91 83 std Z+1, r25 ; 0x01 - 192: 80 83 st Z, r24 - static inline uint_reg_t GetGlobalInterruptMask(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - return SREG; - 194: 2f b7 in r18, 0x3f ; 63 - static inline void GlobalInterruptDisable(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - cli(); - 196: f8 94 cli - - uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); - GlobalInterruptDisable(); - - Buffer->Count++; - 198: 82 85 ldd r24, Z+10 ; 0x0a - 19a: 93 85 ldd r25, Z+11 ; 0x0b - 19c: 01 96 adiw r24, 0x01 ; 1 - 19e: 93 87 std Z+11, r25 ; 0x0b - 1a0: 82 87 std Z+10, r24 ; 0x0a - static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - SREG = GlobalIntState; - 1a2: 2f bf out 0x3f, r18 ; 63 - - SetGlobalInterruptMask(CurrentGlobalInt); - } - 1a4: 08 95 ret - -000001a6 : - * \return Next data element stored in the buffer. - */ - static inline uint8_t RingBuffer_Remove(RingBuffer_t* Buffer) ATTR_NON_NULL_PTR_ARG(1); - static inline uint8_t RingBuffer_Remove(RingBuffer_t* Buffer) - { - GCC_FORCE_POINTER_ACCESS(Buffer); - 1a6: fc 01 movw r30, r24 - - uint8_t Data = *Buffer->Out; - 1a8: a2 81 ldd r26, Z+2 ; 0x02 - 1aa: b3 81 ldd r27, Z+3 ; 0x03 - 1ac: 8d 91 ld r24, X+ - - if (++Buffer->Out == Buffer->End) - 1ae: b3 83 std Z+3, r27 ; 0x03 - 1b0: a2 83 std Z+2, r26 ; 0x02 - 1b2: 26 81 ldd r18, Z+6 ; 0x06 - 1b4: 37 81 ldd r19, Z+7 ; 0x07 - 1b6: a2 17 cp r26, r18 - 1b8: b3 07 cpc r27, r19 - 1ba: 21 f4 brne .+8 ; 0x1c4 - Buffer->Out = Buffer->Start; - 1bc: 24 81 ldd r18, Z+4 ; 0x04 - 1be: 35 81 ldd r19, Z+5 ; 0x05 - 1c0: 33 83 std Z+3, r19 ; 0x03 - 1c2: 22 83 std Z+2, r18 ; 0x02 - static inline uint_reg_t GetGlobalInterruptMask(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - return SREG; - 1c4: 9f b7 in r25, 0x3f ; 63 - static inline void GlobalInterruptDisable(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - cli(); - 1c6: f8 94 cli - - uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); - GlobalInterruptDisable(); - - Buffer->Count--; - 1c8: 22 85 ldd r18, Z+10 ; 0x0a - 1ca: 33 85 ldd r19, Z+11 ; 0x0b - 1cc: 21 50 subi r18, 0x01 ; 1 - 1ce: 30 40 sbci r19, 0x00 ; 0 - 1d0: 33 87 std Z+11, r19 ; 0x0b - 1d2: 22 87 std Z+10, r18 ; 0x0a - static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - SREG = GlobalIntState; - 1d4: 9f bf out 0x3f, r25 ; 63 - - SetGlobalInterruptMask(CurrentGlobalInt); - - return Data; - } - 1d6: 08 95 ret - -000001d8 : - -uint8_t phase_pattern[4] = { 0b00001010, 0b00001001, 0b00000101, 0b00000110}; - - -void set_x(uint8_t byte) { - PORTX0 &= ~(1<>0)<>1)< - 20c: 42 2b or r20, r18 - 20e: 45 b9 out 0x05, r20 ; 5 - PORTX2 |= ((byte & (1<<2))>>2)< - 22a: 42 2b or r20, r18 - 22c: 45 b9 out 0x05, r20 ; 5 - PORTX3 |= ((byte & (1<<3))>>3)< - 23e: 35 e0 ldi r19, 0x05 ; 5 - 240: 88 0f add r24, r24 - 242: 99 1f adc r25, r25 - 244: 3a 95 dec r19 - 246: e1 f7 brne .-8 ; 0x240 - 248: 28 2b or r18, r24 - 24a: 25 b9 out 0x05, r18 ; 5 -} - 24c: 08 95 ret - -0000024e : - -void set_y(uint8_t byte) { - PORTY0 &= ~(1<>0)<>1)< - 280: 42 2b or r20, r18 - 282: 45 b9 out 0x05, r20 ; 5 - PORTY2 |= ((byte & (1<<2))>>2)<>3)< - 2b2: a6 e0 ldi r26, 0x06 ; 6 - 2b4: 88 0f add r24, r24 - 2b6: 99 1f adc r25, r25 - 2b8: aa 95 dec r26 - 2ba: e1 f7 brne .-8 ; 0x2b4 - 2bc: 28 2b or r18, r24 - 2be: 28 b9 out 0x08, r18 ; 8 -} - 2c0: 08 95 ret - -000002c2 : - const uint16_t Size) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2); - static inline void RingBuffer_InitBuffer(RingBuffer_t* Buffer, - uint8_t* const DataPtr, - const uint16_t Size) - { - GCC_FORCE_POINTER_ACCESS(Buffer); - 2c2: fc 01 movw r30, r24 - static inline uint_reg_t GetGlobalInterruptMask(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - return SREG; - 2c4: 2f b7 in r18, 0x3f ; 63 - static inline void GlobalInterruptDisable(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - cli(); - 2c6: f8 94 cli - - uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); - GlobalInterruptDisable(); - - Buffer->In = DataPtr; - 2c8: 71 83 std Z+1, r23 ; 0x01 - 2ca: 60 83 st Z, r22 - Buffer->Out = DataPtr; - 2cc: 73 83 std Z+3, r23 ; 0x03 - 2ce: 62 83 std Z+2, r22 ; 0x02 - Buffer->Start = &DataPtr[0]; - 2d0: 75 83 std Z+5, r23 ; 0x05 - 2d2: 64 83 std Z+4, r22 ; 0x04 - Buffer->End = &DataPtr[Size]; - 2d4: 60 58 subi r22, 0x80 ; 128 - 2d6: 7f 4f sbci r23, 0xFF ; 255 - 2d8: 77 83 std Z+7, r23 ; 0x07 - 2da: 66 83 std Z+6, r22 ; 0x06 - Buffer->Size = Size; - 2dc: 80 e8 ldi r24, 0x80 ; 128 - 2de: 90 e0 ldi r25, 0x00 ; 0 - 2e0: 91 87 std Z+9, r25 ; 0x09 - 2e2: 80 87 std Z+8, r24 ; 0x08 - Buffer->Count = 0; - 2e4: 13 86 std Z+11, r1 ; 0x0b - 2e6: 12 86 std Z+10, r1 ; 0x0a - static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - SREG = GlobalIntState; - 2e8: 2f bf out 0x3f, r18 ; 63 - - SetGlobalInterruptMask(CurrentGlobalInt); - } - 2ea: 08 95 ret - -000002ec <__vector_21>: -u08 adb_werte[MAX_ADB]; -u08 t0ovfcount; -volatile u08 adb_data_length; - - -ISR( TIMER0_OVF_vect) { - 2ec: 1f 92 push r1 - 2ee: 0f 92 push r0 - 2f0: 0f b6 in r0, 0x3f ; 63 - 2f2: 0f 92 push r0 - 2f4: 11 24 eor r1, r1 - 2f6: 8f 93 push r24 - t0ovfcount++; - 2f8: 80 91 c6 02 lds r24, 0x02C6 - 2fc: 8f 5f subi r24, 0xFF ; 255 - 2fe: 80 93 c6 02 sts 0x02C6, r24 -} - 302: 8f 91 pop r24 - 304: 0f 90 pop r0 - 306: 0f be out 0x3f, r0 ; 63 - 308: 0f 90 pop r0 - 30a: 1f 90 pop r1 - 30c: 18 95 reti - -0000030e : - -uint16_t t0ext(void) { - return (t0ovfcount * 256 + (u16) TCNT0); // return current counter value - 30e: 86 b5 in r24, 0x26 ; 38 - 310: 30 91 c6 02 lds r19, 0x02C6 - 314: 20 e0 ldi r18, 0x00 ; 0 - 316: 28 0f add r18, r24 - 318: 31 1d adc r19, r1 - // plus number of already passed counter cycles times 256 -} - 31a: c9 01 movw r24, r18 - 31c: 08 95 ret - -0000031e : - -void t0rst(void) { - TCNT0 = 0; // set counter to zero - 31e: 16 bc out 0x26, r1 ; 38 - t0ovfcount = 0; // set overflow counter to zero - 320: 10 92 c6 02 sts 0x02C6, r1 - -} - 324: 08 95 ret - -00000326 : -// Befehl in adb_werte[0]. Empfangene bzw. zu sendende Daten in adb_werte[1 bis 8] - - - - -u08 adb(void) { - 326: df 92 push r13 - 328: ef 92 push r14 - 32a: ff 92 push r15 - 32c: 0f 93 push r16 - 32e: 1f 93 push r17 - 330: cf 93 push r28 - 332: df 93 push r29 -#define ADB_IMPULS_TLT TAKT/ADB_VORTEILER_B*250/1000000 // !!! 375 mach das mit anderem prescaler -// #define ADB_IMPULS_TLT TAKT/ADB_VORTEILER_A*31/1000000 // modified - //#define ADB_IMPULS_PAUSE TAKT/ADB_VORTEILER_B*200/1000000 - - //Attention Signal - TCCR0B = ADB_VORTEILER_A_BIT; - 334: 83 e0 ldi r24, 0x03 ; 3 - 336: 85 bd out 0x25, r24 ; 37 - t0rst(); // TCNT0 = 0; // Zähler auf null setzen - 338: f2 df rcall .-28 ; 0x31e - ADB_PDIR |= ADB_BIT; // Ausgang 0 - 33a: 50 9a sbi 0x0a, 0 ; 10 - ADB_POUT &= ~ADB_BIT; - 33c: 58 98 cbi 0x0b, 0 ; 11 - while (t0ext() < ADB_IMPULS_ATT) - 33e: e7 df rcall .-50 ; 0x30e - 340: bc 01 movw r22, r24 - 342: 80 e0 ldi r24, 0x00 ; 0 - 344: 90 e0 ldi r25, 0x00 ; 0 - 346: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 34a: 20 e0 ldi r18, 0x00 ; 0 - 34c: 30 e8 ldi r19, 0x80 ; 128 - 34e: 4e e0 ldi r20, 0x0E ; 14 - 350: 53 e4 ldi r21, 0x43 ; 67 - 352: 0e 94 e9 0d call 0x1bd2 ; 0x1bd2 <__cmpsf2> - 356: 87 fd sbrc r24, 7 - 358: f2 cf rjmp .-28 ; 0x33e - ; // Warteschleife - - TCCR0B = ADB_VORTEILER_B_BIT; // ab hier alles im schnellen modus - 35a: 82 e0 ldi r24, 0x02 ; 2 - 35c: 85 bd out 0x25, r24 ; 37 - - anzahl_out = 1; // Mindestens Befehl übertragen - 35e: dd 24 eor r13, r13 - 360: d3 94 inc r13 - z_byte = 0; - 362: 10 e0 ldi r17, 0x00 ; 0 - do { - // START BIT (1) - t0rst(); // TCNT0 = 0; - 364: dc df rcall .-72 ; 0x31e - ADB_PDIR |= ADB_BIT; // Ausgang 0 - 366: 50 9a sbi 0x0a, 0 ; 10 - ADB_POUT &= ~ADB_BIT; - 368: 58 98 cbi 0x0b, 0 ; 11 - while (t0ext() < ADB_IMPULS_KURZ) - 36a: d1 df rcall .-94 ; 0x30e - 36c: bc 01 movw r22, r24 - 36e: 80 e0 ldi r24, 0x00 ; 0 - 370: 90 e0 ldi r25, 0x00 ; 0 - 372: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 376: 20 e0 ldi r18, 0x00 ; 0 - 378: 30 e0 ldi r19, 0x00 ; 0 - 37a: 4c e8 ldi r20, 0x8C ; 140 - 37c: 52 e4 ldi r21, 0x42 ; 66 - 37e: 0e 94 e9 0d call 0x1bd2 ; 0x1bd2 <__cmpsf2> - 382: 87 fd sbrc r24, 7 - 384: f2 cf rjmp .-28 ; 0x36a - ; - ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - 386: 50 98 cbi 0x0a, 0 ; 10 - ADB_POUT |= ADB_BIT; - 388: 58 9a sbi 0x0b, 0 ; 11 - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - 38a: c1 df rcall .-126 ; 0x30e - 38c: bc 01 movw r22, r24 - 38e: 80 e0 ldi r24, 0x00 ; 0 - 390: 90 e0 ldi r25, 0x00 ; 0 - 392: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 396: 20 e0 ldi r18, 0x00 ; 0 - 398: 30 e0 ldi r19, 0x00 ; 0 - 39a: 48 e4 ldi r20, 0x48 ; 72 - 39c: 53 e4 ldi r21, 0x43 ; 67 - 39e: 0e 94 e9 0d call 0x1bd2 ; 0x1bd2 <__cmpsf2> - 3a2: 87 fd sbrc r24, 7 - 3a4: f2 cf rjmp .-28 ; 0x38a - 3a6: 41 c0 rjmp .+130 ; 0x42a - ; - - for (; z_byte < anzahl_out; z_byte++) { - 3a8: c8 e0 ldi r28, 0x08 ; 8 - 3aa: d0 e0 ldi r29, 0x00 ; 0 - 3ac: 00 e8 ldi r16, 0x80 ; 128 - for (bitpos = 128; bitpos; bitpos >>= 1) { //Daten ausgeben - t0rst(); // TCNT0 = 0; - ADB_PDIR |= ADB_BIT; // Ausgang 0 - ADB_POUT &= ~ADB_BIT; - if (adb_werte[z_byte] & bitpos) - 3ae: e1 2e mov r14, r17 - 3b0: ff 24 eor r15, r15 - 3b2: 8d ea ldi r24, 0xAD ; 173 - 3b4: 92 e0 ldi r25, 0x02 ; 2 - 3b6: e8 0e add r14, r24 - 3b8: f9 1e adc r15, r25 - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - ; - - for (; z_byte < anzahl_out; z_byte++) { - for (bitpos = 128; bitpos; bitpos >>= 1) { //Daten ausgeben - t0rst(); // TCNT0 = 0; - 3ba: b1 df rcall .-158 ; 0x31e - ADB_PDIR |= ADB_BIT; // Ausgang 0 - 3bc: 50 9a sbi 0x0a, 0 ; 10 - ADB_POUT &= ~ADB_BIT; - 3be: 58 98 cbi 0x0b, 0 ; 11 - if (adb_werte[z_byte] & bitpos) - 3c0: f7 01 movw r30, r14 - 3c2: 80 81 ld r24, Z - 3c4: 80 23 and r24, r16 - 3c6: 79 f0 breq .+30 ; 0x3e6 - while (t0ext() < ADB_IMPULS_KURZ) - 3c8: a2 df rcall .-188 ; 0x30e - 3ca: bc 01 movw r22, r24 - 3cc: 80 e0 ldi r24, 0x00 ; 0 - 3ce: 90 e0 ldi r25, 0x00 ; 0 - 3d0: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 3d4: 20 e0 ldi r18, 0x00 ; 0 - 3d6: 30 e0 ldi r19, 0x00 ; 0 - 3d8: 4c e8 ldi r20, 0x8C ; 140 - 3da: 52 e4 ldi r21, 0x42 ; 66 - 3dc: 0e 94 e9 0d call 0x1bd2 ; 0x1bd2 <__cmpsf2> - 3e0: 87 fd sbrc r24, 7 - 3e2: f2 cf rjmp .-28 ; 0x3c8 - 3e4: 0e c0 rjmp .+28 ; 0x402 - ; - else - while (t0ext() < ADB_IMPULS_LANG) - 3e6: 93 df rcall .-218 ; 0x30e - 3e8: bc 01 movw r22, r24 - 3ea: 80 e0 ldi r24, 0x00 ; 0 - 3ec: 90 e0 ldi r25, 0x00 ; 0 - 3ee: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 3f2: 20 e0 ldi r18, 0x00 ; 0 - 3f4: 30 e0 ldi r19, 0x00 ; 0 - 3f6: 42 e0 ldi r20, 0x02 ; 2 - 3f8: 53 e4 ldi r21, 0x43 ; 67 - 3fa: 0e 94 e9 0d call 0x1bd2 ; 0x1bd2 <__cmpsf2> - 3fe: 87 fd sbrc r24, 7 - 400: f2 cf rjmp .-28 ; 0x3e6 - ; - ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - 402: 50 98 cbi 0x0a, 0 ; 10 - ADB_POUT |= ADB_BIT; - 404: 58 9a sbi 0x0b, 0 ; 11 - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - 406: 83 df rcall .-250 ; 0x30e - 408: bc 01 movw r22, r24 - 40a: 80 e0 ldi r24, 0x00 ; 0 - 40c: 90 e0 ldi r25, 0x00 ; 0 - 40e: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 412: 20 e0 ldi r18, 0x00 ; 0 - 414: 30 e0 ldi r19, 0x00 ; 0 - 416: 48 e4 ldi r20, 0x48 ; 72 - 418: 53 e4 ldi r21, 0x43 ; 67 - 41a: 0e 94 e9 0d call 0x1bd2 ; 0x1bd2 <__cmpsf2> - 41e: 87 fd sbrc r24, 7 - 420: f2 cf rjmp .-28 ; 0x406 - ADB_POUT |= ADB_BIT; - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - ; - - for (; z_byte < anzahl_out; z_byte++) { - for (bitpos = 128; bitpos; bitpos >>= 1) { //Daten ausgeben - 422: 06 95 lsr r16 - 424: 21 97 sbiw r28, 0x01 ; 1 - 426: 49 f6 brne .-110 ; 0x3ba - ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - ADB_POUT |= ADB_BIT; - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - ; - - for (; z_byte < anzahl_out; z_byte++) { - 428: 1f 5f subi r17, 0xFF ; 255 - 42a: 1d 15 cp r17, r13 - 42c: 08 f4 brcc .+2 ; 0x430 - 42e: bc cf rjmp .-136 ; 0x3a8 - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - ; - } - } - // STOP BIT (0) - t0rst(); // TCNT0 = 0; - 430: 76 df rcall .-276 ; 0x31e - ADB_PDIR |= ADB_BIT; // Ausgang 0 - 432: 50 9a sbi 0x0a, 0 ; 10 - ADB_POUT &= ~ADB_BIT; - 434: 58 98 cbi 0x0b, 0 ; 11 - while (t0ext() < ADB_IMPULS_LANG) - 436: 6b df rcall .-298 ; 0x30e - 438: bc 01 movw r22, r24 - 43a: 80 e0 ldi r24, 0x00 ; 0 - 43c: 90 e0 ldi r25, 0x00 ; 0 - 43e: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 442: 20 e0 ldi r18, 0x00 ; 0 - 444: 30 e0 ldi r19, 0x00 ; 0 - 446: 42 e0 ldi r20, 0x02 ; 2 - 448: 53 e4 ldi r21, 0x43 ; 67 - 44a: 0e 94 e9 0d call 0x1bd2 ; 0x1bd2 <__cmpsf2> - 44e: 87 fd sbrc r24, 7 - 450: f2 cf rjmp .-28 ; 0x436 - ; - ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - 452: 50 98 cbi 0x0a, 0 ; 10 - ADB_POUT |= ADB_BIT; - 454: 58 9a sbi 0x0b, 0 ; 11 - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - 456: 5b df rcall .-330 ; 0x30e - 458: bc 01 movw r22, r24 - 45a: 80 e0 ldi r24, 0x00 ; 0 - 45c: 90 e0 ldi r25, 0x00 ; 0 - 45e: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 462: 20 e0 ldi r18, 0x00 ; 0 - 464: 30 e0 ldi r19, 0x00 ; 0 - 466: 48 e4 ldi r20, 0x48 ; 72 - 468: 53 e4 ldi r21, 0x43 ; 67 - 46a: 0e 94 e9 0d call 0x1bd2 ; 0x1bd2 <__cmpsf2> - 46e: 87 fd sbrc r24, 7 - 470: f2 cf rjmp .-28 ; 0x456 - ; - - // Entscheidung, ob noch weitere Daten übertragen werden - if (adb_werte[0] == COM_LISTEN3) - 472: 80 91 ad 02 lds r24, 0x02AD - 476: 8b 33 cpi r24, 0x3B ; 59 - 478: 29 f0 breq .+10 ; 0x484 - anzahl_out = 2 + 1; - else if (adb_werte[0] == COM_LISTEN1) - 47a: 89 33 cpi r24, 0x39 ; 57 - 47c: 41 f4 brne .+16 ; 0x48e - anzahl_out = 8 + 1; - 47e: 09 e0 ldi r16, 0x09 ; 9 - 480: d0 2e mov r13, r16 - 482: 02 c0 rjmp .+4 ; 0x488 - while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - ; - - // Entscheidung, ob noch weitere Daten übertragen werden - if (adb_werte[0] == COM_LISTEN3) - anzahl_out = 2 + 1; - 484: b3 e0 ldi r27, 0x03 ; 3 - 486: db 2e mov r13, r27 - else if (adb_werte[0] == COM_LISTEN1) - anzahl_out = 8 + 1; - else - z_byte = 8; - } while (z_byte < 2); - 488: 11 30 cpi r17, 0x01 ; 1 - 48a: 09 f4 brne .+2 ; 0x48e - 48c: 6b cf rjmp .-298 ; 0x364 - - // Warten auf Rückgabewerte sonst Abbruch - // TCCR0 = ADB_VORTEILER_A_BIT; // micha modifikation - t0rst(); // TCNT0 = 0; - 48e: 47 df rcall .-370 ; 0x31e - - do { - if (t0ext() > ADB_IMPULS_TLT) { - 490: 3e df rcall .-388 ; 0x30e - 492: bc 01 movw r22, r24 - 494: 80 e0 ldi r24, 0x00 ; 0 - 496: 90 e0 ldi r25, 0x00 ; 0 - 498: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 49c: 20 e0 ldi r18, 0x00 ; 0 - 49e: 30 e0 ldi r19, 0x00 ; 0 - 4a0: 4a ef ldi r20, 0xFA ; 250 - 4a2: 53 e4 ldi r21, 0x43 ; 67 - 4a4: 0e 94 33 0f call 0x1e66 ; 0x1e66 <__gesf2> - 4a8: 18 16 cp r1, r24 - 4aa: 0c f4 brge .+2 ; 0x4ae - 4ac: 42 c0 rjmp .+132 ; 0x532 <__stack+0x33> - return (0); - } - } while (ADB_PIN & ADB_BIT); - 4ae: 48 99 sbic 0x09, 0 ; 9 - 4b0: ef cf rjmp .-34 ; 0x490 - while (!(ADB_PIN & ADB_BIT)) - 4b2: 48 9b sbis 0x09, 0 ; 9 - 4b4: fe cf rjmp .-4 ; 0x4b2 - 4b6: ce ea ldi r28, 0xAE ; 174 - 4b8: d2 e0 ldi r29, 0x02 ; 2 - 4ba: 11 e0 ldi r17, 0x01 ; 1 - 4bc: 01 c0 rjmp .+2 ; 0x4c0 - while (!(ADB_PIN & ADB_BIT)) - ; - if (t0ext() < (ADB_IMPULS_KURZ + ADB_IMPULS_LANG) / 2) - adb_werte[z_byte] += bitpos; - } - z_byte++; - 4be: 18 2f mov r17, r24 - while (!(ADB_PIN & ADB_BIT)) - ; // Start Bit - - z_byte = 1; - while (z_byte < MAX_ADB) { - adb_werte[z_byte] = 0; - 4c0: 18 82 st Y, r1 - 4c2: a8 e0 ldi r26, 0x08 ; 8 - 4c4: ea 2e mov r14, r26 - 4c6: f1 2c mov r15, r1 - for (bitpos = 128; bitpos; bitpos >>= 1) { //Bits einlesen - 4c8: 00 e8 ldi r16, 0x80 ; 128 - //TCCR0 = ADB_VORTEILER_B_BIT; //micha modifikation - t0rst(); // TCNT0 = 0; - 4ca: 29 df rcall .-430 ; 0x31e - // Abbruch wenn keine weiteren Bytes übertragen werden. - do { - if (t0ext() > ADB_IMPULS_KURZ + ADB_IMPULS_LANG) { - 4cc: 20 df rcall .-448 ; 0x30e - 4ce: bc 01 movw r22, r24 - 4d0: 80 e0 ldi r24, 0x00 ; 0 - 4d2: 90 e0 ldi r25, 0x00 ; 0 - 4d4: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 4d8: 20 e0 ldi r18, 0x00 ; 0 - 4da: 30 e0 ldi r19, 0x00 ; 0 - 4dc: 48 e4 ldi r20, 0x48 ; 72 - 4de: 53 e4 ldi r21, 0x43 ; 67 - 4e0: 0e 94 33 0f call 0x1e66 ; 0x1e66 <__gesf2> - 4e4: 18 16 cp r1, r24 - 4e6: 14 f4 brge .+4 ; 0x4ec - return (z_byte - 1); - 4e8: 11 50 subi r17, 0x01 ; 1 - 4ea: 24 c0 rjmp .+72 ; 0x534 <__stack+0x35> - } - } while (ADB_PIN & ADB_BIT); - 4ec: 48 99 sbic 0x09, 0 ; 9 - 4ee: ee cf rjmp .-36 ; 0x4cc - t0rst(); // TCNT0 = 0; - 4f0: 16 df rcall .-468 ; 0x31e - while (!(ADB_PIN & ADB_BIT)) - 4f2: 48 9b sbis 0x09, 0 ; 9 - 4f4: fe cf rjmp .-4 ; 0x4f2 - ; - if (t0ext() < (ADB_IMPULS_KURZ + ADB_IMPULS_LANG) / 2) - 4f6: 0b df rcall .-490 ; 0x30e - 4f8: bc 01 movw r22, r24 - 4fa: 80 e0 ldi r24, 0x00 ; 0 - 4fc: 90 e0 ldi r25, 0x00 ; 0 - 4fe: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 502: 20 e0 ldi r18, 0x00 ; 0 - 504: 30 e0 ldi r19, 0x00 ; 0 - 506: 48 ec ldi r20, 0xC8 ; 200 - 508: 52 e4 ldi r21, 0x42 ; 66 - 50a: 0e 94 e9 0d call 0x1bd2 ; 0x1bd2 <__cmpsf2> - 50e: 87 ff sbrs r24, 7 - 510: 03 c0 rjmp .+6 ; 0x518 <__stack+0x19> - adb_werte[z_byte] += bitpos; - 512: 88 81 ld r24, Y - 514: 80 0f add r24, r16 - 516: 88 83 st Y, r24 - ; // Start Bit - - z_byte = 1; - while (z_byte < MAX_ADB) { - adb_werte[z_byte] = 0; - for (bitpos = 128; bitpos; bitpos >>= 1) { //Bits einlesen - 518: 06 95 lsr r16 - 51a: 08 94 sec - 51c: e1 08 sbc r14, r1 - 51e: f1 08 sbc r15, r1 - 520: e1 14 cp r14, r1 - 522: f1 04 cpc r15, r1 - 524: 91 f6 brne .-92 ; 0x4ca - while (!(ADB_PIN & ADB_BIT)) - ; - if (t0ext() < (ADB_IMPULS_KURZ + ADB_IMPULS_LANG) / 2) - adb_werte[z_byte] += bitpos; - } - z_byte++; - 526: 81 2f mov r24, r17 - 528: 8f 5f subi r24, 0xFF ; 255 - 52a: 21 96 adiw r28, 0x01 ; 1 - } while (ADB_PIN & ADB_BIT); - while (!(ADB_PIN & ADB_BIT)) - ; // Start Bit - - z_byte = 1; - while (z_byte < MAX_ADB) { - 52c: 89 30 cpi r24, 0x09 ; 9 - 52e: 39 f6 brne .-114 ; 0x4be - 530: 01 c0 rjmp .+2 ; 0x534 <__stack+0x35> - // TCCR0 = ADB_VORTEILER_A_BIT; // micha modifikation - t0rst(); // TCNT0 = 0; - - do { - if (t0ext() > ADB_IMPULS_TLT) { - return (0); - 532: 10 e0 ldi r17, 0x00 ; 0 - adb_werte[z_byte] += bitpos; - } - z_byte++; - } - return (z_byte - 1); -} - 534: 81 2f mov r24, r17 - 536: df 91 pop r29 - 538: cf 91 pop r28 - 53a: 1f 91 pop r17 - 53c: 0f 91 pop r16 - 53e: ff 90 pop r15 - 540: ef 90 pop r14 - 542: df 90 pop r13 - 544: 08 95 ret - -00000546 : - -void touchpad_init(void) { - // Eingänge - ADB_PDIR &= ~ADB_BIT; - 546: 50 98 cbi 0x0a, 0 ; 10 - - // Pull Up einschalten - ADB_POUT |= ADB_BIT; - 548: 58 9a sbi 0x0b, 0 ; 11 - - //enable timer0 interrupt - TIMSK0 |= (1 << TOIE0); - 54a: ee e6 ldi r30, 0x6E ; 110 - 54c: f0 e0 ldi r31, 0x00 ; 0 - 54e: 80 81 ld r24, Z - 550: 81 60 ori r24, 0x01 ; 1 - 552: 80 83 st Z, r24 -} - 554: 08 95 ret - -00000556 : - -uint8_t touchpad_read(void) { - adb_werte[0] = COM_TALK0; - 556: 8c e3 ldi r24, 0x3C ; 60 - 558: 80 93 ad 02 sts 0x02AD, r24 - adb_data_length = adb(); - 55c: e4 de rcall .-568 ; 0x326 - 55e: 80 93 c7 02 sts 0x02C7, r24 - return adb_data_length; - 562: 80 91 c7 02 lds r24, 0x02C7 -} - 566: 08 95 ret - -00000568 : - _delay_ms(100); -} - -void touchpad_set_rel_mode_100dpi(void) { - // Auf Relativmodus umschalten - adb_werte[0] = COM_LISTEN3; - 568: 8b e3 ldi r24, 0x3B ; 59 - 56a: 80 93 ad 02 sts 0x02AD, r24 - adb_werte[1] = BITS(0110,0011); - 56e: 83 e6 ldi r24, 0x63 ; 99 - 570: 80 93 ae 02 sts 0x02AE, r24 - adb_werte[2] = 1; //default modus: 100 dpi mouse - 574: 81 e0 ldi r24, 0x01 ; 1 - 576: 80 93 af 02 sts 0x02AF, r24 - adb(); - 57a: d5 de rcall .-598 ; 0x326 - #else - //round up by default - __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); - #endif - - __builtin_avr_delay_cycles(__ticks_dc); - 57c: 8f ef ldi r24, 0xFF ; 255 - 57e: 91 ee ldi r25, 0xE1 ; 225 - 580: a4 e0 ldi r26, 0x04 ; 4 - 582: 81 50 subi r24, 0x01 ; 1 - 584: 90 40 sbci r25, 0x00 ; 0 - 586: a0 40 sbci r26, 0x00 ; 0 - 588: e1 f7 brne .-8 ; 0x582 - 58a: 00 c0 rjmp .+0 ; 0x58c - 58c: 00 00 nop - _delay_ms(100); - -} - 58e: 08 95 ret - -00000590 : - return ((adb_werte[4] & 0b01110000) << 6) - | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); -} - -int8_t delta_y(void) { - if(adb_data_length ==0) { - 590: 80 91 c7 02 lds r24, 0x02C7 - 594: 88 23 and r24, r24 - 596: 51 f0 breq .+20 ; 0x5ac - return 0; - } - if (adb_werte[1] & 0b01000000) { - 598: 80 91 ae 02 lds r24, 0x02AE - 59c: 86 ff sbrs r24, 6 - 59e: 04 c0 rjmp .+8 ; 0x5a8 - return -((128 - adb_werte[1]) & 0b00111111); - 5a0: 81 95 neg r24 - 5a2: 8f 73 andi r24, 0x3F ; 63 - 5a4: 81 95 neg r24 - 5a6: 08 95 ret - } else { - return adb_werte[1] & 0b00111111; - 5a8: 8f 73 andi r24, 0x3F ; 63 - 5aa: 08 95 ret - | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); -} - -int8_t delta_y(void) { - if(adb_data_length ==0) { - return 0; - 5ac: 80 e0 ldi r24, 0x00 ; 0 - if (adb_werte[1] & 0b01000000) { - return -((128 - adb_werte[1]) & 0b00111111); - } else { - return adb_werte[1] & 0b00111111; - } -} - 5ae: 08 95 ret - -000005b0 : - -int8_t delta_x(void) { - if(adb_data_length ==0) { - 5b0: 80 91 c7 02 lds r24, 0x02C7 - 5b4: 88 23 and r24, r24 - 5b6: 51 f0 breq .+20 ; 0x5cc - return 0; - } - if (adb_werte[2] & 0b01000000) { - 5b8: 80 91 af 02 lds r24, 0x02AF - 5bc: 86 ff sbrs r24, 6 - 5be: 04 c0 rjmp .+8 ; 0x5c8 - return -((128 - adb_werte[2]) & 0b00111111); - 5c0: 81 95 neg r24 - 5c2: 8f 73 andi r24, 0x3F ; 63 - 5c4: 81 95 neg r24 - 5c6: 08 95 ret - } else { - return adb_werte[2] & 0b00111111; - 5c8: 8f 73 andi r24, 0x3F ; 63 - 5ca: 08 95 ret - } -} - -int8_t delta_x(void) { - if(adb_data_length ==0) { - return 0; - 5cc: 80 e0 ldi r24, 0x00 ; 0 - if (adb_werte[2] & 0b01000000) { - return -((128 - adb_werte[2]) & 0b00111111); - } else { - return adb_werte[2] & 0b00111111; - } -} - 5ce: 08 95 ret - -000005d0 : - -void init_leds(void) { - DDRLED0 |= 1<: - - -void set_led0(uint8_t value){ - PORTLED0 &= ~(1<: - -void set_led1(uint8_t value){ - PORTLED1 &= ~(1<: - -void set_led2(uint8_t value){ - PORTLED2 &= ~(1< - 60c: 28 2b or r18, r24 - 60e: 2b b9 out 0x0b, r18 ; 11 -} - 610: 08 95 ret - -00000612 : - - -void init_sw(void) { - DDRSW0 &= ~(1<: - - -uint8_t sw0_state(void){ - return (PINSW0 & (1<>SW0; - 620: 89 b1 in r24, 0x09 ; 9 - 622: 90 e0 ldi r25, 0x00 ; 0 - 624: 80 71 andi r24, 0x10 ; 16 - 626: 90 70 andi r25, 0x00 ; 0 - 628: a4 e0 ldi r26, 0x04 ; 4 - 62a: 95 95 asr r25 - 62c: 87 95 ror r24 - 62e: aa 95 dec r26 - 630: e1 f7 brne .-8 ; 0x62a -} - 632: 08 95 ret - -00000634 : - -uint8_t sw1_state(void){ - return (PINSW1 & (1<>SW1; - 634: 86 b1 in r24, 0x06 ; 6 - 636: 90 e0 ldi r25, 0x00 ; 0 - 638: 80 72 andi r24, 0x20 ; 32 - 63a: 90 70 andi r25, 0x00 ; 0 - 63c: b5 e0 ldi r27, 0x05 ; 5 - 63e: 95 95 asr r25 - 640: 87 95 ror r24 - 642: ba 95 dec r27 - 644: e1 f7 brne .-8 ; 0x63e -} - 646: 08 95 ret - -00000648 : - -uint8_t sw2_state(void){ - return (PINSW2 & (1<>SW2; - 648: 86 b1 in r24, 0x06 ; 6 - 64a: 90 e0 ldi r25, 0x00 ; 0 - 64c: 80 71 andi r24, 0x10 ; 16 - 64e: 90 70 andi r25, 0x00 ; 0 - 650: 24 e0 ldi r18, 0x04 ; 4 - 652: 95 95 asr r25 - 654: 87 95 ror r24 - 656: 2a 95 dec r18 - 658: e1 f7 brne .-8 ; 0x652 - 65a: 08 95 ret - -0000065c : - - - - - -void Usb2SerialTask(void) { - 65c: 1f 93 push r17 - static inline uint_reg_t GetGlobalInterruptMask(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - return SREG; - 65e: 8f b7 in r24, 0x3f ; 63 - static inline void GlobalInterruptDisable(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - cli(); - 660: f8 94 cli - uint16_t Count; - - uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); - GlobalInterruptDisable(); - - Count = Buffer->Count; - 662: 20 91 5c 01 lds r18, 0x015C - 666: 30 91 5d 01 lds r19, 0x015D - static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - SREG = GlobalIntState; - 66a: 8f bf out 0x3f, r24 ; 63 - - /* Only try to read in bytes from the CDC interface if the transmit buffer is not full */ - if (!(RingBuffer_IsFull(&USBtoUSART_Buffer))) - 66c: 80 91 5a 01 lds r24, 0x015A - 670: 90 91 5b 01 lds r25, 0x015B - 674: 28 17 cp r18, r24 - 676: 39 07 cpc r19, r25 - 678: 51 f0 breq .+20 ; 0x68e - { - int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); - 67a: 88 e2 ldi r24, 0x28 ; 40 - 67c: 91 e0 ldi r25, 0x01 ; 1 - 67e: 0e 94 56 0d call 0x1aac ; 0x1aac - 682: bc 01 movw r22, r24 - - /* Read bytes from the USB OUT endpoint into the USART transmit buffer */ - if (!(ReceivedByte < 0)) - 684: 97 fd sbrc r25, 7 - 686: 03 c0 rjmp .+6 ; 0x68e - RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte); - 688: 82 e5 ldi r24, 0x52 ; 82 - 68a: 91 e0 ldi r25, 0x01 ; 1 - 68c: 71 dd rcall .-1310 ; 0x170 - static inline uint_reg_t GetGlobalInterruptMask(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - return SREG; - 68e: 2f b7 in r18, 0x3f ; 63 - static inline void GlobalInterruptDisable(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - cli(); - 690: f8 94 cli - 692: 80 91 e8 01 lds r24, 0x01E8 - 696: 90 91 e9 01 lds r25, 0x01E9 - static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - SREG = GlobalIntState; - 69a: 2f bf out 0x3f, r18 ; 63 - } - - /* Check if the UART receive buffer flush timer has expired or the buffer is nearly full */ - uint16_t BufferCount = RingBuffer_GetCount(&USARTtoUSB_Buffer); - if (BufferCount) - 69c: 00 97 sbiw r24, 0x00 ; 0 - 69e: 09 f1 breq .+66 ; 0x6e2 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 6a0: 20 91 29 01 lds r18, 0x0129 - 6a4: 2f 70 andi r18, 0x0F ; 15 - 6a6: 20 93 e9 00 sts 0x00E9, r18 - * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. - */ - static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsINReady(void) - { - return ((UEINTX & (1 << TXINI)) ? true : false); - 6aa: 20 91 e8 00 lds r18, 0x00E8 - { - Endpoint_SelectEndpoint(VirtualSerial_CDC_Interface.Config.DataINEndpoint.Address); - - /* Check if a packet is already enqueued to the host - if so, we shouldn't try to send more data - * until it completes as there is a chance nothing is listening and a lengthy timeout could occur */ - if (Endpoint_IsINReady()) - 6ae: 20 ff sbrs r18, 0 - 6b0: 18 c0 rjmp .+48 ; 0x6e2 - { - /* Never send more than one bank size less one byte to the host at a time, so that we don't block - * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ - uint8_t BytesToSend = MIN(BufferCount, (CDC_TXRX_EPSIZE - 1)); - 6b2: 80 31 cpi r24, 0x10 ; 16 - 6b4: 91 05 cpc r25, r1 - 6b6: 10 f0 brcs .+4 ; 0x6bc - 6b8: 8f e0 ldi r24, 0x0F ; 15 - 6ba: 90 e0 ldi r25, 0x00 ; 0 - 6bc: 18 2f mov r17, r24 - - /* Read bytes from the USART receive buffer into the USB IN endpoint */ - while (BytesToSend--) - 6be: 0f c0 rjmp .+30 ; 0x6de - * \return Next data element stored in the buffer. - */ - static inline uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(1); - static inline uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer) - { - return *Buffer->Out; - 6c0: e0 91 e0 01 lds r30, 0x01E0 - 6c4: f0 91 e1 01 lds r31, 0x01E1 - { - /* Try to send the next byte of data to the host, abort if there is an error without dequeuing */ - if (CDC_Device_SendByte(&VirtualSerial_CDC_Interface, - 6c8: 88 e2 ldi r24, 0x28 ; 40 - 6ca: 91 e0 ldi r25, 0x01 ; 1 - 6cc: 60 81 ld r22, Z - 6ce: 0e 94 e5 0c call 0x19ca ; 0x19ca - 6d2: 11 50 subi r17, 0x01 ; 1 - 6d4: 88 23 and r24, r24 - 6d6: 29 f4 brne .+10 ; 0x6e2 - { - break; - } - - /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */ - RingBuffer_Remove(&USARTtoUSB_Buffer); - 6d8: 8e ed ldi r24, 0xDE ; 222 - 6da: 91 e0 ldi r25, 0x01 ; 1 - 6dc: 64 dd rcall .-1336 ; 0x1a6 - /* Never send more than one bank size less one byte to the host at a time, so that we don't block - * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ - uint8_t BytesToSend = MIN(BufferCount, (CDC_TXRX_EPSIZE - 1)); - - /* Read bytes from the USART receive buffer into the USB IN endpoint */ - while (BytesToSend--) - 6de: 11 23 and r17, r17 - 6e0: 79 f7 brne .-34 ; 0x6c0 -// if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) { -// Serial_SendByte(RingBuffer_Remove(&USBtoUSART_Buffer)); -// dummy = RingBuffer_Remove(&USBtoUSART_Buffer); -// sendPayload(&dummy,1,0); -// } - CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - 6e2: 88 e2 ldi r24, 0x28 ; 40 - 6e4: 91 e0 ldi r25, 0x01 ; 1 - 6e6: 0e 94 3f 0d call 0x1a7e ; 0x1a7e - USB_USBTask(); - 6ea: 0e 94 f9 0b call 0x17f2 ; 0x17f2 - -} - 6ee: 1f 91 pop r17 - 6f0: 08 95 ret - -000006f2 : - -/** 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); - 6f2: 84 b7 in r24, 0x34 ; 52 - 6f4: 87 7f andi r24, 0xF7 ; 247 - 6f6: 84 bf out 0x34, r24 ; 52 - wdt_disable(); - 6f8: 88 e1 ldi r24, 0x18 ; 24 - 6fa: 0f b6 in r0, 0x3f ; 63 - 6fc: f8 94 cli - 6fe: 80 93 60 00 sts 0x0060, r24 - 702: 10 92 60 00 sts 0x0060, r1 - 706: 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__ ( - 708: 90 e0 ldi r25, 0x00 ; 0 - 70a: 80 e8 ldi r24, 0x80 ; 128 - 70c: 0f b6 in r0, 0x3f ; 63 - 70e: f8 94 cli - 710: 80 93 61 00 sts 0x0061, r24 - 714: 90 93 61 00 sts 0x0061, r25 - 718: 0f be out 0x3f, r0 ; 63 - clock_prescale_set(clock_div_1); - - /* Hardware Initialization */ -// LEDs_Init(); - USB_Init(); -} - 71a: 1a c6 rjmp .+3124 ; 0x1350 - -0000071c : - -/** Event handler for the library USB Connection event. */ -void EVENT_USB_Device_Connect(void) -{ -// LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); -} - 71c: 08 95 ret - -0000071e : - -/** Event handler for the library USB Disconnection event. */ -void EVENT_USB_Device_Disconnect(void) -{ -// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); -} - 71e: 08 95 ret - -00000720 : -/** Event handler for the library USB Configuration Changed event. */ -void EVENT_USB_Device_ConfigurationChanged(void) -{ - bool ConfigSuccess = true; - - ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); - 720: 88 e2 ldi r24, 0x28 ; 40 - 722: 91 e0 ldi r25, 0x01 ; 1 - 724: 0c 94 c1 0c jmp 0x1982 ; 0x1982 - -00000728 : -} - -/** Event handler for the library USB Control Request reception event. */ -void EVENT_USB_Device_ControlRequest(void) -{ - CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); - 728: 88 e2 ldi r24, 0x28 ; 40 - 72a: 91 e0 ldi r25, 0x01 ; 1 - 72c: 0c 94 14 0c jmp 0x1828 ; 0x1828 - -00000730 <__vector_23>: - -/** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer - * for later transmission to the host. - */ -ISR(USART1_RX_vect, ISR_BLOCK) -{ - 730: 1f 92 push r1 - 732: 0f 92 push r0 - 734: 0f b6 in r0, 0x3f ; 63 - 736: 0f 92 push r0 - 738: 11 24 eor r1, r1 - 73a: 2f 93 push r18 - 73c: 3f 93 push r19 - 73e: 4f 93 push r20 - 740: 5f 93 push r21 - 742: 6f 93 push r22 - 744: 7f 93 push r23 - 746: 8f 93 push r24 - 748: 9f 93 push r25 - 74a: af 93 push r26 - 74c: bf 93 push r27 - 74e: ef 93 push r30 - 750: ff 93 push r31 - uint8_t ReceivedByte = UDR1; - 752: 60 91 ce 00 lds r22, 0x00CE - - if (USB_DeviceState == DEVICE_STATE_Configured) - 756: 8e b3 in r24, 0x1e ; 30 - 758: 84 30 cpi r24, 0x04 ; 4 - 75a: 19 f4 brne .+6 ; 0x762 <__vector_23+0x32> - RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte); - 75c: 8e ed ldi r24, 0xDE ; 222 - 75e: 91 e0 ldi r25, 0x01 ; 1 - 760: 07 dd rcall .-1522 ; 0x170 -} - 762: ff 91 pop r31 - 764: ef 91 pop r30 - 766: bf 91 pop r27 - 768: af 91 pop r26 - 76a: 9f 91 pop r25 - 76c: 8f 91 pop r24 - 76e: 7f 91 pop r23 - 770: 6f 91 pop r22 - 772: 5f 91 pop r21 - 774: 4f 91 pop r20 - 776: 3f 91 pop r19 - 778: 2f 91 pop r18 - 77a: 0f 90 pop r0 - 77c: 0f be out 0x3f, r0 ; 63 - 77e: 0f 90 pop r0 - 780: 1f 90 pop r1 - 782: 18 95 reti - -00000784 : -/** Event handler for the CDC Class driver Line Encoding Changed event. - * - * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced - */ -void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - 784: 8f 92 push r8 - 786: 9f 92 push r9 - 788: af 92 push r10 - 78a: bf 92 push r11 - 78c: cf 92 push r12 - 78e: df 92 push r13 - 790: ef 92 push r14 - 792: ff 92 push r15 - 794: 1f 93 push r17 - 796: fc 01 movw r30, r24 - uint8_t ConfigMask = 0; - - switch (CDCInterfaceInfo->State.LineEncoding.ParityType) - 798: a1 8d ldd r26, Z+25 ; 0x19 - 79a: a1 50 subi r26, 0x01 ; 1 - 79c: a2 30 cpi r26, 0x02 ; 2 - 79e: 28 f4 brcc .+10 ; 0x7aa - 7a0: b0 e0 ldi r27, 0x00 ; 0 - 7a2: a9 5b subi r26, 0xB9 ; 185 - 7a4: be 4f sbci r27, 0xFE ; 254 - 7a6: 1c 91 ld r17, X - 7a8: 01 c0 rjmp .+2 ; 0x7ac - 7aa: 10 e0 ldi r17, 0x00 ; 0 - case CDC_PARITY_Even: - ConfigMask = (1 << UPM11); - break; - } - - if (CDCInterfaceInfo->State.LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits) - 7ac: 80 8d ldd r24, Z+24 ; 0x18 - 7ae: 82 30 cpi r24, 0x02 ; 2 - 7b0: 09 f4 brne .+2 ; 0x7b4 - ConfigMask |= (1 << USBS1); - 7b2: 18 60 ori r17, 0x08 ; 8 - - switch (CDCInterfaceInfo->State.LineEncoding.DataBits) - 7b4: 82 8d ldd r24, Z+26 ; 0x1a - 7b6: 87 30 cpi r24, 0x07 ; 7 - 7b8: 31 f0 breq .+12 ; 0x7c6 - 7ba: 88 30 cpi r24, 0x08 ; 8 - 7bc: 31 f0 breq .+12 ; 0x7ca - 7be: 86 30 cpi r24, 0x06 ; 6 - 7c0: 29 f4 brne .+10 ; 0x7cc - { - case 6: - ConfigMask |= (1 << UCSZ10); - 7c2: 12 60 ori r17, 0x02 ; 2 - break; - 7c4: 03 c0 rjmp .+6 ; 0x7cc - case 7: - ConfigMask |= (1 << UCSZ11); - 7c6: 14 60 ori r17, 0x04 ; 4 - break; - 7c8: 01 c0 rjmp .+2 ; 0x7cc - case 8: - ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10)); - 7ca: 16 60 ori r17, 0x06 ; 6 - break; - } - - /* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */ - UCSR1B = 0; - 7cc: 10 92 c9 00 sts 0x00C9, r1 - UCSR1A = 0; - 7d0: 10 92 c8 00 sts 0x00C8, r1 - UCSR1C = 0; - 7d4: 10 92 ca 00 sts 0x00CA, r1 - - /* Set the new baud rate before configuring the USART */ - UBRR1 = SERIAL_2X_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 7d8: c4 88 ldd r12, Z+20 ; 0x14 - 7da: d5 88 ldd r13, Z+21 ; 0x15 - 7dc: e6 88 ldd r14, Z+22 ; 0x16 - 7de: f7 88 ldd r15, Z+23 ; 0x17 - 7e0: c7 01 movw r24, r14 - 7e2: b6 01 movw r22, r12 - 7e4: 96 95 lsr r25 - 7e6: 87 95 ror r24 - 7e8: 77 95 ror r23 - 7ea: 67 95 ror r22 - 7ec: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 7f0: 20 e0 ldi r18, 0x00 ; 0 - 7f2: 34 e2 ldi r19, 0x24 ; 36 - 7f4: 44 ef ldi r20, 0xF4 ; 244 - 7f6: 59 e4 ldi r21, 0x49 ; 73 - 7f8: 0e 94 85 0d call 0x1b0a ; 0x1b0a <__addsf3> - 7fc: 4b 01 movw r8, r22 - 7fe: 5c 01 movw r10, r24 - 800: c7 01 movw r24, r14 - 802: b6 01 movw r22, r12 - 804: 0e 94 81 0e call 0x1d02 ; 0x1d02 <__floatunsisf> - 808: 9b 01 movw r18, r22 - 80a: ac 01 movw r20, r24 - 80c: c5 01 movw r24, r10 - 80e: b4 01 movw r22, r8 - 810: 0e 94 ed 0d call 0x1bda ; 0x1bda <__divsf3> - 814: 20 e0 ldi r18, 0x00 ; 0 - 816: 30 e0 ldi r19, 0x00 ; 0 - 818: 40 e8 ldi r20, 0x80 ; 128 - 81a: 5f e3 ldi r21, 0x3F ; 63 - 81c: 0e 94 84 0d call 0x1b08 ; 0x1b08 <__subsf3> - 820: 0e 94 55 0e call 0x1caa ; 0x1caa <__fixunssfsi> - 824: 70 93 cd 00 sts 0x00CD, r23 - 828: 60 93 cc 00 sts 0x00CC, r22 - - /* Reconfigure the USART in double speed mode for a wider baud rate range at the expense of accuracy */ - UCSR1C = ConfigMask; - 82c: 10 93 ca 00 sts 0x00CA, r17 - UCSR1A = (1 << U2X1); - 830: 82 e0 ldi r24, 0x02 ; 2 - 832: 80 93 c8 00 sts 0x00C8, r24 - UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); - 836: 88 e9 ldi r24, 0x98 ; 152 - 838: 80 93 c9 00 sts 0x00C9, r24 -} - 83c: 1f 91 pop r17 - 83e: ff 90 pop r15 - 840: ef 90 pop r14 - 842: df 90 pop r13 - 844: cf 90 pop r12 - 846: bf 90 pop r11 - 848: af 90 pop r10 - 84a: 9f 90 pop r9 - 84c: 8f 90 pop r8 - 84e: 08 95 ret - -00000850 : - - - - -void uart_putc(unsigned char data) -{ - 850: 68 2f mov r22, r24 - - if (USB_DeviceState == DEVICE_STATE_Configured){ - 852: 8e b3 in r24, 0x1e ; 30 - 854: 84 30 cpi r24, 0x04 ; 4 - 856: 19 f4 brne .+6 ; 0x85e - RingBuffer_Insert(&USARTtoUSB_Buffer, data); - 858: 8e ed ldi r24, 0xDE ; 222 - 85a: 91 e0 ldi r25, 0x01 ; 1 - 85c: 89 cc rjmp .-1774 ; 0x170 - 85e: 08 95 ret - -00000860 : - } - -} - -void uart_puts(const char *s ) -{ - 860: ef 92 push r14 - 862: ff 92 push r15 - 864: cf 93 push r28 - 866: df 93 push r29 - 868: e8 2e mov r14, r24 - 86a: e7 01 movw r28, r14 - 86c: 7e 01 movw r14, r28 - 86e: f9 2e mov r15, r25 - 870: e7 01 movw r28, r14 - while (*s) - 872: 01 c0 rjmp .+2 ; 0x876 - uart_putc(*s++); - 874: ed df rcall .-38 ; 0x850 - -} - -void uart_puts(const char *s ) -{ - while (*s) - 876: 89 91 ld r24, Y+ - 878: 88 23 and r24, r24 - 87a: e1 f7 brne .-8 ; 0x874 - uart_putc(*s++); - -}/* uart_puts */ - 87c: df 91 pop r29 - 87e: cf 91 pop r28 - 880: ff 90 pop r15 - 882: ef 90 pop r14 - 884: 08 95 ret - -00000886 : - - -// convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { - 886: 2f 92 push r2 - 888: 3f 92 push r3 - 88a: 4f 92 push r4 - 88c: 5f 92 push r5 - 88e: 6f 92 push r6 - 890: 7f 92 push r7 - 892: 8f 92 push r8 - 894: 9f 92 push r9 - 896: af 92 push r10 - 898: bf 92 push r11 - 89a: cf 92 push r12 - 89c: df 92 push r13 - 89e: ef 92 push r14 - 8a0: ff 92 push r15 - 8a2: 0f 93 push r16 - 8a4: 1f 93 push r17 - 8a6: cf 93 push r28 - 8a8: df 93 push r29 - 8aa: 6b 01 movw r12, r22 - 8ac: 7c 01 movw r14, r24 - int8_t i; // schleifenzähler - - string[no_digits] = '\0'; // String Terminator - 8ae: 82 2f mov r24, r18 - 8b0: 90 e0 ldi r25, 0x00 ; 0 - 8b2: fa 01 movw r30, r20 - 8b4: e8 0f add r30, r24 - 8b6: f9 1f adc r31, r25 - 8b8: 10 82 st Z, r1 - for (i = (no_digits - 1); i >= 0; i--) { - 8ba: 12 2f mov r17, r18 - 8bc: 11 50 subi r17, 0x01 ; 1 - -}/* uart_puts */ - - -// convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { - 8be: 41 2e mov r4, r17 - 8c0: 55 24 eor r5, r5 - 8c2: 47 fc sbrc r4, 7 - 8c4: 50 94 com r5 - 8c6: ea 01 movw r28, r20 - 8c8: c4 0d add r28, r4 - 8ca: d5 1d adc r29, r5 - int8_t i; // schleifenzähler - - string[no_digits] = '\0'; // String Terminator - for (i = (no_digits - 1); i >= 0; i--) { - 8cc: aa 24 eor r10, r10 - 8ce: bb 24 eor r11, r11 - if (zahl == 0 && i < (no_digits - 1)) { - string[i] = leading_char; - } else { - string[i] = (zahl % 10) + '0'; - 8d0: 4a e0 ldi r20, 0x0A ; 10 - 8d2: 64 2e mov r6, r20 - 8d4: 71 2c mov r7, r1 - 8d6: 81 2c mov r8, r1 - 8d8: 91 2c mov r9, r1 -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { - int8_t i; // schleifenzähler - - string[no_digits] = '\0'; // String Terminator - for (i = (no_digits - 1); i >= 0; i--) { - if (zahl == 0 && i < (no_digits - 1)) { - 8da: 1c 01 movw r2, r24 - 8dc: 08 94 sec - 8de: 21 08 sbc r2, r1 - 8e0: 31 08 sbc r3, r1 -// convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { - int8_t i; // schleifenzähler - - string[no_digits] = '\0'; // String Terminator - for (i = (no_digits - 1); i >= 0; i--) { - 8e2: 22 c0 rjmp .+68 ; 0x928 - if (zahl == 0 && i < (no_digits - 1)) { - 8e4: c1 14 cp r12, r1 - 8e6: d1 04 cpc r13, r1 - 8e8: e1 04 cpc r14, r1 - 8ea: f1 04 cpc r15, r1 - 8ec: 41 f4 brne .+16 ; 0x8fe - -}/* uart_puts */ - - -// convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { - 8ee: c5 01 movw r24, r10 - 8f0: 84 0d add r24, r4 - 8f2: 95 1d adc r25, r5 - int8_t i; // schleifenzähler - - string[no_digits] = '\0'; // String Terminator - for (i = (no_digits - 1); i >= 0; i--) { - if (zahl == 0 && i < (no_digits - 1)) { - 8f4: 82 15 cp r24, r2 - 8f6: 93 05 cpc r25, r3 - 8f8: 14 f4 brge .+4 ; 0x8fe - string[i] = leading_char; - 8fa: 08 83 st Y, r16 - 8fc: 08 c0 rjmp .+16 ; 0x90e - } else { - string[i] = (zahl % 10) + '0'; - 8fe: c7 01 movw r24, r14 - 900: b6 01 movw r22, r12 - 902: a4 01 movw r20, r8 - 904: 93 01 movw r18, r6 - 906: 0e 94 70 0f call 0x1ee0 ; 0x1ee0 <__udivmodsi4> - 90a: 60 5d subi r22, 0xD0 ; 208 - 90c: 68 83 st Y, r22 - } // Modulo rechnen, dann den ASCII-Code von '0' addieren - zahl /= 10; - 90e: c7 01 movw r24, r14 - 910: b6 01 movw r22, r12 - 912: a4 01 movw r20, r8 - 914: 93 01 movw r18, r6 - 916: 0e 94 70 0f call 0x1ee0 ; 0x1ee0 <__udivmodsi4> - 91a: 69 01 movw r12, r18 - 91c: 7a 01 movw r14, r20 -// convert an unsigned integer to string -void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits, char leading_char) { - int8_t i; // schleifenzähler - - string[no_digits] = '\0'; // String Terminator - for (i = (no_digits - 1); i >= 0; i--) { - 91e: 11 50 subi r17, 0x01 ; 1 - 920: 21 97 sbiw r28, 0x01 ; 1 - 922: 08 94 sec - 924: a1 08 sbc r10, r1 - 926: b1 08 sbc r11, r1 - 928: 17 ff sbrs r17, 7 - 92a: dc cf rjmp .-72 ; 0x8e4 - string[i] = (zahl % 10) + '0'; - } // Modulo rechnen, dann den ASCII-Code von '0' addieren - zahl /= 10; - } - -} - 92c: df 91 pop r29 - 92e: cf 91 pop r28 - 930: 1f 91 pop r17 - 932: 0f 91 pop r16 - 934: ff 90 pop r15 - 936: ef 90 pop r14 - 938: df 90 pop r13 - 93a: cf 90 pop r12 - 93c: bf 90 pop r11 - 93e: af 90 pop r10 - 940: 9f 90 pop r9 - 942: 8f 90 pop r8 - 944: 7f 90 pop r7 - 946: 6f 90 pop r6 - 948: 5f 90 pop r5 - 94a: 4f 90 pop r4 - 94c: 3f 90 pop r3 - 94e: 2f 90 pop r2 - 950: 08 95 ret - -00000952 : - -int8_t sign(int16_t x) { - return (x > 0) - (x < 0); - 952: 21 e0 ldi r18, 0x01 ; 1 - 954: 18 16 cp r1, r24 - 956: 19 06 cpc r1, r25 - 958: 0c f0 brlt .+2 ; 0x95c - 95a: 20 e0 ldi r18, 0x00 ; 0 - 95c: 89 2f mov r24, r25 - 95e: 88 1f adc r24, r24 - 960: 88 27 eor r24, r24 - 962: 88 1f adc r24, r24 -} - 964: 28 1b sub r18, r24 - 966: 82 2f mov r24, r18 - 968: 08 95 ret - -0000096a : - my_uitoa(abs(zahl),stringbuffer,no_digits,' '); - uart_puts(stringbuffer); -} - - -void uart_print_number_wlzeros(uint32_t zahl, uint8_t no_digits) { - 96a: 0f 93 push r16 - 96c: 24 2f mov r18, r20 - my_uitoa(abs(zahl),stringbuffer,no_digits,'0'); - 96e: 77 ff sbrs r23, 7 - 970: 03 c0 rjmp .+6 ; 0x978 - 972: 70 95 com r23 - 974: 61 95 neg r22 - 976: 7f 4f sbci r23, 0xFF ; 255 - 978: 88 27 eor r24, r24 - 97a: 77 fd sbrc r23, 7 - 97c: 80 95 com r24 - 97e: 98 2f mov r25, r24 - 980: 46 eb ldi r20, 0xB6 ; 182 - 982: 52 e0 ldi r21, 0x02 ; 2 - 984: 00 e3 ldi r16, 0x30 ; 48 - 986: 7f df rcall .-258 ; 0x886 - uart_puts(stringbuffer); - 988: 86 eb ldi r24, 0xB6 ; 182 - 98a: 92 e0 ldi r25, 0x02 ; 2 - 98c: 69 df rcall .-302 ; 0x860 -} - 98e: 0f 91 pop r16 - 990: 08 95 ret - -00000992 : - -void uart_print_signed_number(uint32_t zahl, uint8_t no_digits) { - 992: ff 92 push r15 - 994: 0f 93 push r16 - 996: 1f 93 push r17 - 998: 24 2f mov r18, r20 - my_uitoa(abs(zahl),stringbuffer,no_digits,' '); - 99a: f6 2e mov r15, r22 - 99c: 17 2f mov r17, r23 - 99e: 77 ff sbrs r23, 7 - 9a0: 03 c0 rjmp .+6 ; 0x9a8 - 9a2: 70 95 com r23 - 9a4: 61 95 neg r22 - 9a6: 7f 4f sbci r23, 0xFF ; 255 - 9a8: 88 27 eor r24, r24 - 9aa: 77 fd sbrc r23, 7 - 9ac: 80 95 com r24 - 9ae: 98 2f mov r25, r24 - 9b0: 46 eb ldi r20, 0xB6 ; 182 - 9b2: 52 e0 ldi r21, 0x02 ; 2 - 9b4: 00 e2 ldi r16, 0x20 ; 32 - 9b6: 67 df rcall .-306 ; 0x886 - if (sign(zahl) < 0) { - 9b8: 8f 2d mov r24, r15 - 9ba: 91 2f mov r25, r17 - 9bc: ca df rcall .-108 ; 0x952 - 9be: 87 ff sbrs r24, 7 - 9c0: 02 c0 rjmp .+4 ; 0x9c6 - uart_putc('-'); - 9c2: 8d e2 ldi r24, 0x2D ; 45 - 9c4: 01 c0 rjmp .+2 ; 0x9c8 - } else { - uart_putc('+'); - 9c6: 8b e2 ldi r24, 0x2B ; 43 - 9c8: 43 df rcall .-378 ; 0x850 - } - uart_puts(stringbuffer); - 9ca: 86 eb ldi r24, 0xB6 ; 182 - 9cc: 92 e0 ldi r25, 0x02 ; 2 - 9ce: 48 df rcall .-368 ; 0x860 - -} - 9d0: 1f 91 pop r17 - 9d2: 0f 91 pop r16 - 9d4: ff 90 pop r15 - 9d6: 08 95 ret - -000009d8 : - PORTY2 |= ((byte & (1<<2))>>2)<>3)< - set_y(0); - 9dc: 80 e0 ldi r24, 0x00 ; 0 - 9de: 37 dc rcall .-1938 ; 0x24e - DDRX0 |= (1<: - - - -uint8_t motor_step(uint8_t motor, int8_t direction) { // motor: M1 or M2, direction +1 or -1, 0 for coil deactivation - 9f2: 0f 93 push r16 - 9f4: 1f 93 push r17 - 9f6: 16 2f mov r17, r22 - 9f8: 82 30 cpi r24, 0x02 ; 2 - 9fa: 50 f4 brcc .+20 ; 0xa10 - 9fc: a8 2f mov r26, r24 - 9fe: b0 e0 ldi r27, 0x00 ; 0 - a00: aa 0f add r26, r26 - a02: bb 1f adc r27, r27 - a04: a7 5b subi r26, 0xB7 ; 183 - a06: be 4f sbci r27, 0xFE ; 254 - a08: 2d 91 ld r18, X+ - a0a: 3c 91 ld r19, X - a0c: 11 97 sbiw r26, 0x01 ; 1 - a0e: 02 c0 rjmp .+4 ; 0xa14 - a10: 2c ee ldi r18, 0xEC ; 236 - a12: 30 e0 ldi r19, 0x00 ; 0 - case Y: - setport = &set_y; - break; - } - - next_phase = (phase_memory[motor] + 4 + direction) % 4; - a14: e8 2f mov r30, r24 - a16: f0 e0 ldi r31, 0x00 ; 0 - a18: 81 2f mov r24, r17 - a1a: 99 27 eor r25, r25 - a1c: 87 fd sbrc r24, 7 - a1e: 90 95 com r25 - a20: 04 96 adiw r24, 0x04 ; 4 - a22: ea 55 subi r30, 0x5A ; 90 - a24: fd 4f sbci r31, 0xFD ; 253 - a26: 40 81 ld r20, Z - a28: 84 0f add r24, r20 - a2a: 91 1d adc r25, r1 - a2c: 64 e0 ldi r22, 0x04 ; 4 - a2e: 70 e0 ldi r23, 0x00 ; 0 - a30: 0e 94 5d 0f call 0x1eba ; 0x1eba <__divmodhi4> - phase_memory[motor] = next_phase; - a34: 80 83 st Z, r24 - - - next_pattern = phase_pattern[next_phase]; - a36: e8 2f mov r30, r24 - a38: f0 e0 ldi r31, 0x00 ; 0 - a3a: ed 5b subi r30, 0xBD ; 189 - a3c: fe 4f sbci r31, 0xFE ; 254 - a3e: 00 81 ld r16, Z - if (direction != 0) { - a40: 11 23 and r17, r17 - a42: 11 f0 breq .+4 ; 0xa48 - (*setport)(next_pattern); - a44: 80 2f mov r24, r16 - a46: 01 c0 rjmp .+2 ; 0xa4a - } else { - (*setport)(0); - a48: 80 e0 ldi r24, 0x00 ; 0 - a4a: f9 01 movw r30, r18 - a4c: 09 95 icall - } - - return next_pattern; - -} - a4e: 80 2f mov r24, r16 - a50: 1f 91 pop r17 - a52: 0f 91 pop r16 - a54: 08 95 ret - -00000a56 : - return val; -} - -#define PHASE_DELAY_MS 10 - -uint8_t move_plate(int16_t dx, int16_t dy){ - a56: 0f 93 push r16 - a58: 1f 93 push r17 - static int16_t todo_x,todo_y = 0; - int8_t signum; - uint8_t returnval = 0; - todo_x += dx; - a5a: 20 91 a4 02 lds r18, 0x02A4 - a5e: 30 91 a5 02 lds r19, 0x02A5 - a62: 28 0f add r18, r24 - a64: 39 1f adc r19, r25 - a66: 30 93 a5 02 sts 0x02A5, r19 - a6a: 20 93 a4 02 sts 0x02A4, r18 - todo_y += dy; - a6e: 80 91 a2 02 lds r24, 0x02A2 - a72: 90 91 a3 02 lds r25, 0x02A3 - a76: 86 0f add r24, r22 - a78: 97 1f adc r25, r23 - a7a: 90 93 a3 02 sts 0x02A3, r25 - a7e: 80 93 a2 02 sts 0x02A2, r24 - - signum = sign(todo_x); - a82: c9 01 movw r24, r18 - a84: 66 df rcall .-308 ; 0x952 - a86: 08 2f mov r16, r24 -#define PHASE_DELAY_MS 10 - -uint8_t move_plate(int16_t dx, int16_t dy){ - static int16_t todo_x,todo_y = 0; - int8_t signum; - uint8_t returnval = 0; - a88: 11 e0 ldi r17, 0x01 ; 1 - a8a: 88 23 and r24, r24 - a8c: 09 f4 brne .+2 ; 0xa90 - a8e: 10 e0 ldi r17, 0x00 ; 0 - - signum = sign(todo_x); - if(signum != 0) { - returnval++; - } - motor_step(X,signum); - a90: 80 e0 ldi r24, 0x00 ; 0 - a92: 60 2f mov r22, r16 - a94: ae df rcall .-164 ; 0x9f2 - todo_x -= signum; - a96: 60 2f mov r22, r16 - a98: 77 27 eor r23, r23 - a9a: 67 fd sbrc r22, 7 - a9c: 70 95 com r23 - a9e: 20 91 a4 02 lds r18, 0x02A4 - aa2: 30 91 a5 02 lds r19, 0x02A5 - aa6: 26 1b sub r18, r22 - aa8: 37 0b sbc r19, r23 - aaa: 30 93 a5 02 sts 0x02A5, r19 - aae: 20 93 a4 02 sts 0x02A4, r18 - - signum = sign(todo_y); - ab2: 80 91 a2 02 lds r24, 0x02A2 - ab6: 90 91 a3 02 lds r25, 0x02A3 - aba: 4b df rcall .-362 ; 0x952 - abc: 08 2f mov r16, r24 - if(signum != 0) { - abe: 81 11 cpse r24, r1 - returnval++; - ac0: 1f 5f subi r17, 0xFF ; 255 - } - motor_step(Y,signum); - ac2: 81 e0 ldi r24, 0x01 ; 1 - ac4: 60 2f mov r22, r16 - ac6: 95 df rcall .-214 ; 0x9f2 - todo_y -= signum; - ac8: 60 2f mov r22, r16 - aca: 77 27 eor r23, r23 - acc: 67 fd sbrc r22, 7 - ace: 70 95 com r23 - ad0: 20 91 a2 02 lds r18, 0x02A2 - ad4: 30 91 a3 02 lds r19, 0x02A3 - ad8: 26 1b sub r18, r22 - ada: 37 0b sbc r19, r23 - adc: 30 93 a3 02 sts 0x02A3, r19 - ae0: 20 93 a2 02 sts 0x02A2, r18 - ae4: 8f e3 ldi r24, 0x3F ; 63 - ae6: 9c e9 ldi r25, 0x9C ; 156 - ae8: 01 97 sbiw r24, 0x01 ; 1 - aea: f1 f7 brne .-4 ; 0xae8 - aec: 00 c0 rjmp .+0 ; 0xaee - aee: 00 00 nop - _delay_ms(PHASE_DELAY_MS); - - return returnval; // busy - -} - af0: 81 2f mov r24, r17 - af2: 1f 91 pop r17 - af4: 0f 91 pop r16 - af6: 08 95 ret - -00000af8 : - - -void print_steps_in_mm(int16_t steps) { - af8: 0f 93 push r16 - afa: 1f 93 push r17 - afc: 8c 01 movw r16, r24 - int16_t predot,postdot; - - predot = steps/24; - afe: 68 e1 ldi r22, 0x18 ; 24 - b00: 70 e0 ldi r23, 0x00 ; 0 - b02: 0e 94 5d 0f call 0x1eba ; 0x1eba <__divmodhi4> - postdot = ((abs(steps)%24)*417)/10; - uart_print_signed_number(predot,3); - b06: 88 27 eor r24, r24 - b08: 77 fd sbrc r23, 7 - b0a: 80 95 com r24 - b0c: 98 2f mov r25, r24 - b0e: 43 e0 ldi r20, 0x03 ; 3 - b10: 40 df rcall .-384 ; 0x992 - uart_putc('.'); - b12: 8e e2 ldi r24, 0x2E ; 46 - b14: 9d de rcall .-710 ; 0x850 - -void print_steps_in_mm(int16_t steps) { - int16_t predot,postdot; - - predot = steps/24; - postdot = ((abs(steps)%24)*417)/10; - b16: c8 01 movw r24, r16 - b18: 17 ff sbrs r17, 7 - b1a: 03 c0 rjmp .+6 ; 0xb22 - b1c: 90 95 com r25 - b1e: 81 95 neg r24 - b20: 9f 4f sbci r25, 0xFF ; 255 - b22: 68 e1 ldi r22, 0x18 ; 24 - b24: 70 e0 ldi r23, 0x00 ; 0 - b26: 0e 94 5d 0f call 0x1eba ; 0x1eba <__divmodhi4> - b2a: 61 ea ldi r22, 0xA1 ; 161 - b2c: 71 e0 ldi r23, 0x01 ; 1 - b2e: 0e 94 37 0f call 0x1e6e ; 0x1e6e <__mulhi3> - b32: 6a e0 ldi r22, 0x0A ; 10 - b34: 70 e0 ldi r23, 0x00 ; 0 - b36: 0e 94 5d 0f call 0x1eba ; 0x1eba <__divmodhi4> - uart_print_signed_number(predot,3); - uart_putc('.'); - uart_print_number_wlzeros(postdot,3); - b3a: 88 27 eor r24, r24 - b3c: 77 fd sbrc r23, 7 - b3e: 80 95 com r24 - b40: 98 2f mov r25, r24 - b42: 43 e0 ldi r20, 0x03 ; 3 - b44: 12 df rcall .-476 ; 0x96a - -} - b46: 1f 91 pop r17 - b48: 0f 91 pop r16 - b4a: 08 95 ret - -00000b4c : - -void pos_report(void){ - uart_puts("x_pos: "); - b4c: 80 e0 ldi r24, 0x00 ; 0 - b4e: 91 e0 ldi r25, 0x01 ; 1 - b50: 87 de rcall .-754 ; 0x860 -// uart_print_signed_number(plate_pos_x,6); - print_steps_in_mm(plate_pos_x); - b52: 80 91 4e 01 lds r24, 0x014E - b56: 90 91 4f 01 lds r25, 0x014F - b5a: ce df rcall .-100 ; 0xaf8 -// my_uitoa(plate_pos_x, stringbuffer, 6); -// uart_puts(stringbuffer); - uart_puts(" y_pos: "); - b5c: 88 e0 ldi r24, 0x08 ; 8 - b5e: 91 e0 ldi r25, 0x01 ; 1 - b60: 7f de rcall .-770 ; 0x860 -// uart_print_signed_number(plate_pos_y,6); - print_steps_in_mm(plate_pos_y); - b62: 80 91 50 01 lds r24, 0x0150 - b66: 90 91 51 01 lds r25, 0x0151 - b6a: c6 df rcall .-116 ; 0xaf8 - uart_puts("\r"); - b6c: 82 e1 ldi r24, 0x12 ; 18 - b6e: 91 e0 ldi r25, 0x01 ; 1 -} - b70: 77 ce rjmp .-786 ; 0x860 - -00000b72 : -#define POSITION 0 -#define GOTO 1 -#define MOVEREL 2 -#define SETZERO 3 - -void parse_command(void){ - b72: cf 92 push r12 - b74: df 92 push r13 - b76: ef 92 push r14 - b78: ff 92 push r15 - b7a: 0f 93 push r16 - b7c: 1f 93 push r17 - b7e: cf 93 push r28 - b80: df 93 push r29 - static inline uint_reg_t GetGlobalInterruptMask(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - return SREG; - b82: 2f b7 in r18, 0x3f ; 63 - static inline void GlobalInterruptDisable(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - cli(); - b84: f8 94 cli - uint16_t Count; - - uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); - GlobalInterruptDisable(); - - Count = Buffer->Count; - b86: 80 91 5c 01 lds r24, 0x015C - b8a: 90 91 5d 01 lds r25, 0x015D - static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - SREG = GlobalIntState; - b8e: 2f bf out 0x3f, r18 ; 63 - uint8_t action=0,axis=0; - int8_t num_sign = 1; - char byte; - - /* Load the next byte from the USART transmit buffer into the USART */ - if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) { - b90: 00 97 sbiw r24, 0x00 ; 0 - b92: 09 f4 brne .+2 ; 0xb96 - b94: 94 c1 rjmp .+808 ; 0xebe - byte = RingBuffer_Remove(&USBtoUSART_Buffer); - b96: 82 e5 ldi r24, 0x52 ; 82 - b98: 91 e0 ldi r25, 0x01 ; 1 - b9a: 05 db rcall .-2550 ; 0x1a6 - b9c: 18 2f mov r17, r24 - - if (byte == '\r' || byte == '\n') {// end of command, evaluate cemmand! - b9e: 8d 30 cpi r24, 0x0D ; 13 - ba0: 19 f0 breq .+6 ; 0xba8 - ba2: 8a 30 cpi r24, 0x0A ; 10 - ba4: 09 f0 breq .+2 ; 0xba8 - ba6: 74 c1 rjmp .+744 ; 0xe90 - uart_puts("\r\n"); - ba8: 84 e1 ldi r24, 0x14 ; 20 - baa: 91 e0 ldi r25, 0x01 ; 1 - bac: 59 de rcall .-846 ; 0x860 - cmdbuffer[cmdPos] = '\0'; // terminate new command string - bae: 80 91 6d 02 lds r24, 0x026D - bb2: e8 2f mov r30, r24 - bb4: f0 e0 ldi r31, 0x00 ; 0 - bb6: ee 57 subi r30, 0x7E ; 126 - bb8: fd 4f sbci r31, 0xFD ; 253 - bba: 10 82 st Z, r1 - curCmdLen = cmdPos; - bbc: 80 93 6c 02 sts 0x026C, r24 - cmdPos = 0; - bc0: 10 92 6d 02 sts 0x026D, r1 - - - if (cmdbuffer[0] == 'g' || cmdbuffer[0] == 'G') { // goto command - bc4: 80 91 82 02 lds r24, 0x0282 - bc8: 87 36 cpi r24, 0x67 ; 103 - bca: 59 f0 breq .+22 ; 0xbe2 - bcc: 87 34 cpi r24, 0x47 ; 71 - bce: 49 f0 breq .+18 ; 0xbe2 - action = GOTO; - } else if ( cmdbuffer[0] == 'm' || cmdbuffer[0] == 'M') { - bd0: 8d 36 cpi r24, 0x6D ; 109 - bd2: 49 f0 breq .+18 ; 0xbe6 - bd4: 8d 34 cpi r24, 0x4D ; 77 - bd6: 39 f0 breq .+14 ; 0xbe6 - action = MOVEREL; - } else if ( cmdbuffer[0] == 'z' || cmdbuffer[0] == 'Z' ) { - bd8: 8a 37 cpi r24, 0x7A ; 122 - bda: 39 f0 breq .+14 ; 0xbea - bdc: 8a 35 cpi r24, 0x5A ; 90 - bde: 39 f4 brne .+14 ; 0xbee - be0: 04 c0 rjmp .+8 ; 0xbea - curCmdLen = cmdPos; - cmdPos = 0; - - - if (cmdbuffer[0] == 'g' || cmdbuffer[0] == 'G') { // goto command - action = GOTO; - be2: 01 e0 ldi r16, 0x01 ; 1 - be4: 05 c0 rjmp .+10 ; 0xbf0 - } else if ( cmdbuffer[0] == 'm' || cmdbuffer[0] == 'M') { - action = MOVEREL; - be6: 02 e0 ldi r16, 0x02 ; 2 - be8: 03 c0 rjmp .+6 ; 0xbf0 - } else if ( cmdbuffer[0] == 'z' || cmdbuffer[0] == 'Z' ) { - action = SETZERO; - bea: 03 e0 ldi r16, 0x03 ; 3 - bec: 01 c0 rjmp .+2 ; 0xbf0 - } else { - action = POSITION; - bee: 00 e0 ldi r16, 0x00 ; 0 - } - - if (cmdbuffer[1] == 'x' || cmdbuffer[1] == 'X') { - bf0: 80 91 83 02 lds r24, 0x0283 - bf4: 88 37 cpi r24, 0x78 ; 120 - bf6: 39 f0 breq .+14 ; 0xc06 - bf8: 88 35 cpi r24, 0x58 ; 88 - bfa: 29 f0 breq .+10 ; 0xc06 - axis = X; - } else if (cmdbuffer[1] == 'y' || cmdbuffer[1] == 'Y') { - bfc: 89 37 cpi r24, 0x79 ; 121 - bfe: 29 f0 breq .+10 ; 0xc0a -#define POSITION 0 -#define GOTO 1 -#define MOVEREL 2 -#define SETZERO 3 - -void parse_command(void){ - c00: 11 e0 ldi r17, 0x01 ; 1 - c02: 89 35 cpi r24, 0x59 ; 89 - c04: 19 f0 breq .+6 ; 0xc0c - } else { - action = POSITION; - } - - if (cmdbuffer[1] == 'x' || cmdbuffer[1] == 'X') { - axis = X; - c06: 10 e0 ldi r17, 0x00 ; 0 - c08: 01 c0 rjmp .+2 ; 0xc0c - } else if (cmdbuffer[1] == 'y' || cmdbuffer[1] == 'Y') { - axis = Y; - c0a: 11 e0 ldi r17, 0x01 ; 1 - } - - // if you expect coordinate, parse number! - if (action == GOTO || action == MOVEREL){ - c0c: 80 2f mov r24, r16 - c0e: 81 50 subi r24, 0x01 ; 1 - c10: 82 30 cpi r24, 0x02 ; 2 - c12: 08 f0 brcs .+2 ; 0xc16 - c14: 6d c0 rjmp .+218 ; 0xcf0 - - predot = 0; - c16: 10 92 71 02 sts 0x0271, r1 - c1a: 10 92 70 02 sts 0x0270, r1 - postdot = 0; - c1e: 10 92 6f 02 sts 0x026F, r1 - c22: 10 92 6e 02 sts 0x026E, r1 - num_sign = 1; - num_start = 0; - c26: 10 92 6b 02 sts 0x026B, r1 - nums_found = 0; - c2a: 10 92 6a 02 sts 0x026A, r1 - - for (uint8_t i=2; i<=curCmdLen; i++) { - c2e: 72 e0 ldi r23, 0x02 ; 2 - c30: f7 2e mov r15, r23 - // if you expect coordinate, parse number! - if (action == GOTO || action == MOVEREL){ - - predot = 0; - postdot = 0; - num_sign = 1; - c32: dd 24 eor r13, r13 - c34: d3 94 inc r13 - predot = atoi(numbuffer); - } else { // its the postdot digits - uint8_t postdotlen = i-num_start; - if (postdotlen < 3){ // if too small ,fill with zeros - for( uint8_t j = postdotlen; j <=2; j++) { - numbuffer[j] = '0'; - c36: 60 e3 ldi r22, 0x30 ; 48 - c38: c6 2e mov r12, r22 - postdot = 0; - num_sign = 1; - num_start = 0; - nums_found = 0; - - for (uint8_t i=2; i<=curCmdLen; i++) { - c3a: 54 c0 rjmp .+168 ; 0xce4 - if ( num_start == 0 && cmdbuffer[i] == '-' ) { // if you find a minus before - c3c: e0 90 6b 02 lds r14, 0x026B - c40: ee 20 and r14, r14 - c42: 49 f4 brne .+18 ; 0xc56 - c44: ef 2d mov r30, r15 - c46: f0 e0 ldi r31, 0x00 ; 0 - c48: ee 57 subi r30, 0x7E ; 126 - c4a: fd 4f sbci r31, 0xFD ; 253 - c4c: 80 81 ld r24, Z - c4e: 8d 32 cpi r24, 0x2D ; 45 - c50: 11 f4 brne .+4 ; 0xc56 - // you find a digit, it's a negative number - num_sign = -1; - c52: dd 24 eor r13, r13 - c54: da 94 dec r13 - } - - if ( cmdbuffer[i] >= 48 && cmdbuffer[i] <= 57 ){ // is it a number? - c56: cf 2d mov r28, r15 - c58: d0 e0 ldi r29, 0x00 ; 0 - c5a: fe 01 movw r30, r28 - c5c: ee 57 subi r30, 0x7E ; 126 - c5e: fd 4f sbci r31, 0xFD ; 253 - c60: 80 81 ld r24, Z - c62: 80 53 subi r24, 0x30 ; 48 - c64: 8a 30 cpi r24, 0x0A ; 10 - c66: 28 f4 brcc .+10 ; 0xc72 - if ( num_start == 0) { // this is the first digit in the string - c68: ee 20 and r14, r14 - c6a: d9 f5 brne .+118 ; 0xce2 - num_start = i; - c6c: f0 92 6b 02 sts 0x026B, r15 - c70: 38 c0 rjmp .+112 ; 0xce2 - } - } else { // no digit! - if ( num_start != 0) { // digits have been found before - c72: ee 20 and r14, r14 - c74: b1 f1 breq .+108 ; 0xce2 - strncpy(numbuffer,cmdbuffer+num_start,i-num_start); // copy number found to - c76: 6e 2d mov r22, r14 - c78: 70 e0 ldi r23, 0x00 ; 0 - c7a: c6 1b sub r28, r22 - c7c: d7 0b sbc r29, r23 - c7e: 6e 57 subi r22, 0x7E ; 126 - c80: 7d 4f sbci r23, 0xFD ; 253 - c82: 82 e7 ldi r24, 0x72 ; 114 - c84: 92 e0 ldi r25, 0x02 ; 2 - c86: ae 01 movw r20, r28 - c88: 0e 94 af 0f call 0x1f5e ; 0x1f5e - // numbuffer - numbuffer[i-num_start] = '\0'; // make sure it's always a terminated string - c8c: ce 58 subi r28, 0x8E ; 142 - c8e: dd 4f sbci r29, 0xFD ; 253 - c90: 18 82 st Y, r1 - nums_found++; - c92: 80 91 6a 02 lds r24, 0x026A - c96: 8f 5f subi r24, 0xFF ; 255 - c98: 80 93 6a 02 sts 0x026A, r24 - if(nums_found == 1) { // its the predot digits - c9c: 81 30 cpi r24, 0x01 ; 1 - c9e: 49 f4 brne .+18 ; 0xcb2 - predot = atoi(numbuffer); - ca0: 82 e7 ldi r24, 0x72 ; 114 - ca2: 92 e0 ldi r25, 0x02 ; 2 - ca4: 0e 94 92 0f call 0x1f24 ; 0x1f24 - ca8: 90 93 71 02 sts 0x0271, r25 - cac: 80 93 70 02 sts 0x0270, r24 - cb0: 16 c0 rjmp .+44 ; 0xcde - } else { // its the postdot digits - uint8_t postdotlen = i-num_start; - cb2: 8f 2d mov r24, r15 - cb4: 8e 19 sub r24, r14 - if (postdotlen < 3){ // if too small ,fill with zeros - cb6: 83 30 cpi r24, 0x03 ; 3 - cb8: 40 f4 brcc .+16 ; 0xcca - for( uint8_t j = postdotlen; j <=2; j++) { - numbuffer[j] = '0'; - cba: e8 2f mov r30, r24 - cbc: f0 e0 ldi r31, 0x00 ; 0 - cbe: ee 58 subi r30, 0x8E ; 142 - cc0: fd 4f sbci r31, 0xFD ; 253 - cc2: c0 82 st Z, r12 - if(nums_found == 1) { // its the predot digits - predot = atoi(numbuffer); - } else { // its the postdot digits - uint8_t postdotlen = i-num_start; - if (postdotlen < 3){ // if too small ,fill with zeros - for( uint8_t j = postdotlen; j <=2; j++) { - cc4: 8f 5f subi r24, 0xFF ; 255 - cc6: 83 30 cpi r24, 0x03 ; 3 - cc8: c1 f7 brne .-16 ; 0xcba - numbuffer[j] = '0'; - } - } - // crop the number to three post dot digits - numbuffer[3] = '\0'; - cca: 10 92 75 02 sts 0x0275, r1 - - postdot = atoi(numbuffer); - cce: 82 e7 ldi r24, 0x72 ; 114 - cd0: 92 e0 ldi r25, 0x02 ; 2 - cd2: 0e 94 92 0f call 0x1f24 ; 0x1f24 - cd6: 90 93 6f 02 sts 0x026F, r25 - cda: 80 93 6e 02 sts 0x026E, r24 - } - num_start = 0; - cde: 10 92 6b 02 sts 0x026B, r1 - postdot = 0; - num_sign = 1; - num_start = 0; - nums_found = 0; - - for (uint8_t i=2; i<=curCmdLen; i++) { - ce2: f3 94 inc r15 - ce4: 80 91 6c 02 lds r24, 0x026C - ce8: 8f 15 cp r24, r15 - cea: 08 f0 brcs .+2 ; 0xcee - cec: a7 cf rjmp .-178 ; 0xc3c - cee: 02 c0 rjmp .+4 ; 0xcf4 - static char cmdbuffer[32]; - static char numbuffer[16]; - static uint16_t predot = 0,postdot = 0; - static uint8_t cmdPos, curCmdLen, num_start = 0, nums_found = 0; - uint8_t action=0,axis=0; - int8_t num_sign = 1; - cf0: dd 24 eor r13, r13 - cf2: d3 94 inc r13 - - } - - int16_t steps = 0,dest=0; - - switch (action) { - cf4: 02 30 cpi r16, 0x02 ; 2 - cf6: 09 f4 brne .+2 ; 0xcfa - cf8: 61 c0 rjmp .+194 ; 0xdbc - cfa: 03 30 cpi r16, 0x03 ; 3 - cfc: 09 f4 brne .+2 ; 0xd00 - cfe: be c0 rjmp .+380 ; 0xe7c - d00: 01 30 cpi r16, 0x01 ; 1 - d02: 09 f0 breq .+2 ; 0xd06 - d04: c3 c0 rjmp .+390 ; 0xe8c - case GOTO: - uart_puts("GOTO "); - d06: 87 e1 ldi r24, 0x17 ; 23 - d08: 91 e0 ldi r25, 0x01 ; 1 - d0a: aa dd rcall .-1196 ; 0x860 - uart_putc(88+axis);// x or y - d0c: 81 2f mov r24, r17 - d0e: 88 5a subi r24, 0xA8 ; 168 - d10: 9f dd rcall .-1218 ; 0x850 - uart_putc(' '); - d12: 80 e2 ldi r24, 0x20 ; 32 - d14: 9d dd rcall .-1222 ; 0x850 - uart_print_signed_number(predot*num_sign,3); - d16: cd 2d mov r28, r13 - d18: dd 27 eor r29, r29 - d1a: c7 fd sbrc r28, 7 - d1c: d0 95 com r29 - d1e: 60 91 70 02 lds r22, 0x0270 - d22: 70 91 71 02 lds r23, 0x0271 - d26: ce 01 movw r24, r28 - d28: 0e 94 37 0f call 0x1e6e ; 0x1e6e <__mulhi3> - d2c: bc 01 movw r22, r24 - d2e: 80 e0 ldi r24, 0x00 ; 0 - d30: 90 e0 ldi r25, 0x00 ; 0 - d32: 43 e0 ldi r20, 0x03 ; 3 - d34: 2e de rcall .-932 ; 0x992 - uart_putc('.'); - d36: 8e e2 ldi r24, 0x2E ; 46 - d38: 8b dd rcall .-1258 ; 0x850 - uart_print_number_wlzeros(postdot,3); - d3a: 60 91 6e 02 lds r22, 0x026E - d3e: 70 91 6f 02 lds r23, 0x026F - d42: 80 e0 ldi r24, 0x00 ; 0 - d44: 90 e0 ldi r25, 0x00 ; 0 - d46: 43 e0 ldi r20, 0x03 ; 3 - d48: 10 de rcall .-992 ; 0x96a - uart_puts("\r\n"); - d4a: 84 e1 ldi r24, 0x14 ; 20 - d4c: 91 e0 ldi r25, 0x01 ; 1 - d4e: 88 dd rcall .-1264 ; 0x860 - - dest = num_sign *( predot*24 +(postdot*10)/416); - d50: 80 91 6e 02 lds r24, 0x026E - d54: 90 91 6f 02 lds r25, 0x026F - d58: 6a e0 ldi r22, 0x0A ; 10 - d5a: 70 e0 ldi r23, 0x00 ; 0 - d5c: 0e 94 37 0f call 0x1e6e ; 0x1e6e <__mulhi3> - d60: 60 ea ldi r22, 0xA0 ; 160 - d62: 71 e0 ldi r23, 0x01 ; 1 - d64: 0e 94 49 0f call 0x1e92 ; 0x1e92 <__udivmodhi4> - d68: 9b 01 movw r18, r22 - d6a: 80 91 70 02 lds r24, 0x0270 - d6e: 90 91 71 02 lds r25, 0x0271 - d72: 68 e1 ldi r22, 0x18 ; 24 - d74: 70 e0 ldi r23, 0x00 ; 0 - d76: 0e 94 37 0f call 0x1e6e ; 0x1e6e <__mulhi3> - d7a: 28 0f add r18, r24 - d7c: 39 1f adc r19, r25 - d7e: ce 01 movw r24, r28 - d80: b9 01 movw r22, r18 - d82: 0e 94 37 0f call 0x1e6e ; 0x1e6e <__mulhi3> - - if (axis == X) { - d86: 11 23 and r17, r17 - d88: 69 f4 brne .+26 ; 0xda4 - steps = dest - plate_pos_x; // experimental correction! - d8a: 20 91 4e 01 lds r18, 0x014E - d8e: 30 91 4f 01 lds r19, 0x014F - d92: e8 2e mov r14, r24 - d94: e7 01 movw r28, r14 - d96: 7e 01 movw r14, r28 - d98: f9 2e mov r15, r25 - d9a: e7 01 movw r28, r14 - d9c: c2 1b sub r28, r18 - d9e: d3 0b sbc r29, r19 - move_plate(steps,0); - da0: ce 01 movw r24, r28 - da2: 4f c0 rjmp .+158 ; 0xe42 - plate_pos_x += steps; - } else if (axis == Y) { - steps = dest - plate_pos_y; - da4: 20 91 50 01 lds r18, 0x0150 - da8: 30 91 51 01 lds r19, 0x0151 - dac: e8 2e mov r14, r24 - dae: e7 01 movw r28, r14 - db0: 7e 01 movw r14, r28 - db2: f9 2e mov r15, r25 - db4: e7 01 movw r28, r14 - db6: c2 1b sub r28, r18 - db8: d3 0b sbc r29, r19 - dba: 51 c0 rjmp .+162 ; 0xe5e - } - pos_report(); - - break; - case MOVEREL: - uart_puts("MOVE "); - dbc: 8d e1 ldi r24, 0x1D ; 29 - dbe: 91 e0 ldi r25, 0x01 ; 1 - dc0: 4f dd rcall .-1378 ; 0x860 - uart_putc(88+axis);// x or y - dc2: 81 2f mov r24, r17 - dc4: 88 5a subi r24, 0xA8 ; 168 - dc6: 44 dd rcall .-1400 ; 0x850 - uart_putc(' '); - dc8: 80 e2 ldi r24, 0x20 ; 32 - dca: 42 dd rcall .-1404 ; 0x850 - uart_print_signed_number(predot*num_sign,3); - dcc: cd 2d mov r28, r13 - dce: dd 27 eor r29, r29 - dd0: c7 fd sbrc r28, 7 - dd2: d0 95 com r29 - dd4: 60 91 70 02 lds r22, 0x0270 - dd8: 70 91 71 02 lds r23, 0x0271 - ddc: ce 01 movw r24, r28 - dde: 0e 94 37 0f call 0x1e6e ; 0x1e6e <__mulhi3> - de2: bc 01 movw r22, r24 - de4: 80 e0 ldi r24, 0x00 ; 0 - de6: 90 e0 ldi r25, 0x00 ; 0 - de8: 43 e0 ldi r20, 0x03 ; 3 - dea: d3 dd rcall .-1114 ; 0x992 - uart_putc('.'); - dec: 8e e2 ldi r24, 0x2E ; 46 - dee: 30 dd rcall .-1440 ; 0x850 - uart_print_number_wlzeros(postdot,3); - df0: 60 91 6e 02 lds r22, 0x026E - df4: 70 91 6f 02 lds r23, 0x026F - df8: 80 e0 ldi r24, 0x00 ; 0 - dfa: 90 e0 ldi r25, 0x00 ; 0 - dfc: 43 e0 ldi r20, 0x03 ; 3 - dfe: b5 dd rcall .-1174 ; 0x96a - uart_puts("\r\n"); - e00: 84 e1 ldi r24, 0x14 ; 20 - e02: 91 e0 ldi r25, 0x01 ; 1 - e04: 2d dd rcall .-1446 ; 0x860 - - steps = num_sign *( predot*24 +(postdot*10)/416); - e06: 80 91 6e 02 lds r24, 0x026E - e0a: 90 91 6f 02 lds r25, 0x026F - e0e: 6a e0 ldi r22, 0x0A ; 10 - e10: 70 e0 ldi r23, 0x00 ; 0 - e12: 0e 94 37 0f call 0x1e6e ; 0x1e6e <__mulhi3> - e16: 60 ea ldi r22, 0xA0 ; 160 - e18: 71 e0 ldi r23, 0x01 ; 1 - e1a: 0e 94 49 0f call 0x1e92 ; 0x1e92 <__udivmodhi4> - e1e: 9b 01 movw r18, r22 - e20: 80 91 70 02 lds r24, 0x0270 - e24: 90 91 71 02 lds r25, 0x0271 - e28: 68 e1 ldi r22, 0x18 ; 24 - e2a: 70 e0 ldi r23, 0x00 ; 0 - e2c: 0e 94 37 0f call 0x1e6e ; 0x1e6e <__mulhi3> - e30: 28 0f add r18, r24 - e32: 39 1f adc r19, r25 - e34: ce 01 movw r24, r28 - e36: b9 01 movw r22, r18 - e38: 0e 94 37 0f call 0x1e6e ; 0x1e6e <__mulhi3> - e3c: ec 01 movw r28, r24 - - if (axis == X) { - e3e: 11 23 and r17, r17 - e40: 71 f4 brne .+28 ; 0xe5e - move_plate(steps,0); - e42: 60 e0 ldi r22, 0x00 ; 0 - e44: 70 e0 ldi r23, 0x00 ; 0 - e46: 07 de rcall .-1010 ; 0xa56 - plate_pos_x += steps; - e48: 80 91 4e 01 lds r24, 0x014E - e4c: 90 91 4f 01 lds r25, 0x014F - e50: 8c 0f add r24, r28 - e52: 9d 1f adc r25, r29 - e54: 90 93 4f 01 sts 0x014F, r25 - e58: 80 93 4e 01 sts 0x014E, r24 - e5c: 17 c0 rjmp .+46 ; 0xe8c - } else if (axis == Y) { - move_plate(0,steps); - e5e: 80 e0 ldi r24, 0x00 ; 0 - e60: 90 e0 ldi r25, 0x00 ; 0 - e62: be 01 movw r22, r28 - e64: f8 dd rcall .-1040 ; 0xa56 - plate_pos_y += steps; - e66: 80 91 50 01 lds r24, 0x0150 - e6a: 90 91 51 01 lds r25, 0x0151 - e6e: 8c 0f add r24, r28 - e70: 9d 1f adc r25, r29 - e72: 90 93 51 01 sts 0x0151, r25 - e76: 80 93 50 01 sts 0x0150, r24 - e7a: 08 c0 rjmp .+16 ; 0xe8c - } - pos_report(); - break; - - case SETZERO: - plate_pos_x = 0; - e7c: 10 92 4f 01 sts 0x014F, r1 - e80: 10 92 4e 01 sts 0x014E, r1 - plate_pos_y = 0; - e84: 10 92 51 01 sts 0x0151, r1 - e88: 10 92 50 01 sts 0x0150, r1 - pos_report(); - break; - - case POSITION: - pos_report(); - e8c: 5f de rcall .-834 ; 0xb4c - break; - e8e: 17 c0 rjmp .+46 ; 0xebe - } - - - - } else { // queue command - if( cmdPos == 0 ){ - e90: 80 91 6d 02 lds r24, 0x026D - e94: 88 23 and r24, r24 - e96: 19 f4 brne .+6 ; 0xe9e - uart_puts("\r\n$ "); - e98: 83 e2 ldi r24, 0x23 ; 35 - e9a: 91 e0 ldi r25, 0x01 ; 1 - e9c: e1 dc rcall .-1598 ; 0x860 - e9e: 80 91 6d 02 lds r24, 0x026D - } - - if( byte == 8 ){ // backspace - ea2: 18 30 cpi r17, 0x08 ; 8 - ea4: 11 f4 brne .+4 ; 0xeaa - cmdPos--; - ea6: 81 50 subi r24, 0x01 ; 1 - ea8: 06 c0 rjmp .+12 ; 0xeb6 - } else { - cmdbuffer[cmdPos++] = byte; - eaa: e8 2f mov r30, r24 - eac: f0 e0 ldi r31, 0x00 ; 0 - eae: ee 57 subi r30, 0x7E ; 126 - eb0: fd 4f sbci r31, 0xFD ; 253 - eb2: 10 83 st Z, r17 - eb4: 8f 5f subi r24, 0xFF ; 255 - eb6: 80 93 6d 02 sts 0x026D, r24 - } - uart_putc(byte); - eba: 81 2f mov r24, r17 - ebc: c9 dc rcall .-1646 ; 0x850 - - - } - } -} - ebe: df 91 pop r29 - ec0: cf 91 pop r28 - ec2: 1f 91 pop r17 - ec4: 0f 91 pop r16 - ec6: ff 90 pop r15 - ec8: ef 90 pop r14 - eca: df 90 pop r13 - ecc: cf 90 pop r12 - ece: 08 95 ret - -00000ed0
: - -int main(void) -{ - ed0: 0f 93 push r16 - ed2: 1f 93 push r17 - ed4: df 93 push r29 - ed6: cf 93 push r28 - ed8: 0f 92 push r0 - eda: cd b7 in r28, 0x3d ; 61 - edc: de b7 in r29, 0x3e ; 62 - - init_motors(); - ede: 7c dd rcall .-1288 ; 0x9d8 - init_leds(); - ee0: 77 db rcall .-2322 ; 0x5d0 - init_sw(); - ee2: 97 db rcall .-2258 ; 0x612 - - - char dummy; - uint8_t field_val = 0; - SetupHardware(); - ee4: 06 dc rcall .-2036 ; 0x6f2 - - - - RingBuffer_InitBuffer(&USBtoUSART_Buffer, USBtoUSART_Buffer_Data, sizeof(USBtoUSART_Buffer_Data)); - ee6: 82 e5 ldi r24, 0x52 ; 82 - ee8: 91 e0 ldi r25, 0x01 ; 1 - eea: 6e e5 ldi r22, 0x5E ; 94 - eec: 71 e0 ldi r23, 0x01 ; 1 - eee: e9 d9 rcall .-3118 ; 0x2c2 - RingBuffer_InitBuffer(&USARTtoUSB_Buffer, USARTtoUSB_Buffer_Data, sizeof(USARTtoUSB_Buffer_Data)); - ef0: 8e ed ldi r24, 0xDE ; 222 - ef2: 91 e0 ldi r25, 0x01 ; 1 - ef4: 6a ee ldi r22, 0xEA ; 234 - ef6: 71 e0 ldi r23, 0x01 ; 1 - ef8: e4 d9 rcall .-3128 ; 0x2c2 - static inline void GlobalInterruptEnable(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - sei(); - efa: 78 94 sei - -// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - GlobalInterruptEnable(); - - touchpad_init(); // you need to call this to setup the I/O pin! - efc: 24 db rcall .-2488 ; 0x546 - efe: 8f ef ldi r24, 0xFF ; 255 - f00: 99 e6 ldi r25, 0x69 ; 105 - f02: a8 e1 ldi r26, 0x18 ; 24 - f04: 81 50 subi r24, 0x01 ; 1 - f06: 90 40 sbci r25, 0x00 ; 0 - f08: a0 40 sbci r26, 0x00 ; 0 - f0a: e1 f7 brne .-8 ; 0xf04 - f0c: 00 c0 rjmp .+0 ; 0xf0e - f0e: 00 00 nop - _delay_ms(500); - sei(); - f10: 78 94 sei - uint16_t loopcounter=0; - - - -// uart_puts("you selected the relative position demo modus:\n\r"); - touchpad_set_rel_mode_100dpi();// use touchpad in relative mode - f12: 2a db rcall .-2476 ; 0x568 -// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution - int16_t x, y = 0; - int8_t dx, dy = 0; - uint8_t busy = 0, last_busy = 0; - f14: 10 e0 ldi r17, 0x00 ; 0 - f16: 01 c0 rjmp .+2 ; 0xf1a - } - } -} - -int main(void) -{ - f18: 18 2f mov r17, r24 - int8_t dx, dy = 0; - uint8_t busy = 0, last_busy = 0; - - while (1) { - - set_led0(sw0_state()); - f1a: 82 db rcall .-2300 ; 0x620 - f1c: 5d db rcall .-2374 ; 0x5d8 - set_led1(sw1_state()); - f1e: 8a db rcall .-2284 ; 0x634 - f20: 65 db rcall .-2358 ; 0x5ec - set_led2(sw2_state()); - f22: 92 db rcall .-2268 ; 0x648 - f24: 69 db rcall .-2350 ; 0x5f8 - - Usb2SerialTask(); - f26: 9a db rcall .-2252 ; 0x65c -// loopcounter++; -// if(loopcounter<2000) { -// continue; -// } -// loopcounter=0; - parse_command(); // read data from virtual comport - f28: 24 de rcall .-952 ; 0xb72 - touchpad_read(); // read data from touchpad - f2a: 15 db rcall .-2518 ; 0x556 - - dx = -delta_x();// returns the amount your finger has moved in x direction since last readout - f2c: 41 db rcall .-2430 ; 0x5b0 - f2e: 08 2f mov r16, r24 - dy = -delta_y();// returns the amount your finger has moved in y direction since last readout - f30: 2f db rcall .-2466 ; 0x590 -// } -// loopcounter=0; - parse_command(); // read data from virtual comport - touchpad_read(); // read data from touchpad - - dx = -delta_x();// returns the amount your finger has moved in x direction since last readout - f32: 01 95 neg r16 - dy = -delta_y();// returns the amount your finger has moved in y direction since last readout - - // increment/decrement some dummy variables with the - - plate_pos_x += dx; - f34: 40 2f mov r20, r16 - f36: 55 27 eor r21, r21 - f38: 47 fd sbrc r20, 7 - f3a: 50 95 com r21 - f3c: 20 91 4e 01 lds r18, 0x014E - f40: 30 91 4f 01 lds r19, 0x014F - f44: 24 0f add r18, r20 - f46: 35 1f adc r19, r21 - f48: 30 93 4f 01 sts 0x014F, r19 - f4c: 20 93 4e 01 sts 0x014E, r18 -// loopcounter=0; - parse_command(); // read data from virtual comport - touchpad_read(); // read data from touchpad - - dx = -delta_x();// returns the amount your finger has moved in x direction since last readout - dy = -delta_y();// returns the amount your finger has moved in y direction since last readout - f50: 81 95 neg r24 - - // increment/decrement some dummy variables with the - - plate_pos_x += dx; - plate_pos_y += dy; - f52: 68 2f mov r22, r24 - f54: 77 27 eor r23, r23 - f56: 67 fd sbrc r22, 7 - f58: 70 95 com r23 - f5a: 80 91 50 01 lds r24, 0x0150 - f5e: 90 91 51 01 lds r25, 0x0151 - f62: 86 0f add r24, r22 - f64: 97 1f adc r25, r23 - f66: 90 93 51 01 sts 0x0151, r25 - f6a: 80 93 50 01 sts 0x0150, r24 - - - last_busy = busy; - busy = move_plate(dx,dy); - f6e: ca 01 movw r24, r20 - f70: 72 dd rcall .-1308 ; 0xa56 - - - if (last_busy && !(busy)){ - f72: 11 23 and r17, r17 - f74: 89 f2 breq .-94 ; 0xf18 - f76: 88 23 and r24, r24 - f78: 79 f6 brne .-98 ; 0xf18 - pos_report(); - f7a: 89 83 std Y+1, r24 ; 0x01 - f7c: e7 dd rcall .-1074 ; 0xb4c - f7e: 89 81 ldd r24, Y+1 ; 0x01 - f80: cb cf rjmp .-106 ; 0xf18 - -00000f82 : - const uint8_t DescriptorNumber = (wValue & 0xFF); - - const void* Address = NULL; - uint16_t Size = NO_DESCRIPTOR; - - switch (DescriptorType) - f82: 92 30 cpi r25, 0x02 ; 2 - f84: 29 f0 breq .+10 ; 0xf90 - f86: 93 30 cpi r25, 0x03 ; 3 - f88: 41 f0 breq .+16 ; 0xf9a - f8a: 91 30 cpi r25, 0x01 ; 1 - f8c: e9 f4 brne .+58 ; 0xfc8 - f8e: 17 c0 rjmp .+46 ; 0xfbe - Address = &DeviceDescriptor; - Size = sizeof(USB_Descriptor_Device_t); - break; - case DTYPE_Configuration: - Address = &ConfigurationDescriptor; - Size = sizeof(USB_Descriptor_Configuration_t); - f90: 2e e3 ldi r18, 0x3E ; 62 - f92: 30 e0 ldi r19, 0x00 ; 0 - case DTYPE_Device: - Address = &DeviceDescriptor; - Size = sizeof(USB_Descriptor_Device_t); - break; - case DTYPE_Configuration: - Address = &ConfigurationDescriptor; - f94: ea ea ldi r30, 0xAA ; 170 - f96: f0 e0 ldi r31, 0x00 ; 0 - Size = sizeof(USB_Descriptor_Configuration_t); - break; - f98: 1b c0 rjmp .+54 ; 0xfd0 - case DTYPE_String: - switch (DescriptorNumber) - f9a: 81 30 cpi r24, 0x01 ; 1 - f9c: 41 f0 breq .+16 ; 0xfae - f9e: 81 30 cpi r24, 0x01 ; 1 - fa0: 18 f0 brcs .+6 ; 0xfa8 - fa2: 82 30 cpi r24, 0x02 ; 2 - fa4: 89 f4 brne .+34 ; 0xfc8 - fa6: 06 c0 rjmp .+12 ; 0xfb4 - { - case 0x00: - Address = &LanguageString; - Size = pgm_read_byte(&LanguageString.Header.Size); - fa8: e8 ee ldi r30, 0xE8 ; 232 - faa: f0 e0 ldi r31, 0x00 ; 0 - fac: 05 c0 rjmp .+10 ; 0xfb8 - break; - case 0x01: - Address = &ManufacturerString; - Size = pgm_read_byte(&ManufacturerString.Header.Size); - fae: ec ee ldi r30, 0xEC ; 236 - fb0: f0 e0 ldi r31, 0x00 ; 0 - fb2: 02 c0 rjmp .+4 ; 0xfb8 - break; - case 0x02: - Address = &ProductString; - Size = pgm_read_byte(&ProductString.Header.Size); - fb4: e6 e0 ldi r30, 0x06 ; 6 - fb6: f1 e0 ldi r31, 0x01 ; 1 - fb8: 24 91 lpm r18, Z+ - fba: 30 e0 ldi r19, 0x00 ; 0 - break; - fbc: 09 c0 rjmp .+18 ; 0xfd0 - - switch (DescriptorType) - { - case DTYPE_Device: - Address = &DeviceDescriptor; - Size = sizeof(USB_Descriptor_Device_t); - fbe: 22 e1 ldi r18, 0x12 ; 18 - fc0: 30 e0 ldi r19, 0x00 ; 0 - uint16_t Size = NO_DESCRIPTOR; - - switch (DescriptorType) - { - case DTYPE_Device: - Address = &DeviceDescriptor; - fc2: e8 e9 ldi r30, 0x98 ; 152 - fc4: f0 e0 ldi r31, 0x00 ; 0 - fc6: 04 c0 rjmp .+8 ; 0xfd0 -{ - const uint8_t DescriptorType = (wValue >> 8); - const uint8_t DescriptorNumber = (wValue & 0xFF); - - const void* Address = NULL; - uint16_t Size = NO_DESCRIPTOR; - fc8: 20 e0 ldi r18, 0x00 ; 0 - fca: 30 e0 ldi r19, 0x00 ; 0 - const void** const DescriptorAddress) -{ - const uint8_t DescriptorType = (wValue >> 8); - const uint8_t DescriptorNumber = (wValue & 0xFF); - - const void* Address = NULL; - fcc: e0 e0 ldi r30, 0x00 ; 0 - fce: f0 e0 ldi r31, 0x00 ; 0 - } - - break; - } - - *DescriptorAddress = Address; - fd0: da 01 movw r26, r20 - fd2: 11 96 adiw r26, 0x01 ; 1 - fd4: fc 93 st X, r31 - fd6: ee 93 st -X, r30 - return Size; -} - fd8: c9 01 movw r24, r18 - fda: 08 95 ret - -00000fdc : -#if defined(TEMPLATE_FUNC_NAME) - -uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, - uint16_t Length) -{ - uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - fdc: 28 2f mov r18, r24 - fde: 39 2f mov r19, r25 - fe0: f9 01 movw r30, r18 - bool LastPacketFull = false; - - if (Length > USB_ControlRequest.wLength) - fe2: 80 91 d2 02 lds r24, 0x02D2 - fe6: 90 91 d3 02 lds r25, 0x02D3 - fea: 86 17 cp r24, r22 - fec: 97 07 cpc r25, r23 - fee: 18 f4 brcc .+6 ; 0xff6 - ff0: bc 01 movw r22, r24 - ff2: 20 e0 ldi r18, 0x00 ; 0 - ff4: 34 c0 rjmp .+104 ; 0x105e - Length = USB_ControlRequest.wLength; - else if (!(Length)) - ff6: 61 15 cp r22, r1 - ff8: 71 05 cpc r23, r1 - ffa: d9 f7 brne .-10 ; 0xff2 - */ - static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearIN(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - ffc: 80 91 e8 00 lds r24, 0x00E8 - 1000: 8e 77 andi r24, 0x7E ; 126 - 1002: 80 93 e8 00 sts 0x00E8, r24 - 1006: f5 cf rjmp .-22 ; 0xff2 - Endpoint_ClearIN(); - - while (Length || LastPacketFull) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - 1008: 8e b3 in r24, 0x1e ; 30 - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 100a: 88 23 and r24, r24 - 100c: e9 f1 breq .+122 ; 0x1088 - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 100e: 85 30 cpi r24, 0x05 ; 5 - 1010: b9 f1 breq .+110 ; 0x1080 - * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. - */ - static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsSETUPReceived(void) - { - return ((UEINTX & (1 << RXSTPI)) ? true : false); - 1012: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_BusSuspended; - else if (Endpoint_IsSETUPReceived()) - 1016: 83 fd sbrc r24, 3 - 1018: 35 c0 rjmp .+106 ; 0x1084 - * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. - */ - static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsOUTReceived(void) - { - return ((UEINTX & (1 << RXOUTI)) ? true : false); - 101a: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_HostAborted; - else if (Endpoint_IsOUTReceived()) - 101e: 82 fd sbrc r24, 2 - 1020: 29 c0 rjmp .+82 ; 0x1074 - * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. - */ - static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsINReady(void) - { - return ((UEINTX & (1 << TXINI)) ? true : false); - 1022: 80 91 e8 00 lds r24, 0x00E8 - break; - - if (Endpoint_IsINReady()) - 1026: 80 ff sbrs r24, 0 - 1028: 1a c0 rjmp .+52 ; 0x105e - #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) - return UEBCX; - #elif defined(USB_SERIES_4_AVR) - return (((uint16_t)UEBCHX << 8) | UEBCLX); - #elif defined(USB_SERIES_2_AVR) - return UEBCLX; - 102a: 80 91 f2 00 lds r24, 0x00F2 - 102e: 90 e0 ldi r25, 0x00 ; 0 - { - uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); - - while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 1030: 06 c0 rjmp .+12 ; 0x103e - { - TEMPLATE_TRANSFER_BYTE(DataStream); - 1032: 21 91 ld r18, Z+ - * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_8(const uint8_t Data) - { - UEDATX = Data; - 1034: 20 93 f1 00 sts 0x00F1, r18 - TEMPLATE_BUFFER_MOVE(DataStream, 1); - Length--; - 1038: 61 50 subi r22, 0x01 ; 1 - 103a: 70 40 sbci r23, 0x00 ; 0 - BytesInEndpoint++; - 103c: 01 96 adiw r24, 0x01 ; 1 - - if (Endpoint_IsINReady()) - { - uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); - - while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 103e: 61 15 cp r22, r1 - 1040: 71 05 cpc r23, r1 - 1042: 19 f0 breq .+6 ; 0x104a - 1044: 88 30 cpi r24, 0x08 ; 8 - 1046: 91 05 cpc r25, r1 - 1048: a0 f3 brcs .-24 ; 0x1032 - TEMPLATE_BUFFER_MOVE(DataStream, 1); - Length--; - BytesInEndpoint++; - } - - LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - 104a: 21 e0 ldi r18, 0x01 ; 1 - 104c: 88 30 cpi r24, 0x08 ; 8 - 104e: 91 05 cpc r25, r1 - 1050: 09 f0 breq .+2 ; 0x1054 - 1052: 20 e0 ldi r18, 0x00 ; 0 - */ - static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearIN(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 1054: 80 91 e8 00 lds r24, 0x00E8 - 1058: 8e 77 andi r24, 0x7E ; 126 - 105a: 80 93 e8 00 sts 0x00E8, r24 - if (Length > USB_ControlRequest.wLength) - Length = USB_ControlRequest.wLength; - else if (!(Length)) - Endpoint_ClearIN(); - - while (Length || LastPacketFull) - 105e: 61 15 cp r22, r1 - 1060: 71 05 cpc r23, r1 - 1062: 91 f6 brne .-92 ; 0x1008 - 1064: 22 23 and r18, r18 - 1066: 81 f6 brne .-96 ; 0x1008 - 1068: 05 c0 rjmp .+10 ; 0x1074 - } - } - - while (!(Endpoint_IsOUTReceived())) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - 106a: 8e b3 in r24, 0x1e ; 30 - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 106c: 88 23 and r24, r24 - 106e: 61 f0 breq .+24 ; 0x1088 - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 1070: 85 30 cpi r24, 0x05 ; 5 - 1072: 61 f0 breq .+24 ; 0x108c - * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. - */ - static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsOUTReceived(void) - { - return ((UEINTX & (1 << RXOUTI)) ? true : false); - 1074: 80 91 e8 00 lds r24, 0x00E8 - LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - Endpoint_ClearIN(); - } - } - - while (!(Endpoint_IsOUTReceived())) - 1078: 82 ff sbrs r24, 2 - 107a: f7 cf rjmp .-18 ; 0x106a - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_RWCSTREAM_BusSuspended; - } - - return ENDPOINT_RWCSTREAM_NoError; - 107c: 80 e0 ldi r24, 0x00 ; 0 - 107e: 08 95 ret - uint8_t USB_DeviceState_LCL = USB_DeviceState; - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_RWCSTREAM_BusSuspended; - 1080: 83 e0 ldi r24, 0x03 ; 3 - 1082: 08 95 ret - else if (Endpoint_IsSETUPReceived()) - return ENDPOINT_RWCSTREAM_HostAborted; - 1084: 81 e0 ldi r24, 0x01 ; 1 - 1086: 08 95 ret - while (!(Endpoint_IsOUTReceived())) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - 1088: 82 e0 ldi r24, 0x02 ; 2 - 108a: 08 95 ret - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_RWCSTREAM_BusSuspended; - 108c: 83 e0 ldi r24, 0x03 ; 3 - } - - return ENDPOINT_RWCSTREAM_NoError; -} - 108e: 08 95 ret - -00001090 : -#if defined(TEMPLATE_FUNC_NAME) - -uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, - uint16_t Length) -{ - uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - 1090: e8 2f mov r30, r24 - 1092: f9 2f mov r31, r25 - bool LastPacketFull = false; - - if (Length > USB_ControlRequest.wLength) - 1094: 80 91 d2 02 lds r24, 0x02D2 - 1098: 90 91 d3 02 lds r25, 0x02D3 - 109c: 86 17 cp r24, r22 - 109e: 97 07 cpc r25, r23 - 10a0: 18 f4 brcc .+6 ; 0x10a8 - 10a2: bc 01 movw r22, r24 - 10a4: 20 e0 ldi r18, 0x00 ; 0 - 10a6: 36 c0 rjmp .+108 ; 0x1114 - Length = USB_ControlRequest.wLength; - else if (!(Length)) - 10a8: 61 15 cp r22, r1 - 10aa: 71 05 cpc r23, r1 - 10ac: d9 f7 brne .-10 ; 0x10a4 - */ - static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearIN(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 10ae: 80 91 e8 00 lds r24, 0x00E8 - 10b2: 8e 77 andi r24, 0x7E ; 126 - 10b4: 80 93 e8 00 sts 0x00E8, r24 - 10b8: f5 cf rjmp .-22 ; 0x10a4 - Endpoint_ClearIN(); - - while (Length || LastPacketFull) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - 10ba: 8e b3 in r24, 0x1e ; 30 - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 10bc: 88 23 and r24, r24 - 10be: 09 f4 brne .+2 ; 0x10c2 - 10c0: 3e c0 rjmp .+124 ; 0x113e - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 10c2: 85 30 cpi r24, 0x05 ; 5 - 10c4: c1 f1 breq .+112 ; 0x1136 - * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. - */ - static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsSETUPReceived(void) - { - return ((UEINTX & (1 << RXSTPI)) ? true : false); - 10c6: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_BusSuspended; - else if (Endpoint_IsSETUPReceived()) - 10ca: 83 fd sbrc r24, 3 - 10cc: 36 c0 rjmp .+108 ; 0x113a - * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. - */ - static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsOUTReceived(void) - { - return ((UEINTX & (1 << RXOUTI)) ? true : false); - 10ce: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_HostAborted; - else if (Endpoint_IsOUTReceived()) - 10d2: 82 fd sbrc r24, 2 - 10d4: 2a c0 rjmp .+84 ; 0x112a - * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. - */ - static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsINReady(void) - { - return ((UEINTX & (1 << TXINI)) ? true : false); - 10d6: 80 91 e8 00 lds r24, 0x00E8 - break; - - if (Endpoint_IsINReady()) - 10da: 80 ff sbrs r24, 0 - 10dc: 1b c0 rjmp .+54 ; 0x1114 - #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) - return UEBCX; - #elif defined(USB_SERIES_4_AVR) - return (((uint16_t)UEBCHX << 8) | UEBCLX); - #elif defined(USB_SERIES_2_AVR) - return UEBCLX; - 10de: 80 91 f2 00 lds r24, 0x00F2 - 10e2: 90 e0 ldi r25, 0x00 ; 0 - { - uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); - - while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 10e4: 07 c0 rjmp .+14 ; 0x10f4 - { - TEMPLATE_TRANSFER_BYTE(DataStream); - 10e6: 24 91 lpm r18, Z+ - * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_8(const uint8_t Data) - { - UEDATX = Data; - 10e8: 20 93 f1 00 sts 0x00F1, r18 - TEMPLATE_BUFFER_MOVE(DataStream, 1); - 10ec: 31 96 adiw r30, 0x01 ; 1 - Length--; - 10ee: 61 50 subi r22, 0x01 ; 1 - 10f0: 70 40 sbci r23, 0x00 ; 0 - BytesInEndpoint++; - 10f2: 01 96 adiw r24, 0x01 ; 1 - - if (Endpoint_IsINReady()) - { - uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); - - while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 10f4: 61 15 cp r22, r1 - 10f6: 71 05 cpc r23, r1 - 10f8: 19 f0 breq .+6 ; 0x1100 - 10fa: 88 30 cpi r24, 0x08 ; 8 - 10fc: 91 05 cpc r25, r1 - 10fe: 98 f3 brcs .-26 ; 0x10e6 - TEMPLATE_BUFFER_MOVE(DataStream, 1); - Length--; - BytesInEndpoint++; - } - - LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - 1100: 21 e0 ldi r18, 0x01 ; 1 - 1102: 88 30 cpi r24, 0x08 ; 8 - 1104: 91 05 cpc r25, r1 - 1106: 09 f0 breq .+2 ; 0x110a - 1108: 20 e0 ldi r18, 0x00 ; 0 - */ - static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearIN(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 110a: 80 91 e8 00 lds r24, 0x00E8 - 110e: 8e 77 andi r24, 0x7E ; 126 - 1110: 80 93 e8 00 sts 0x00E8, r24 - if (Length > USB_ControlRequest.wLength) - Length = USB_ControlRequest.wLength; - else if (!(Length)) - Endpoint_ClearIN(); - - while (Length || LastPacketFull) - 1114: 61 15 cp r22, r1 - 1116: 71 05 cpc r23, r1 - 1118: 81 f6 brne .-96 ; 0x10ba - 111a: 22 23 and r18, r18 - 111c: 71 f6 brne .-100 ; 0x10ba - 111e: 05 c0 rjmp .+10 ; 0x112a - } - } - - while (!(Endpoint_IsOUTReceived())) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - 1120: 8e b3 in r24, 0x1e ; 30 - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 1122: 88 23 and r24, r24 - 1124: 61 f0 breq .+24 ; 0x113e - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 1126: 85 30 cpi r24, 0x05 ; 5 - 1128: 61 f0 breq .+24 ; 0x1142 - * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. - */ - static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsOUTReceived(void) - { - return ((UEINTX & (1 << RXOUTI)) ? true : false); - 112a: 80 91 e8 00 lds r24, 0x00E8 - LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - Endpoint_ClearIN(); - } - } - - while (!(Endpoint_IsOUTReceived())) - 112e: 82 ff sbrs r24, 2 - 1130: f7 cf rjmp .-18 ; 0x1120 - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_RWCSTREAM_BusSuspended; - } - - return ENDPOINT_RWCSTREAM_NoError; - 1132: 80 e0 ldi r24, 0x00 ; 0 - 1134: 08 95 ret - uint8_t USB_DeviceState_LCL = USB_DeviceState; - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_RWCSTREAM_BusSuspended; - 1136: 83 e0 ldi r24, 0x03 ; 3 - 1138: 08 95 ret - else if (Endpoint_IsSETUPReceived()) - return ENDPOINT_RWCSTREAM_HostAborted; - 113a: 81 e0 ldi r24, 0x01 ; 1 - 113c: 08 95 ret - while (!(Endpoint_IsOUTReceived())) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - 113e: 82 e0 ldi r24, 0x02 ; 2 - 1140: 08 95 ret - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_RWCSTREAM_BusSuspended; - 1142: 83 e0 ldi r24, 0x03 ; 3 - } - - return ENDPOINT_RWCSTREAM_NoError; -} - 1144: 08 95 ret - -00001146 : - UECFG0X = UECFG0XData; - UECFG1X = UECFG1XData; - - return Endpoint_IsConfigured(); -#else - for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - 1146: 98 2f mov r25, r24 - 1148: 2c c0 rjmp .+88 ; 0x11a2 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 114a: 29 2f mov r18, r25 - 114c: 2f 70 andi r18, 0x0F ; 15 - 114e: 20 93 e9 00 sts 0x00E9, r18 - uint8_t UECFG1XTemp; - uint8_t UEIENXTemp; - - Endpoint_SelectEndpoint(EPNum); - - if (EPNum == Number) - 1152: 98 17 cp r25, r24 - 1154: 39 f0 breq .+14 ; 0x1164 - UECFG1XTemp = UECFG1XData; - UEIENXTemp = 0; - } - else - { - UECFG0XTemp = UECFG0X; - 1156: 70 91 ec 00 lds r23, 0x00EC - UECFG1XTemp = UECFG1X; - 115a: 20 91 ed 00 lds r18, 0x00ED - UEIENXTemp = UEIENX; - 115e: 50 91 f0 00 lds r21, 0x00F0 - 1162: 03 c0 rjmp .+6 ; 0x116a - Endpoint_SelectEndpoint(EPNum); - - if (EPNum == Number) - { - UECFG0XTemp = UECFG0XData; - UECFG1XTemp = UECFG1XData; - 1164: 24 2f mov r18, r20 - - Endpoint_SelectEndpoint(EPNum); - - if (EPNum == Number) - { - UECFG0XTemp = UECFG0XData; - 1166: 76 2f mov r23, r22 - UECFG1XTemp = UECFG1XData; - UEIENXTemp = 0; - 1168: 50 e0 ldi r21, 0x00 ; 0 - UECFG0XTemp = UECFG0X; - UECFG1XTemp = UECFG1X; - UEIENXTemp = UEIENX; - } - - if (!(UECFG1XTemp & (1 << ALLOC))) - 116a: 21 ff sbrs r18, 1 - 116c: 19 c0 rjmp .+50 ; 0x11a0 - * to and from a host. - */ - static inline void Endpoint_DisableEndpoint(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_DisableEndpoint(void) - { - UECONX &= ~(1 << EPEN); - 116e: 30 91 eb 00 lds r19, 0x00EB - 1172: 3e 7f andi r19, 0xFE ; 254 - 1174: 30 93 eb 00 sts 0x00EB, r19 - continue; - - Endpoint_DisableEndpoint(); - UECFG1X &= ~(1 << ALLOC); - 1178: 30 91 ed 00 lds r19, 0x00ED - 117c: 3d 7f andi r19, 0xFD ; 253 - 117e: 30 93 ed 00 sts 0x00ED, r19 - * \note Endpoints must first be configured properly via \ref Endpoint_ConfigureEndpoint(). - */ - static inline void Endpoint_EnableEndpoint(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_EnableEndpoint(void) - { - UECONX |= (1 << EPEN); - 1182: 30 91 eb 00 lds r19, 0x00EB - 1186: 31 60 ori r19, 0x01 ; 1 - 1188: 30 93 eb 00 sts 0x00EB, r19 - - Endpoint_EnableEndpoint(); - UECFG0X = UECFG0XTemp; - 118c: 70 93 ec 00 sts 0x00EC, r23 - UECFG1X = UECFG1XTemp; - 1190: 20 93 ed 00 sts 0x00ED, r18 - UEIENX = UEIENXTemp; - 1194: 50 93 f0 00 sts 0x00F0, r21 - * \return Boolean \c true if the currently selected endpoint has been configured, \c false otherwise. - */ - static inline bool Endpoint_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsConfigured(void) - { - return ((UESTA0X & (1 << CFGOK)) ? true : false); - 1198: 20 91 ee 00 lds r18, 0x00EE - - if (!(Endpoint_IsConfigured())) - 119c: 27 ff sbrs r18, 7 - 119e: 08 c0 rjmp .+16 ; 0x11b0 - UECFG0X = UECFG0XData; - UECFG1X = UECFG1XData; - - return Endpoint_IsConfigured(); -#else - for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - 11a0: 9f 5f subi r25, 0xFF ; 255 - 11a2: 95 30 cpi r25, 0x05 ; 5 - 11a4: 90 f2 brcs .-92 ; 0x114a - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 11a6: 8f 70 andi r24, 0x0F ; 15 - 11a8: 80 93 e9 00 sts 0x00E9, r24 - if (!(Endpoint_IsConfigured())) - return false; - } - - Endpoint_SelectEndpoint(Number); - return true; - 11ac: 81 e0 ldi r24, 0x01 ; 1 - 11ae: 08 95 ret - UECFG0X = UECFG0XTemp; - UECFG1X = UECFG1XTemp; - UEIENX = UEIENXTemp; - - if (!(Endpoint_IsConfigured())) - return false; - 11b0: 80 e0 ldi r24, 0x00 ; 0 - } - - Endpoint_SelectEndpoint(Number); - return true; -#endif -} - 11b2: 08 95 ret - -000011b4 : -uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE; -#endif - -bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, - const uint8_t Entries) -{ - 11b4: ef 92 push r14 - 11b6: ff 92 push r15 - 11b8: 0f 93 push r16 - 11ba: 1f 93 push r17 - 11bc: cf 93 push r28 - 11be: df 93 push r29 - 11c0: 16 2f mov r17, r22 - { - if (!(Table[i].Address)) - continue; - - if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) - return false; - 11c2: e8 2e mov r14, r24 - 11c4: e7 01 movw r28, r14 - 11c6: 7e 01 movw r14, r28 - 11c8: f9 2e mov r15, r25 - 11ca: e7 01 movw r28, r14 -#endif - -bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, - const uint8_t Entries) -{ - for (uint8_t i = 0; i < Entries; i++) - 11cc: 00 e0 ldi r16, 0x00 ; 0 - 11ce: 2a c0 rjmp .+84 ; 0x1224 - { - if (!(Table[i].Address)) - 11d0: 98 81 ld r25, Y - 11d2: 99 23 and r25, r25 - 11d4: 29 f1 breq .+74 ; 0x1220 - continue; - - if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) - 11d6: 6b 81 ldd r22, Y+3 ; 0x03 - 11d8: e9 81 ldd r30, Y+1 ; 0x01 - 11da: fa 81 ldd r31, Y+2 ; 0x02 - 11dc: 2c 81 ldd r18, Y+4 ; 0x04 - static inline bool Endpoint_ConfigureEndpoint(const uint8_t Address, - const uint8_t Type, - const uint16_t Size, - const uint8_t Banks) - { - uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); - 11de: 89 2f mov r24, r25 - 11e0: 8f 70 andi r24, 0x0F ; 15 - - if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - 11e2: 85 30 cpi r24, 0x05 ; 5 - 11e4: 18 f5 brcc .+70 ; 0x122c - return false; - - return Endpoint_ConfigureEndpoint_Prv(Number, - ((Type << EPTYPE0) | ((Address & ENDPOINT_DIR_IN) ? (1 << EPDIR) : 0)), - 11e6: 62 95 swap r22 - 11e8: 66 0f add r22, r22 - 11ea: 66 0f add r22, r22 - 11ec: 60 7c andi r22, 0xC0 ; 192 - 11ee: 99 1f adc r25, r25 - 11f0: 99 27 eor r25, r25 - 11f2: 99 1f adc r25, r25 - uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); - - if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - return false; - - return Endpoint_ConfigureEndpoint_Prv(Number, - 11f4: 69 2b or r22, r25 - 11f6: 22 30 cpi r18, 0x02 ; 2 - 11f8: 10 f0 brcs .+4 ; 0x11fe - 11fa: 96 e0 ldi r25, 0x06 ; 6 - 11fc: 01 c0 rjmp .+2 ; 0x1200 - 11fe: 92 e0 ldi r25, 0x02 ; 2 - static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST - ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) - { - uint8_t MaskVal = 0; - uint16_t CheckBytes = 8; - 1200: 28 e0 ldi r18, 0x08 ; 8 - 1202: 30 e0 ldi r19, 0x00 ; 0 - /* Inline Functions: */ - static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST - ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) - { - uint8_t MaskVal = 0; - 1204: 40 e0 ldi r20, 0x00 ; 0 - 1206: 03 c0 rjmp .+6 ; 0x120e - uint16_t CheckBytes = 8; - - while (CheckBytes < Bytes) - { - MaskVal++; - 1208: 4f 5f subi r20, 0xFF ; 255 - CheckBytes <<= 1; - 120a: 22 0f add r18, r18 - 120c: 33 1f adc r19, r19 - static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) - { - uint8_t MaskVal = 0; - uint16_t CheckBytes = 8; - - while (CheckBytes < Bytes) - 120e: 2e 17 cp r18, r30 - 1210: 3f 07 cpc r19, r31 - 1212: d0 f3 brcs .-12 ; 0x1208 - { - MaskVal++; - CheckBytes <<= 1; - } - - return (MaskVal << EPSIZE0); - 1214: 42 95 swap r20 - 1216: 40 7f andi r20, 0xF0 ; 240 - uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); - - if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - return false; - - return Endpoint_ConfigureEndpoint_Prv(Number, - 1218: 49 2b or r20, r25 - 121a: 95 df rcall .-214 ; 0x1146 - 121c: 88 23 and r24, r24 - 121e: 31 f0 breq .+12 ; 0x122c -#endif - -bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, - const uint8_t Entries) -{ - for (uint8_t i = 0; i < Entries; i++) - 1220: 0f 5f subi r16, 0xFF ; 255 - 1222: 25 96 adiw r28, 0x05 ; 5 - 1224: 01 17 cp r16, r17 - 1226: a0 f2 brcs .-88 ; 0x11d0 - - if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) - return false; - } - - return true; - 1228: 81 e0 ldi r24, 0x01 ; 1 - 122a: 01 c0 rjmp .+2 ; 0x122e - { - if (!(Table[i].Address)) - continue; - - if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) - return false; - 122c: 80 e0 ldi r24, 0x00 ; 0 - } - - return true; -} - 122e: df 91 pop r29 - 1230: cf 91 pop r28 - 1232: 1f 91 pop r17 - 1234: 0f 91 pop r16 - 1236: ff 90 pop r15 - 1238: ef 90 pop r14 - 123a: 08 95 ret - -0000123c : - } -} - -void Endpoint_ClearStatusStage(void) -{ - if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) - 123c: 80 91 cc 02 lds r24, 0x02CC - 1240: 87 ff sbrs r24, 7 - 1242: 11 c0 rjmp .+34 ; 0x1266 - 1244: 03 c0 rjmp .+6 ; 0x124c - { - while (!(Endpoint_IsOUTReceived())) - { - if (USB_DeviceState == DEVICE_STATE_Unattached) - 1246: 8e b3 in r24, 0x1e ; 30 - 1248: 88 23 and r24, r24 - 124a: b1 f0 breq .+44 ; 0x1278 - * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. - */ - static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsOUTReceived(void) - { - return ((UEINTX & (1 << RXOUTI)) ? true : false); - 124c: 80 91 e8 00 lds r24, 0x00E8 - -void Endpoint_ClearStatusStage(void) -{ - if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) - { - while (!(Endpoint_IsOUTReceived())) - 1250: 82 ff sbrs r24, 2 - 1252: f9 cf rjmp .-14 ; 0x1246 - */ - static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearOUT(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1254: 80 91 e8 00 lds r24, 0x00E8 - 1258: 8b 77 andi r24, 0x7B ; 123 - 125a: 80 93 e8 00 sts 0x00E8, r24 - 125e: 08 95 ret - } - else - { - while (!(Endpoint_IsINReady())) - { - if (USB_DeviceState == DEVICE_STATE_Unattached) - 1260: 8e b3 in r24, 0x1e ; 30 - 1262: 88 23 and r24, r24 - 1264: 49 f0 breq .+18 ; 0x1278 - * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. - */ - static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsINReady(void) - { - return ((UEINTX & (1 << TXINI)) ? true : false); - 1266: 80 91 e8 00 lds r24, 0x00E8 - - Endpoint_ClearOUT(); - } - else - { - while (!(Endpoint_IsINReady())) - 126a: 80 ff sbrs r24, 0 - 126c: f9 cf rjmp .-14 ; 0x1260 - */ - static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearIN(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 126e: 80 91 e8 00 lds r24, 0x00E8 - 1272: 8e 77 andi r24, 0x7E ; 126 - 1274: 80 93 e8 00 sts 0x00E8, r24 - 1278: 08 95 ret - -0000127a : - * \return Current USB frame number from the USB controller. - */ - static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; - static inline uint16_t USB_Device_GetFrameNumber(void) - { - return UDFNUM; - 127a: 80 91 e4 00 lds r24, 0x00E4 - 127e: 90 91 e5 00 lds r25, 0x00E5 - -#if !defined(CONTROL_ONLY_DEVICE) -uint8_t Endpoint_WaitUntilReady(void) -{ - #if (USB_STREAM_TIMEOUT_MS < 0xFF) - uint8_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS; - 1282: 44 e6 ldi r20, 0x64 ; 100 - * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. - */ - static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_GetEndpointDirection(void) - { - return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - 1284: 20 91 ec 00 lds r18, 0x00EC - 1288: 20 ff sbrs r18, 0 - 128a: 25 c0 rjmp .+74 ; 0x12d6 - * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. - */ - static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsINReady(void) - { - return ((UEINTX & (1 << TXINI)) ? true : false); - 128c: 20 91 e8 00 lds r18, 0x00E8 - - for (;;) - { - if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) - { - if (Endpoint_IsINReady()) - 1290: 20 fd sbrc r18, 0 - 1292: 15 c0 rjmp .+42 ; 0x12be - { - if (Endpoint_IsOUTReceived()) - return ENDPOINT_READYWAIT_NoError; - } - - uint8_t USB_DeviceState_LCL = USB_DeviceState; - 1294: 2e b3 in r18, 0x1e ; 30 - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 1296: 22 23 and r18, r18 - 1298: a1 f0 breq .+40 ; 0x12c2 - return ENDPOINT_READYWAIT_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 129a: 25 30 cpi r18, 0x05 ; 5 - 129c: a1 f0 breq .+40 ; 0x12c6 - * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. - */ - static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsStalled(void) - { - return ((UECONX & (1 << STALLRQ)) ? true : false); - 129e: 20 91 eb 00 lds r18, 0x00EB - return ENDPOINT_READYWAIT_BusSuspended; - else if (Endpoint_IsStalled()) - 12a2: 25 fd sbrc r18, 5 - 12a4: 12 c0 rjmp .+36 ; 0x12ca - 12a6: 20 91 e4 00 lds r18, 0x00E4 - 12aa: 30 91 e5 00 lds r19, 0x00E5 - return ENDPOINT_READYWAIT_EndpointStalled; - - uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber(); - - if (CurrentFrameNumber != PreviousFrameNumber) - 12ae: 28 17 cp r18, r24 - 12b0: 39 07 cpc r19, r25 - 12b2: 41 f3 breq .-48 ; 0x1284 - { - PreviousFrameNumber = CurrentFrameNumber; - - if (!(TimeoutMSRem--)) - 12b4: 44 23 and r20, r20 - 12b6: 59 f0 breq .+22 ; 0x12ce - 12b8: 41 50 subi r20, 0x01 ; 1 - 12ba: c9 01 movw r24, r18 - 12bc: e3 cf rjmp .-58 ; 0x1284 - for (;;) - { - if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) - { - if (Endpoint_IsINReady()) - return ENDPOINT_READYWAIT_NoError; - 12be: 80 e0 ldi r24, 0x00 ; 0 - 12c0: 08 95 ret - } - - uint8_t USB_DeviceState_LCL = USB_DeviceState; - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - return ENDPOINT_READYWAIT_DeviceDisconnected; - 12c2: 82 e0 ldi r24, 0x02 ; 2 - 12c4: 08 95 ret - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_READYWAIT_BusSuspended; - 12c6: 83 e0 ldi r24, 0x03 ; 3 - 12c8: 08 95 ret - else if (Endpoint_IsStalled()) - return ENDPOINT_READYWAIT_EndpointStalled; - 12ca: 81 e0 ldi r24, 0x01 ; 1 - 12cc: 08 95 ret - if (CurrentFrameNumber != PreviousFrameNumber) - { - PreviousFrameNumber = CurrentFrameNumber; - - if (!(TimeoutMSRem--)) - return ENDPOINT_READYWAIT_Timeout; - 12ce: 84 e0 ldi r24, 0x04 ; 4 - 12d0: 08 95 ret - return ENDPOINT_READYWAIT_NoError; - } - else - { - if (Endpoint_IsOUTReceived()) - return ENDPOINT_READYWAIT_NoError; - 12d2: 80 e0 ldi r24, 0x00 ; 0 - - if (!(TimeoutMSRem--)) - return ENDPOINT_READYWAIT_Timeout; - } - } -} - 12d4: 08 95 ret - * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. - */ - static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsOUTReceived(void) - { - return ((UEINTX & (1 << RXOUTI)) ? true : false); - 12d6: 20 91 e8 00 lds r18, 0x00E8 - if (Endpoint_IsINReady()) - return ENDPOINT_READYWAIT_NoError; - } - else - { - if (Endpoint_IsOUTReceived()) - 12da: 22 ff sbrs r18, 2 - 12dc: db cf rjmp .-74 ; 0x1294 - 12de: f9 cf rjmp .-14 ; 0x12d2 - -000012e0 : -{ - #if defined(USB_CAN_BE_BOTH) - bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0); - #endif - - USB_INT_DisableAllInterrupts(); - 12e0: 40 d0 rcall .+128 ; 0x1362 - USB_INT_ClearAllInterrupts(); - 12e2: 42 d0 rcall .+132 ; 0x1368 - } - - static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE; - static inline void USB_Controller_Reset(void) - { - USBCON &= ~(1 << USBE); - 12e4: 80 91 d8 00 lds r24, 0x00D8 - 12e8: 8f 77 andi r24, 0x7F ; 127 - 12ea: 80 93 d8 00 sts 0x00D8, r24 - USBCON |= (1 << USBE); - 12ee: 80 91 d8 00 lds r24, 0x00D8 - 12f2: 80 68 ori r24, 0x80 ; 128 - 12f4: 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); - 12f8: 80 91 d8 00 lds r24, 0x00D8 - 12fc: 8f 7d andi r24, 0xDF ; 223 - 12fe: 80 93 d8 00 sts 0x00D8, r24 - - /* Inline Functions: */ - static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; - static inline void USB_PLL_On(void) - { - PLLCSR = USB_PLL_PSC; - 1302: 84 e0 ldi r24, 0x04 ; 4 - 1304: 89 bd out 0x29, r24 ; 41 - PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - 1306: 86 e0 ldi r24, 0x06 ; 6 - 1308: 89 bd out 0x29, r24 ; 41 - - if (!(USB_Options & USB_OPT_MANUAL_PLL)) - { - #if defined(USB_SERIES_2_AVR) - USB_PLL_On(); - while (!(USB_PLL_IsReady())); - 130a: 09 b4 in r0, 0x29 ; 41 - 130c: 00 fe sbrs r0, 0 - 130e: fd cf rjmp .-6 ; 0x130a -} - -#if defined(USB_CAN_BE_DEVICE) -static void USB_Init_Device(void) -{ - USB_DeviceState = DEVICE_STATE_Unattached; - 1310: 1e ba out 0x1e, r1 ; 30 - USB_Device_ConfigurationNumber = 0; - 1312: 10 92 c8 02 sts 0x02C8, r1 - - #if !defined(NO_DEVICE_REMOTE_WAKEUP) - USB_Device_RemoteWakeupEnabled = false; - 1316: 10 92 ca 02 sts 0x02CA, r1 - #endif - - #if !defined(NO_DEVICE_SELF_POWER) - USB_Device_CurrentlySelfPowered = false; - 131a: 10 92 c9 02 sts 0x02C9, r1 - uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); - - if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - return false; - - return Endpoint_ConfigureEndpoint_Prv(Number, - 131e: 80 e0 ldi r24, 0x00 ; 0 - 1320: 60 e0 ldi r22, 0x00 ; 0 - 1322: 42 e0 ldi r20, 0x02 ; 2 - 1324: 10 df rcall .-480 ; 0x1146 - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDINT &= ~(1 << WAKEUPI); - break; - case USB_INT_SUSPI: - UDINT &= ~(1 << SUSPI); - 1326: 80 91 e1 00 lds r24, 0x00E1 - 132a: 8e 7f andi r24, 0xFE ; 254 - 132c: 80 93 e1 00 sts 0x00E1, r24 - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDIEN |= (1 << WAKEUPE); - break; - case USB_INT_SUSPI: - UDIEN |= (1 << SUSPE); - 1330: 80 91 e2 00 lds r24, 0x00E2 - 1334: 81 60 ori r24, 0x01 ; 1 - 1336: 80 93 e2 00 sts 0x00E2, r24 - break; - case USB_INT_EORSTI: - UDIEN |= (1 << EORSTE); - 133a: 80 91 e2 00 lds r24, 0x00E2 - 133e: 88 60 ori r24, 0x08 ; 8 - 1340: 80 93 e2 00 sts 0x00E2, 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); - 1344: 80 91 e0 00 lds r24, 0x00E0 - 1348: 8e 7f andi r24, 0xFE ; 254 - 134a: 80 93 e0 00 sts 0x00E0, r24 - } - - #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) - USB_OTGPAD_On(); - #endif -} - 134e: 08 95 ret - -00001350 : - 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); - #else - REGCR &= ~(1 << REGDIS); - 1350: e3 e6 ldi r30, 0x63 ; 99 - 1352: f0 e0 ldi r31, 0x00 ; 0 - 1354: 80 81 ld r24, Z - 1356: 8e 7f andi r24, 0xFE ; 254 - 1358: 80 83 st Z, r24 - UHWCON &= ~(1 << UIDE); - USB_CurrentMode = Mode; - } - #endif - - USB_IsInitialized = true; - 135a: 81 e0 ldi r24, 0x01 ; 1 - 135c: 80 93 cb 02 sts 0x02CB, r24 - - USB_ResetInterface(); -} - 1360: bf cf rjmp .-130 ; 0x12e0 - -00001362 : - #if defined(USB_CAN_BE_HOST) - UHIEN = 0; - #endif - - #if defined(USB_CAN_BE_DEVICE) - UDIEN = 0; - 1362: 10 92 e2 00 sts 0x00E2, r1 - #endif -} - 1366: 08 95 ret - -00001368 : - #if defined(USB_CAN_BE_HOST) - UHINT = 0; - #endif - - #if defined(USB_CAN_BE_DEVICE) - UDINT = 0; - 1368: 10 92 e1 00 sts 0x00E1, r1 - #endif -} - 136c: 08 95 ret - -0000136e <__vector_11>: - -ISR(USB_GEN_vect, ISR_BLOCK) -{ - 136e: 1f 92 push r1 - 1370: 0f 92 push r0 - 1372: 0f b6 in r0, 0x3f ; 63 - 1374: 0f 92 push r0 - 1376: 11 24 eor r1, r1 - 1378: 2f 93 push r18 - 137a: 3f 93 push r19 - 137c: 4f 93 push r20 - 137e: 5f 93 push r21 - 1380: 6f 93 push r22 - 1382: 7f 93 push r23 - 1384: 8f 93 push r24 - 1386: 9f 93 push r25 - 1388: af 93 push r26 - 138a: bf 93 push r27 - 138c: ef 93 push r30 - 138e: ff 93 push r31 - case USB_INT_SUSPI: - return (UDINT & (1 << SUSPI)); - case USB_INT_EORSTI: - return (UDINT & (1 << EORSTI)); - case USB_INT_SOFI: - return (UDINT & (1 << SOFI)); - 1390: 80 91 e1 00 lds r24, 0x00E1 - #if defined(USB_CAN_BE_DEVICE) - #if !defined(NO_SOF_EVENTS) - if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI)) - 1394: 82 ff sbrs r24, 2 - 1396: 0a c0 rjmp .+20 ; 0x13ac <__vector_11+0x3e> - case USB_INT_SUSPI: - return (UDIEN & (1 << SUSPE)); - case USB_INT_EORSTI: - return (UDIEN & (1 << EORSTE)); - case USB_INT_SOFI: - return (UDIEN & (1 << SOFE)); - 1398: 80 91 e2 00 lds r24, 0x00E2 - 139c: 82 ff sbrs r24, 2 - 139e: 06 c0 rjmp .+12 ; 0x13ac <__vector_11+0x3e> - break; - case USB_INT_EORSTI: - UDINT &= ~(1 << EORSTI); - break; - case USB_INT_SOFI: - UDINT &= ~(1 << SOFI); - 13a0: 80 91 e1 00 lds r24, 0x00E1 - 13a4: 8b 7f andi r24, 0xFB ; 251 - 13a6: 80 93 e1 00 sts 0x00E1, r24 - { - USB_INT_Clear(USB_INT_SOFI); - - EVENT_USB_Device_StartOfFrame(); - 13aa: 22 d2 rcall .+1092 ; 0x17f0 - #endif - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - return (UDINT & (1 << WAKEUPI)); - case USB_INT_SUSPI: - return (UDINT & (1 << SUSPI)); - 13ac: 80 91 e1 00 lds r24, 0x00E1 - EVENT_USB_Device_Disconnect(); - } - } - #endif - - if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI)) - 13b0: 80 ff sbrs r24, 0 - 13b2: 16 c0 rjmp .+44 ; 0x13e0 <__vector_11+0x72> - #endif - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - return (UDIEN & (1 << WAKEUPE)); - case USB_INT_SUSPI: - return (UDIEN & (1 << SUSPE)); - 13b4: 80 91 e2 00 lds r24, 0x00E2 - 13b8: 80 ff sbrs r24, 0 - 13ba: 12 c0 rjmp .+36 ; 0x13e0 <__vector_11+0x72> - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDIEN &= ~(1 << WAKEUPE); - break; - case USB_INT_SUSPI: - UDIEN &= ~(1 << SUSPE); - 13bc: 80 91 e2 00 lds r24, 0x00E2 - 13c0: 8e 7f andi r24, 0xFE ; 254 - 13c2: 80 93 e2 00 sts 0x00E2, r24 - USBCON |= (1 << IDTE); - break; - #endif - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDIEN |= (1 << WAKEUPE); - 13c6: 80 91 e2 00 lds r24, 0x00E2 - 13ca: 80 61 ori r24, 0x10 ; 16 - 13cc: 80 93 e2 00 sts 0x00E2, r24 - #endif - - static inline void USB_CLK_Freeze(void) ATTR_ALWAYS_INLINE; - static inline void USB_CLK_Freeze(void) - { - USBCON |= (1 << FRZCLK); - 13d0: 80 91 d8 00 lds r24, 0x00D8 - 13d4: 80 62 ori r24, 0x20 ; 32 - 13d6: 80 93 d8 00 sts 0x00D8, r24 - } - - static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE; - static inline void USB_PLL_Off(void) - { - PLLCSR = 0; - 13da: 19 bc out 0x29, r1 ; 41 - - if (!(USB_Options & USB_OPT_MANUAL_PLL)) - USB_PLL_Off(); - - #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) - USB_DeviceState = DEVICE_STATE_Unattached; - 13dc: 1e ba out 0x1e, r1 ; 30 - EVENT_USB_Device_Disconnect(); - 13de: 9f d9 rcall .-3266 ; 0x71e - case USB_INT_IDTI: - return (USBINT & (1 << IDTI)); - #endif - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - return (UDINT & (1 << WAKEUPI)); - 13e0: 80 91 e1 00 lds r24, 0x00E1 - USB_DeviceState = DEVICE_STATE_Suspended; - EVENT_USB_Device_Suspend(); - #endif - } - - if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI)) - 13e4: 84 ff sbrs r24, 4 - 13e6: 2c c0 rjmp .+88 ; 0x1440 <__vector_11+0xd2> - case USB_INT_IDTI: - return (USBCON & (1 << IDTE)); - #endif - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - return (UDIEN & (1 << WAKEUPE)); - 13e8: 80 91 e2 00 lds r24, 0x00E2 - 13ec: 84 ff sbrs r24, 4 - 13ee: 28 c0 rjmp .+80 ; 0x1440 <__vector_11+0xd2> - - /* Inline Functions: */ - static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; - static inline void USB_PLL_On(void) - { - PLLCSR = USB_PLL_PSC; - 13f0: 84 e0 ldi r24, 0x04 ; 4 - 13f2: 89 bd out 0x29, r24 ; 41 - PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - 13f4: 86 e0 ldi r24, 0x06 ; 6 - 13f6: 89 bd out 0x29, r24 ; 41 - { - if (!(USB_Options & USB_OPT_MANUAL_PLL)) - { - USB_PLL_On(); - while (!(USB_PLL_IsReady())); - 13f8: 09 b4 in r0, 0x29 ; 41 - 13fa: 00 fe sbrs r0, 0 - 13fc: fd cf rjmp .-6 ; 0x13f8 <__vector_11+0x8a> - } - - static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; - static inline void USB_CLK_Unfreeze(void) - { - USBCON &= ~(1 << FRZCLK); - 13fe: 80 91 d8 00 lds r24, 0x00D8 - 1402: 8f 7d andi r24, 0xDF ; 223 - 1404: 80 93 d8 00 sts 0x00D8, r24 - USBINT &= ~(1 << IDTI); - break; - #endif - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDINT &= ~(1 << WAKEUPI); - 1408: 80 91 e1 00 lds r24, 0x00E1 - 140c: 8f 7e andi r24, 0xEF ; 239 - 140e: 80 93 e1 00 sts 0x00E1, r24 - USBCON &= ~(1 << IDTE); - break; - #endif - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDIEN &= ~(1 << WAKEUPE); - 1412: 80 91 e2 00 lds r24, 0x00E2 - 1416: 8f 7e andi r24, 0xEF ; 239 - 1418: 80 93 e2 00 sts 0x00E2, r24 - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDIEN |= (1 << WAKEUPE); - break; - case USB_INT_SUSPI: - UDIEN |= (1 << SUSPE); - 141c: 80 91 e2 00 lds r24, 0x00E2 - 1420: 81 60 ori r24, 0x01 ; 1 - 1422: 80 93 e2 00 sts 0x00E2, r24 - USB_INT_Clear(USB_INT_WAKEUPI); - - USB_INT_Disable(USB_INT_WAKEUPI); - USB_INT_Enable(USB_INT_SUSPI); - - if (USB_Device_ConfigurationNumber) - 1426: 80 91 c8 02 lds r24, 0x02C8 - 142a: 88 23 and r24, r24 - 142c: 21 f4 brne .+8 ; 0x1436 <__vector_11+0xc8> - } - - static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; - static inline bool USB_Device_IsAddressSet(void) - { - return (UDADDR & (1 << ADDEN)); - 142e: 80 91 e3 00 lds r24, 0x00E3 - USB_DeviceState = DEVICE_STATE_Configured; - else - USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 1432: 87 ff sbrs r24, 7 - 1434: 02 c0 rjmp .+4 ; 0x143a <__vector_11+0xcc> - 1436: 84 e0 ldi r24, 0x04 ; 4 - 1438: 01 c0 rjmp .+2 ; 0x143c <__vector_11+0xce> - 143a: 81 e0 ldi r24, 0x01 ; 1 - 143c: 8e bb out 0x1e, r24 ; 30 - - #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) - EVENT_USB_Device_Connect(); - 143e: 6e d9 rcall .-3364 ; 0x71c - case USB_INT_WAKEUPI: - return (UDINT & (1 << WAKEUPI)); - case USB_INT_SUSPI: - return (UDINT & (1 << SUSPI)); - case USB_INT_EORSTI: - return (UDINT & (1 << EORSTI)); - 1440: 80 91 e1 00 lds r24, 0x00E1 - #else - EVENT_USB_Device_WakeUp(); - #endif - } - - if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) - 1444: 83 ff sbrs r24, 3 - 1446: 26 c0 rjmp .+76 ; 0x1494 <__vector_11+0x126> - case USB_INT_WAKEUPI: - return (UDIEN & (1 << WAKEUPE)); - case USB_INT_SUSPI: - return (UDIEN & (1 << SUSPE)); - case USB_INT_EORSTI: - return (UDIEN & (1 << EORSTE)); - 1448: 80 91 e2 00 lds r24, 0x00E2 - 144c: 83 ff sbrs r24, 3 - 144e: 22 c0 rjmp .+68 ; 0x1494 <__vector_11+0x126> - break; - case USB_INT_SUSPI: - UDINT &= ~(1 << SUSPI); - break; - case USB_INT_EORSTI: - UDINT &= ~(1 << EORSTI); - 1450: 80 91 e1 00 lds r24, 0x00E1 - 1454: 87 7f andi r24, 0xF7 ; 247 - 1456: 80 93 e1 00 sts 0x00E1, r24 - { - USB_INT_Clear(USB_INT_EORSTI); - - USB_DeviceState = DEVICE_STATE_Default; - 145a: 82 e0 ldi r24, 0x02 ; 2 - 145c: 8e bb out 0x1e, r24 ; 30 - USB_Device_ConfigurationNumber = 0; - 145e: 10 92 c8 02 sts 0x02C8, r1 - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDINT &= ~(1 << WAKEUPI); - break; - case USB_INT_SUSPI: - UDINT &= ~(1 << SUSPI); - 1462: 80 91 e1 00 lds r24, 0x00E1 - 1466: 8e 7f andi r24, 0xFE ; 254 - 1468: 80 93 e1 00 sts 0x00E1, r24 - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDIEN &= ~(1 << WAKEUPE); - break; - case USB_INT_SUSPI: - UDIEN &= ~(1 << SUSPE); - 146c: 80 91 e2 00 lds r24, 0x00E2 - 1470: 8e 7f andi r24, 0xFE ; 254 - 1472: 80 93 e2 00 sts 0x00E2, r24 - USBCON |= (1 << IDTE); - break; - #endif - #if defined(USB_CAN_BE_DEVICE) - case USB_INT_WAKEUPI: - UDIEN |= (1 << WAKEUPE); - 1476: 80 91 e2 00 lds r24, 0x00E2 - 147a: 80 61 ori r24, 0x10 ; 16 - 147c: 80 93 e2 00 sts 0x00E2, r24 - uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); - - if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - return false; - - return Endpoint_ConfigureEndpoint_Prv(Number, - 1480: 80 e0 ldi r24, 0x00 ; 0 - 1482: 60 e0 ldi r22, 0x00 ; 0 - 1484: 42 e0 ldi r20, 0x02 ; 2 - 1486: 5f de rcall .-834 ; 0x1146 - break; - case USB_INT_SOFI: - UDIEN |= (1 << SOFE); - break; - case USB_INT_RXSTPI: - UEIENX |= (1 << RXSTPE); - 1488: 80 91 f0 00 lds r24, 0x00F0 - 148c: 88 60 ori r24, 0x08 ; 8 - 148e: 80 93 f0 00 sts 0x00F0, r24 - - #if defined(INTERRUPT_CONTROL_ENDPOINT) - USB_INT_Enable(USB_INT_RXSTPI); - #endif - - EVENT_USB_Device_Reset(); - 1492: ae d1 rcall .+860 ; 0x17f0 - USB_ResetInterface(); - - EVENT_USB_UIDChange(); - } - #endif -} - 1494: ff 91 pop r31 - 1496: ef 91 pop r30 - 1498: bf 91 pop r27 - 149a: af 91 pop r26 - 149c: 9f 91 pop r25 - 149e: 8f 91 pop r24 - 14a0: 7f 91 pop r23 - 14a2: 6f 91 pop r22 - 14a4: 5f 91 pop r21 - 14a6: 4f 91 pop r20 - 14a8: 3f 91 pop r19 - 14aa: 2f 91 pop r18 - 14ac: 0f 90 pop r0 - 14ae: 0f be out 0x3f, r0 ; 63 - 14b0: 0f 90 pop r0 - 14b2: 1f 90 pop r1 - 14b4: 18 95 reti - -000014b6 <__vector_12>: - -#if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE) -ISR(USB_COM_vect, ISR_BLOCK) -{ - 14b6: 1f 92 push r1 - 14b8: 0f 92 push r0 - 14ba: 0f b6 in r0, 0x3f ; 63 - 14bc: 0f 92 push r0 - 14be: 11 24 eor r1, r1 - 14c0: 1f 93 push r17 - 14c2: 2f 93 push r18 - 14c4: 3f 93 push r19 - 14c6: 4f 93 push r20 - 14c8: 5f 93 push r21 - 14ca: 6f 93 push r22 - 14cc: 7f 93 push r23 - 14ce: 8f 93 push r24 - 14d0: 9f 93 push r25 - 14d2: af 93 push r26 - 14d4: bf 93 push r27 - 14d6: ef 93 push r30 - 14d8: ff 93 push r31 - */ - static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_GetCurrentEndpoint(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 14da: 10 91 e9 00 lds r17, 0x00E9 - 14de: 1f 70 andi r17, 0x0F ; 15 - * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. - */ - static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_GetEndpointDirection(void) - { - return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - 14e0: 80 91 ec 00 lds r24, 0x00EC - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 14e4: 10 92 e9 00 sts 0x00E9, r1 - break; - case USB_INT_SOFI: - UDIEN &= ~(1 << SOFE); - break; - case USB_INT_RXSTPI: - UEIENX &= ~(1 << RXSTPE); - 14e8: 80 91 f0 00 lds r24, 0x00F0 - 14ec: 87 7f andi r24, 0xF7 ; 247 - 14ee: 80 93 f0 00 sts 0x00F0, r24 - static inline void GlobalInterruptEnable(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - sei(); - 14f2: 78 94 sei - Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); - USB_INT_Disable(USB_INT_RXSTPI); - - GlobalInterruptEnable(); - - USB_Device_ProcessControlRequest(); - 14f4: 1b d0 rcall .+54 ; 0x152c - 14f6: 10 92 e9 00 sts 0x00E9, r1 - break; - case USB_INT_SOFI: - UDIEN |= (1 << SOFE); - break; - case USB_INT_RXSTPI: - UEIENX |= (1 << RXSTPE); - 14fa: 80 91 f0 00 lds r24, 0x00F0 - 14fe: 88 60 ori r24, 0x08 ; 8 - 1500: 80 93 f0 00 sts 0x00F0, r24 - 1504: 10 93 e9 00 sts 0x00E9, r17 - - Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); - USB_INT_Enable(USB_INT_RXSTPI); - Endpoint_SelectEndpoint(PrevSelectedEndpoint); -} - 1508: ff 91 pop r31 - 150a: ef 91 pop r30 - 150c: bf 91 pop r27 - 150e: af 91 pop r26 - 1510: 9f 91 pop r25 - 1512: 8f 91 pop r24 - 1514: 7f 91 pop r23 - 1516: 6f 91 pop r22 - 1518: 5f 91 pop r21 - 151a: 4f 91 pop r20 - 151c: 3f 91 pop r19 - 151e: 2f 91 pop r18 - 1520: 1f 91 pop r17 - 1522: 0f 90 pop r0 - 1524: 0f be out 0x3f, r0 ; 63 - 1526: 0f 90 pop r0 - 1528: 1f 90 pop r1 - 152a: 18 95 reti - -0000152c : -#if !defined(NO_DEVICE_REMOTE_WAKEUP) -bool USB_Device_RemoteWakeupEnabled; -#endif - -void USB_Device_ProcessControlRequest(void) -{ - 152c: 1f 93 push r17 - 152e: df 93 push r29 - 1530: cf 93 push r28 - 1532: cd b7 in r28, 0x3d ; 61 - 1534: de b7 in r29, 0x3e ; 62 - 1536: ac 97 sbiw r28, 0x2c ; 44 - 1538: 0f b6 in r0, 0x3f ; 63 - 153a: f8 94 cli - 153c: de bf out 0x3e, r29 ; 62 - 153e: 0f be out 0x3f, r0 ; 63 - 1540: cd bf out 0x3d, r28 ; 61 - USB_ControlRequest.bRequest = Endpoint_Read_8(); - USB_ControlRequest.wValue = Endpoint_Read_16_LE(); - USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); - USB_ControlRequest.wLength = Endpoint_Read_16_LE(); - #else - uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; - 1542: ec ec ldi r30, 0xCC ; 204 - 1544: f2 e0 ldi r31, 0x02 ; 2 - * \return Next byte in the currently selected endpoint's FIFO buffer. - */ - static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_Read_8(void) - { - return UEDATX; - 1546: 80 91 f1 00 lds r24, 0x00F1 - - for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) - *(RequestHeader++) = Endpoint_Read_8(); - 154a: 81 93 st Z+, r24 - USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); - USB_ControlRequest.wLength = Endpoint_Read_16_LE(); - #else - uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; - - for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) - 154c: 22 e0 ldi r18, 0x02 ; 2 - 154e: e4 3d cpi r30, 0xD4 ; 212 - 1550: f2 07 cpc r31, r18 - 1552: c9 f7 brne .-14 ; 0x1546 - *(RequestHeader++) = Endpoint_Read_8(); - #endif - - EVENT_USB_Device_ControlRequest(); - 1554: e9 d8 rcall .-3630 ; 0x728 - * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. - */ - static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsSETUPReceived(void) - { - return ((UEINTX & (1 << RXSTPI)) ? true : false); - 1556: 80 91 e8 00 lds r24, 0x00E8 - - if (Endpoint_IsSETUPReceived()) - 155a: 83 ff sbrs r24, 3 - 155c: 31 c1 rjmp .+610 ; 0x17c0 - { - uint8_t bmRequestType = USB_ControlRequest.bmRequestType; - 155e: 80 91 cc 02 lds r24, 0x02CC - - switch (USB_ControlRequest.bRequest) - 1562: 20 91 cd 02 lds r18, 0x02CD - 1566: 25 30 cpi r18, 0x05 ; 5 - 1568: 09 f4 brne .+2 ; 0x156c - 156a: 84 c0 rjmp .+264 ; 0x1674 - 156c: 26 30 cpi r18, 0x06 ; 6 - 156e: 40 f4 brcc .+16 ; 0x1580 - 1570: 21 30 cpi r18, 0x01 ; 1 - 1572: a1 f1 breq .+104 ; 0x15dc - 1574: 21 30 cpi r18, 0x01 ; 1 - 1576: 70 f0 brcs .+28 ; 0x1594 - 1578: 23 30 cpi r18, 0x03 ; 3 - 157a: 09 f0 breq .+2 ; 0x157e - 157c: 21 c1 rjmp .+578 ; 0x17c0 - 157e: 2e c0 rjmp .+92 ; 0x15dc - 1580: 28 30 cpi r18, 0x08 ; 8 - 1582: 09 f4 brne .+2 ; 0x1586 - 1584: ef c0 rjmp .+478 ; 0x1764 - 1586: 29 30 cpi r18, 0x09 ; 9 - 1588: 09 f4 brne .+2 ; 0x158c - 158a: fe c0 rjmp .+508 ; 0x1788 - 158c: 26 30 cpi r18, 0x06 ; 6 - 158e: 09 f0 breq .+2 ; 0x1592 - 1590: 17 c1 rjmp .+558 ; 0x17c0 - 1592: 92 c0 rjmp .+292 ; 0x16b8 - { - case REQ_GetStatus: - if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - 1594: 80 38 cpi r24, 0x80 ; 128 - 1596: 21 f0 breq .+8 ; 0x15a0 - 1598: 82 38 cpi r24, 0x82 ; 130 - 159a: 09 f0 breq .+2 ; 0x159e - 159c: 11 c1 rjmp .+546 ; 0x17c0 - 159e: 08 c0 rjmp .+16 ; 0x15b0 - Endpoint_ClearOUT(); -} - -static void USB_Device_GetStatus(void) -{ - uint8_t CurrentStatus = 0; - 15a0: 80 91 c9 02 lds r24, 0x02C9 - if (USB_Device_CurrentlySelfPowered) - CurrentStatus |= FEATURE_SELFPOWERED_ENABLED; - #endif - - #if !defined(NO_DEVICE_REMOTE_WAKEUP) - if (USB_Device_RemoteWakeupEnabled) - 15a4: 90 91 ca 02 lds r25, 0x02CA - 15a8: 99 23 and r25, r25 - 15aa: 71 f0 breq .+28 ; 0x15c8 - CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED; - 15ac: 82 60 ori r24, 0x02 ; 2 - 15ae: 0c c0 rjmp .+24 ; 0x15c8 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 15b0: 80 91 d0 02 lds r24, 0x02D0 - 15b4: 8f 70 andi r24, 0x0F ; 15 - 15b6: 80 93 e9 00 sts 0x00E9, r24 - * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. - */ - static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsStalled(void) - { - return ((UECONX & (1 << STALLRQ)) ? true : false); - 15ba: 90 91 eb 00 lds r25, 0x00EB - break; - case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT): - #if !defined(CONTROL_ONLY_DEVICE) - Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); - - CurrentStatus = Endpoint_IsStalled(); - 15be: 81 e0 ldi r24, 0x01 ; 1 - 15c0: 95 ff sbrs r25, 5 - 15c2: 80 e0 ldi r24, 0x00 ; 0 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 15c4: 10 92 e9 00 sts 0x00E9, r1 - * \note This is not applicable for non CONTROL type endpoints. - */ - static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearSETUP(void) - { - UEINTX &= ~(1 << RXSTPI); - 15c8: 90 91 e8 00 lds r25, 0x00E8 - 15cc: 97 7f andi r25, 0xF7 ; 247 - 15ce: 90 93 e8 00 sts 0x00E8, r25 - * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_16_LE(const uint16_t Data) - { - UEDATX = (Data & 0xFF); - 15d2: 80 93 f1 00 sts 0x00F1, r24 - UEDATX = (Data >> 8); - 15d6: 10 92 f1 00 sts 0x00F1, r1 - 15da: cf c0 rjmp .+414 ; 0x177a - } - - break; - case REQ_ClearFeature: - case REQ_SetFeature: - if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) || - 15dc: 88 23 and r24, r24 - 15de: 19 f0 breq .+6 ; 0x15e6 - 15e0: 82 30 cpi r24, 0x02 ; 2 - 15e2: 09 f0 breq .+2 ; 0x15e6 - 15e4: ed c0 rjmp .+474 ; 0x17c0 - Endpoint_ClearStatusStage(); -} - -static void USB_Device_ClearSetFeature(void) -{ - switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT) - 15e6: 90 e0 ldi r25, 0x00 ; 0 - 15e8: 8f 71 andi r24, 0x1F ; 31 - 15ea: 90 70 andi r25, 0x00 ; 0 - 15ec: 00 97 sbiw r24, 0x00 ; 0 - 15ee: 29 f0 breq .+10 ; 0x15fa - 15f0: 82 30 cpi r24, 0x02 ; 2 - 15f2: 91 05 cpc r25, r1 - 15f4: 09 f0 breq .+2 ; 0x15f8 - 15f6: e4 c0 rjmp .+456 ; 0x17c0 - 15f8: 0b c0 rjmp .+22 ; 0x1610 - { - #if !defined(NO_DEVICE_REMOTE_WAKEUP) - case REQREC_DEVICE: - if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup) - 15fa: 80 91 ce 02 lds r24, 0x02CE - 15fe: 81 30 cpi r24, 0x01 ; 1 - 1600: 09 f0 breq .+2 ; 0x1604 - 1602: de c0 rjmp .+444 ; 0x17c0 - USB_Device_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature); - 1604: 23 30 cpi r18, 0x03 ; 3 - 1606: 09 f0 breq .+2 ; 0x160a - 1608: 80 e0 ldi r24, 0x00 ; 0 - 160a: 80 93 ca 02 sts 0x02CA, r24 - 160e: 2c c0 rjmp .+88 ; 0x1668 - - break; - #endif - #if !defined(CONTROL_ONLY_DEVICE) - case REQREC_ENDPOINT: - if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt) - 1610: 80 91 ce 02 lds r24, 0x02CE - 1614: 88 23 and r24, r24 - 1616: 41 f5 brne .+80 ; 0x1668 - { - uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); - 1618: 20 91 d0 02 lds r18, 0x02D0 - 161c: 2f 70 andi r18, 0x0F ; 15 - - if (EndpointIndex == ENDPOINT_CONTROLEP) - 161e: 09 f4 brne .+2 ; 0x1622 - 1620: cf c0 rjmp .+414 ; 0x17c0 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1622: 20 93 e9 00 sts 0x00E9, r18 - * \return Boolean \c true if the currently selected endpoint is enabled, \c false otherwise. - */ - static inline bool Endpoint_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsEnabled(void) - { - return ((UECONX & (1 << EPEN)) ? true : false); - 1626: 80 91 eb 00 lds r24, 0x00EB - return; - - Endpoint_SelectEndpoint(EndpointIndex); - - if (Endpoint_IsEnabled()) - 162a: 80 ff sbrs r24, 0 - 162c: 1d c0 rjmp .+58 ; 0x1668 - { - if (USB_ControlRequest.bRequest == REQ_SetFeature) - 162e: 80 91 cd 02 lds r24, 0x02CD - 1632: 83 30 cpi r24, 0x03 ; 3 - 1634: 21 f4 brne .+8 ; 0x163e - * \ingroup Group_EndpointPacketManagement_AVR8 - */ - static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_StallTransaction(void) - { - UECONX |= (1 << STALLRQ); - 1636: 80 91 eb 00 lds r24, 0x00EB - 163a: 80 62 ori r24, 0x20 ; 32 - 163c: 13 c0 rjmp .+38 ; 0x1664 - * \ingroup Group_EndpointPacketManagement_AVR8 - */ - static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearStall(void) - { - UECONX |= (1 << STALLRQC); - 163e: 80 91 eb 00 lds r24, 0x00EB - 1642: 80 61 ori r24, 0x10 ; 16 - 1644: 80 93 eb 00 sts 0x00EB, r24 - * \param[in] Address Endpoint address whose FIFO buffers are to be reset. - */ - static inline void Endpoint_ResetEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ResetEndpoint(const uint8_t Address) - { - UERST = (1 << (Address & ENDPOINT_EPNUM_MASK)); - 1648: 81 e0 ldi r24, 0x01 ; 1 - 164a: 90 e0 ldi r25, 0x00 ; 0 - 164c: 02 c0 rjmp .+4 ; 0x1652 - 164e: 88 0f add r24, r24 - 1650: 99 1f adc r25, r25 - 1652: 2a 95 dec r18 - 1654: e2 f7 brpl .-8 ; 0x164e - 1656: 80 93 ea 00 sts 0x00EA, r24 - UERST = 0; - 165a: 10 92 ea 00 sts 0x00EA, r1 - - /** Resets the data toggle of the currently selected endpoint. */ - static inline void Endpoint_ResetDataToggle(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ResetDataToggle(void) - { - UECONX |= (1 << RSTDT); - 165e: 80 91 eb 00 lds r24, 0x00EB - 1662: 88 60 ori r24, 0x08 ; 8 - 1664: 80 93 eb 00 sts 0x00EB, r24 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1668: 10 92 e9 00 sts 0x00E9, r1 - * \note This is not applicable for non CONTROL type endpoints. - */ - static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearSETUP(void) - { - UEINTX &= ~(1 << RXSTPI); - 166c: 80 91 e8 00 lds r24, 0x00E8 - 1670: 87 7f andi r24, 0xF7 ; 247 - 1672: 86 c0 rjmp .+268 ; 0x1780 - USB_Device_ClearSetFeature(); - } - - break; - case REQ_SetAddress: - if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 1674: 88 23 and r24, r24 - 1676: 09 f0 breq .+2 ; 0x167a - 1678: a3 c0 rjmp .+326 ; 0x17c0 - } -} - -static void USB_Device_SetAddress(void) -{ - uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F); - 167a: 10 91 ce 02 lds r17, 0x02CE - 167e: 1f 77 andi r17, 0x7F ; 127 - #endif - - static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void USB_Device_SetDeviceAddress(const uint8_t Address) - { - UDADDR = (UDADDR & (1 << ADDEN)) | (Address & 0x7F); - 1680: 80 91 e3 00 lds r24, 0x00E3 - 1684: 80 78 andi r24, 0x80 ; 128 - 1686: 81 2b or r24, r17 - 1688: 80 93 e3 00 sts 0x00E3, r24 - 168c: 80 91 e8 00 lds r24, 0x00E8 - 1690: 87 7f andi r24, 0xF7 ; 247 - 1692: 80 93 e8 00 sts 0x00E8, r24 - - USB_Device_SetDeviceAddress(DeviceAddress); - - Endpoint_ClearSETUP(); - - Endpoint_ClearStatusStage(); - 1696: d2 dd rcall .-1116 ; 0x123c - * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. - */ - static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsINReady(void) - { - return ((UEINTX & (1 << TXINI)) ? true : false); - 1698: 80 91 e8 00 lds r24, 0x00E8 - - while (!(Endpoint_IsINReady())); - 169c: 80 ff sbrs r24, 0 - 169e: fc cf rjmp .-8 ; 0x1698 - static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) - { - (void)Address; - - UDADDR |= (1 << ADDEN); - 16a0: 80 91 e3 00 lds r24, 0x00E3 - 16a4: 80 68 ori r24, 0x80 ; 128 - 16a6: 80 93 e3 00 sts 0x00E3, r24 - - USB_Device_EnableDeviceAddress(DeviceAddress); - - USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default; - 16aa: 11 23 and r17, r17 - 16ac: 11 f0 breq .+4 ; 0x16b2 - 16ae: 83 e0 ldi r24, 0x03 ; 3 - 16b0: 01 c0 rjmp .+2 ; 0x16b4 - 16b2: 82 e0 ldi r24, 0x02 ; 2 - 16b4: 8e bb out 0x1e, r24 ; 30 - 16b6: 84 c0 rjmp .+264 ; 0x17c0 - if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - USB_Device_SetAddress(); - - break; - case REQ_GetDescriptor: - if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - 16b8: 80 58 subi r24, 0x80 ; 128 - 16ba: 82 30 cpi r24, 0x02 ; 2 - 16bc: 08 f0 brcs .+2 ; 0x16c0 - 16be: 80 c0 rjmp .+256 ; 0x17c0 - !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS)) - uint8_t DescriptorAddressSpace; - #endif - - #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR) - if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL)) - 16c0: 80 91 ce 02 lds r24, 0x02CE - 16c4: 90 91 cf 02 lds r25, 0x02CF - 16c8: 23 e0 ldi r18, 0x03 ; 3 - 16ca: 8c 3d cpi r24, 0xDC ; 220 - 16cc: 92 07 cpc r25, r18 - 16ce: 91 f5 brne .+100 ; 0x1734 - { - USB_Descriptor_Header_t Header; - uint16_t UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4]; - } SignatureDescriptor; - - SignatureDescriptor.Header.Type = DTYPE_String; - 16d0: 83 e0 ldi r24, 0x03 ; 3 - 16d2: 8c 83 std Y+4, r24 ; 0x04 - SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4); - 16d4: 8a e2 ldi r24, 0x2A ; 42 - 16d6: 8b 83 std Y+3, r24 ; 0x03 - static inline uint_reg_t GetGlobalInterruptMask(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - return SREG; - 16d8: 5f b7 in r21, 0x3f ; 63 - static inline void GlobalInterruptDisable(void) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - cli(); - 16da: f8 94 cli - __builtin_ssrf(AVR32_SR_GM_OFFSET); - #elif (ARCH == ARCH_XMEGA) - cli(); - #endif - - GCC_MEMORY_BARRIER(); - 16dc: de 01 movw r26, r28 - 16de: 15 96 adiw r26, 0x05 ; 5 - 16e0: 80 e0 ldi r24, 0x00 ; 0 - 16e2: 90 e0 ldi r25, 0x00 ; 0 - static inline void USB_Device_GetSerialString(uint16_t* const UnicodeString) - { - uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); - GlobalInterruptDisable(); - - uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; - 16e4: 4e e0 ldi r20, 0x0E ; 14 - - for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) - { - uint8_t SerialByte = boot_signature_byte_get(SigReadAddress); - 16e6: 61 e2 ldi r22, 0x21 ; 33 - 16e8: e4 2f mov r30, r20 - 16ea: f0 e0 ldi r31, 0x00 ; 0 - 16ec: 60 93 57 00 sts 0x0057, r22 - 16f0: e4 91 lpm r30, Z+ - - if (SerialCharNum & 0x01) - 16f2: 80 ff sbrs r24, 0 - 16f4: 03 c0 rjmp .+6 ; 0x16fc - { - SerialByte >>= 4; - 16f6: e2 95 swap r30 - 16f8: ef 70 andi r30, 0x0F ; 15 - SigReadAddress++; - 16fa: 4f 5f subi r20, 0xFF ; 255 - } - - SerialByte &= 0x0F; - 16fc: ef 70 andi r30, 0x0F ; 15 - 16fe: 2e 2f mov r18, r30 - 1700: 30 e0 ldi r19, 0x00 ; 0 - - UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ? - 1702: ea 30 cpi r30, 0x0A ; 10 - 1704: 18 f0 brcs .+6 ; 0x170c - 1706: 29 5c subi r18, 0xC9 ; 201 - 1708: 3f 4f sbci r19, 0xFF ; 255 - 170a: 02 c0 rjmp .+4 ; 0x1710 - 170c: 20 5d subi r18, 0xD0 ; 208 - 170e: 3f 4f sbci r19, 0xFF ; 255 - 1710: 2d 93 st X+, r18 - 1712: 3d 93 st X+, r19 - 1714: 01 96 adiw r24, 0x01 ; 1 - uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); - GlobalInterruptDisable(); - - uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; - - for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) - 1716: 84 31 cpi r24, 0x14 ; 20 - 1718: 91 05 cpc r25, r1 - 171a: 31 f7 brne .-52 ; 0x16e8 - static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) - { - GCC_MEMORY_BARRIER(); - - #if (ARCH == ARCH_AVR8) - SREG = GlobalIntState; - 171c: 5f bf out 0x3f, r21 ; 63 - * \note This is not applicable for non CONTROL type endpoints. - */ - static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearSETUP(void) - { - UEINTX &= ~(1 << RXSTPI); - 171e: 80 91 e8 00 lds r24, 0x00E8 - 1722: 87 7f andi r24, 0xF7 ; 247 - 1724: 80 93 e8 00 sts 0x00E8, r24 - - USB_Device_GetSerialString(SignatureDescriptor.UnicodeString); - - Endpoint_ClearSETUP(); - - Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor)); - 1728: ce 01 movw r24, r28 - 172a: 03 96 adiw r24, 0x03 ; 3 - 172c: 6a e2 ldi r22, 0x2A ; 42 - 172e: 70 e0 ldi r23, 0x00 ; 0 - 1730: 55 dc rcall .-1878 ; 0xfdc - 1732: 12 c0 rjmp .+36 ; 0x1758 - USB_Device_GetInternalSerialDescriptor(); - return; - } - #endif - - if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex, - 1734: 60 91 d0 02 lds r22, 0x02D0 - 1738: ae 01 movw r20, r28 - 173a: 4f 5f subi r20, 0xFF ; 255 - 173c: 5f 4f sbci r21, 0xFF ; 255 - 173e: 21 dc rcall .-1982 ; 0xf82 - 1740: bc 01 movw r22, r24 - 1742: 00 97 sbiw r24, 0x00 ; 0 - 1744: 09 f4 brne .+2 ; 0x1748 - 1746: 3c c0 rjmp .+120 ; 0x17c0 - 1748: 80 91 e8 00 lds r24, 0x00E8 - 174c: 87 7f andi r24, 0xF7 ; 247 - 174e: 80 93 e8 00 sts 0x00E8, r24 - #if defined(USE_RAM_DESCRIPTORS) || !defined(ARCH_HAS_MULTI_ADDRESS_SPACE) - Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize); - #elif defined(USE_EEPROM_DESCRIPTORS) - Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize); - #elif defined(USE_FLASH_DESCRIPTORS) - Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize); - 1752: 89 81 ldd r24, Y+1 ; 0x01 - 1754: 9a 81 ldd r25, Y+2 ; 0x02 - 1756: 9c dc rcall .-1736 ; 0x1090 - */ - static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearOUT(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1758: 80 91 e8 00 lds r24, 0x00E8 - 175c: 8b 77 andi r24, 0x7B ; 123 - 175e: 80 93 e8 00 sts 0x00E8, r24 - 1762: 2e c0 rjmp .+92 ; 0x17c0 - USB_Device_GetDescriptor(); - } - - break; - case REQ_GetConfiguration: - if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) - 1764: 80 38 cpi r24, 0x80 ; 128 - 1766: 61 f5 brne .+88 ; 0x17c0 - * \note This is not applicable for non CONTROL type endpoints. - */ - static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearSETUP(void) - { - UEINTX &= ~(1 << RXSTPI); - 1768: 80 91 e8 00 lds r24, 0x00E8 - 176c: 87 7f andi r24, 0xF7 ; 247 - 176e: 80 93 e8 00 sts 0x00E8, r24 - -static void USB_Device_GetConfiguration(void) -{ - Endpoint_ClearSETUP(); - - Endpoint_Write_8(USB_Device_ConfigurationNumber); - 1772: 80 91 c8 02 lds r24, 0x02C8 - * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_8(const uint8_t Data) - { - UEDATX = Data; - 1776: 80 93 f1 00 sts 0x00F1, r24 - */ - static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearIN(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 177a: 80 91 e8 00 lds r24, 0x00E8 - 177e: 8e 77 andi r24, 0x7E ; 126 - 1780: 80 93 e8 00 sts 0x00E8, r24 - Endpoint_ClearIN(); - - Endpoint_ClearStatusStage(); - 1784: 5b dd rcall .-1354 ; 0x123c - 1786: 1c c0 rjmp .+56 ; 0x17c0 - if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) - USB_Device_GetConfiguration(); - - break; - case REQ_SetConfiguration: - if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 1788: 88 23 and r24, r24 - 178a: d1 f4 brne .+52 ; 0x17c0 -} - -static void USB_Device_SetConfiguration(void) -{ - #if defined(FIXED_NUM_CONFIGURATIONS) - if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS) - 178c: 90 91 ce 02 lds r25, 0x02CE - 1790: 92 30 cpi r25, 0x02 ; 2 - 1792: b0 f4 brcc .+44 ; 0x17c0 - * \note This is not applicable for non CONTROL type endpoints. - */ - static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearSETUP(void) - { - UEINTX &= ~(1 << RXSTPI); - 1794: 80 91 e8 00 lds r24, 0x00E8 - 1798: 87 7f andi r24, 0xF7 ; 247 - 179a: 80 93 e8 00 sts 0x00E8, r24 - #endif - #endif - - Endpoint_ClearSETUP(); - - USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue; - 179e: 90 93 c8 02 sts 0x02C8, r25 - - Endpoint_ClearStatusStage(); - 17a2: 4c dd rcall .-1384 ; 0x123c - - if (USB_Device_ConfigurationNumber) - 17a4: 80 91 c8 02 lds r24, 0x02C8 - 17a8: 88 23 and r24, r24 - 17aa: 21 f4 brne .+8 ; 0x17b4 - } - - static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; - static inline bool USB_Device_IsAddressSet(void) - { - return (UDADDR & (1 << ADDEN)); - 17ac: 80 91 e3 00 lds r24, 0x00E3 - USB_DeviceState = DEVICE_STATE_Configured; - else - USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 17b0: 87 ff sbrs r24, 7 - 17b2: 02 c0 rjmp .+4 ; 0x17b8 - 17b4: 84 e0 ldi r24, 0x04 ; 4 - 17b6: 01 c0 rjmp .+2 ; 0x17ba - 17b8: 81 e0 ldi r24, 0x01 ; 1 - 17ba: 8e bb out 0x1e, r24 ; 30 - - EVENT_USB_Device_ConfigurationChanged(); - 17bc: 0e 94 90 03 call 0x720 ; 0x720 - * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. - */ - static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsSETUPReceived(void) - { - return ((UEINTX & (1 << RXSTPI)) ? true : false); - 17c0: 80 91 e8 00 lds r24, 0x00E8 - default: - break; - } - } - - if (Endpoint_IsSETUPReceived()) - 17c4: 83 ff sbrs r24, 3 - 17c6: 0a c0 rjmp .+20 ; 0x17dc - * \note This is not applicable for non CONTROL type endpoints. - */ - static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearSETUP(void) - { - UEINTX &= ~(1 << RXSTPI); - 17c8: 80 91 e8 00 lds r24, 0x00E8 - 17cc: 87 7f andi r24, 0xF7 ; 247 - 17ce: 80 93 e8 00 sts 0x00E8, r24 - * \ingroup Group_EndpointPacketManagement_AVR8 - */ - static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_StallTransaction(void) - { - UECONX |= (1 << STALLRQ); - 17d2: 80 91 eb 00 lds r24, 0x00EB - 17d6: 80 62 ori r24, 0x20 ; 32 - 17d8: 80 93 eb 00 sts 0x00EB, r24 - { - Endpoint_ClearSETUP(); - Endpoint_StallTransaction(); - } -} - 17dc: ac 96 adiw r28, 0x2c ; 44 - 17de: 0f b6 in r0, 0x3f ; 63 - 17e0: f8 94 cli - 17e2: de bf out 0x3e, r29 ; 62 - 17e4: 0f be out 0x3f, r0 ; 63 - 17e6: cd bf out 0x3d, r28 ; 61 - 17e8: cf 91 pop r28 - 17ea: df 91 pop r29 - 17ec: 1f 91 pop r17 - 17ee: 08 95 ret - -000017f0 : -#include "Events.h" - -void USB_Event_Stub(void) -{ - -} - 17f0: 08 95 ret - -000017f2 : -#if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR) -volatile uint8_t USB_DeviceState; -#endif - -void USB_USBTask(void) -{ - 17f2: 1f 93 push r17 -} - -#if defined(USB_CAN_BE_DEVICE) -static void USB_DeviceTask(void) -{ - if (USB_DeviceState == DEVICE_STATE_Unattached) - 17f4: 8e b3 in r24, 0x1e ; 30 - 17f6: 88 23 and r24, r24 - 17f8: a9 f0 breq .+42 ; 0x1824 - */ - static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_GetCurrentEndpoint(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 17fa: 80 91 e9 00 lds r24, 0x00E9 - 17fe: 8f 70 andi r24, 0x0F ; 15 - * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. - */ - static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_GetEndpointDirection(void) - { - return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - 1800: 90 91 ec 00 lds r25, 0x00EC - 1804: 90 ff sbrs r25, 0 - 1806: 02 c0 rjmp .+4 ; 0x180c - 1808: 10 e8 ldi r17, 0x80 ; 128 - 180a: 01 c0 rjmp .+2 ; 0x180e - 180c: 10 e0 ldi r17, 0x00 ; 0 - */ - static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_GetCurrentEndpoint(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 180e: 18 2b or r17, r24 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1810: 10 92 e9 00 sts 0x00E9, r1 - * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. - */ - static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsSETUPReceived(void) - { - return ((UEINTX & (1 << RXSTPI)) ? true : false); - 1814: 80 91 e8 00 lds r24, 0x00E8 - - uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); - - Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); - - if (Endpoint_IsSETUPReceived()) - 1818: 83 ff sbrs r24, 3 - 181a: 01 c0 rjmp .+2 ; 0x181e - USB_Device_ProcessControlRequest(); - 181c: 87 de rcall .-754 ; 0x152c - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 181e: 1f 70 andi r17, 0x0F ; 15 - 1820: 10 93 e9 00 sts 0x00E9, r17 - #elif defined(USB_CAN_BE_HOST) - USB_HostTask(); - #elif defined(USB_CAN_BE_DEVICE) - USB_DeviceTask(); - #endif -} - 1824: 1f 91 pop r17 - 1826: 08 95 ret - -00001828 : -#define __INCLUDE_FROM_CDC_DRIVER -#define __INCLUDE_FROM_CDC_DEVICE_C -#include "CDCClassDevice.h" - -void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - 1828: cf 93 push r28 - 182a: df 93 push r29 - 182c: ec 01 movw r28, r24 - * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. - */ - static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsSETUPReceived(void) - { - return ((UEINTX & (1 << RXSTPI)) ? true : false); - 182e: 80 91 e8 00 lds r24, 0x00E8 - if (!(Endpoint_IsSETUPReceived())) - 1832: 83 ff sbrs r24, 3 - 1834: a3 c0 rjmp .+326 ; 0x197c - return; - - if (USB_ControlRequest.wIndex != CDCInterfaceInfo->Config.ControlInterfaceNumber) - 1836: 88 81 ld r24, Y - 1838: 90 e0 ldi r25, 0x00 ; 0 - 183a: 20 91 d0 02 lds r18, 0x02D0 - 183e: 30 91 d1 02 lds r19, 0x02D1 - 1842: 28 17 cp r18, r24 - 1844: 39 07 cpc r19, r25 - 1846: 09 f0 breq .+2 ; 0x184a - 1848: 99 c0 rjmp .+306 ; 0x197c - return; - - switch (USB_ControlRequest.bRequest) - 184a: 80 91 cd 02 lds r24, 0x02CD - 184e: 81 32 cpi r24, 0x21 ; 33 - 1850: 69 f0 breq .+26 ; 0x186c - 1852: 82 32 cpi r24, 0x22 ; 34 - 1854: 20 f4 brcc .+8 ; 0x185e - 1856: 80 32 cpi r24, 0x20 ; 32 - 1858: 09 f0 breq .+2 ; 0x185c - 185a: 90 c0 rjmp .+288 ; 0x197c - 185c: 3c c0 rjmp .+120 ; 0x18d6 - 185e: 82 32 cpi r24, 0x22 ; 34 - 1860: 09 f4 brne .+2 ; 0x1864 - 1862: 6b c0 rjmp .+214 ; 0x193a - 1864: 83 32 cpi r24, 0x23 ; 35 - 1866: 09 f0 breq .+2 ; 0x186a - 1868: 89 c0 rjmp .+274 ; 0x197c - 186a: 7a c0 rjmp .+244 ; 0x1960 - { - case CDC_REQ_GetLineEncoding: - if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - 186c: 80 91 cc 02 lds r24, 0x02CC - 1870: 81 3a cpi r24, 0xA1 ; 161 - 1872: 09 f0 breq .+2 ; 0x1876 - 1874: 83 c0 rjmp .+262 ; 0x197c - * \note This is not applicable for non CONTROL type endpoints. - */ - static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearSETUP(void) - { - UEINTX &= ~(1 << RXSTPI); - 1876: 80 91 e8 00 lds r24, 0x00E8 - 187a: 87 7f andi r24, 0xF7 ; 247 - 187c: 80 93 e8 00 sts 0x00E8, r24 - * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. - */ - static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsINReady(void) - { - return ((UEINTX & (1 << TXINI)) ? true : false); - 1880: 80 91 e8 00 lds r24, 0x00E8 - { - Endpoint_ClearSETUP(); - - while (!(Endpoint_IsINReady())); - 1884: 80 ff sbrs r24, 0 - 1886: fc cf rjmp .-8 ; 0x1880 - - Endpoint_Write_32_LE(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 1888: 8c 89 ldd r24, Y+20 ; 0x14 - 188a: 9d 89 ldd r25, Y+21 ; 0x15 - 188c: ae 89 ldd r26, Y+22 ; 0x16 - 188e: bf 89 ldd r27, Y+23 ; 0x17 - * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_32_LE(const uint32_t Data) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_32_LE(const uint32_t Data) - { - UEDATX = (Data & 0xFF); - 1890: 80 93 f1 00 sts 0x00F1, r24 - UEDATX = (Data >> 8); - 1894: 29 2f mov r18, r25 - 1896: 3a 2f mov r19, r26 - 1898: 4b 2f mov r20, r27 - 189a: 55 27 eor r21, r21 - 189c: 20 93 f1 00 sts 0x00F1, r18 - UEDATX = (Data >> 16); - 18a0: 9d 01 movw r18, r26 - 18a2: 44 27 eor r20, r20 - 18a4: 55 27 eor r21, r21 - 18a6: 20 93 f1 00 sts 0x00F1, r18 - UEDATX = (Data >> 24); - 18aa: 8b 2f mov r24, r27 - 18ac: 99 27 eor r25, r25 - 18ae: aa 27 eor r26, r26 - 18b0: bb 27 eor r27, r27 - 18b2: 80 93 f1 00 sts 0x00F1, r24 - Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.CharFormat); - 18b6: 88 8d ldd r24, Y+24 ; 0x18 - * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_8(const uint8_t Data) - { - UEDATX = Data; - 18b8: 80 93 f1 00 sts 0x00F1, r24 - Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.ParityType); - 18bc: 89 8d ldd r24, Y+25 ; 0x19 - 18be: 80 93 f1 00 sts 0x00F1, r24 - Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.DataBits); - 18c2: 8a 8d ldd r24, Y+26 ; 0x1a - 18c4: 80 93 f1 00 sts 0x00F1, r24 - */ - static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearIN(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 18c8: 80 91 e8 00 lds r24, 0x00E8 - 18cc: 8e 77 andi r24, 0x7E ; 126 - 18ce: 80 93 e8 00 sts 0x00E8, r24 - - Endpoint_ClearIN(); - Endpoint_ClearStatusStage(); - 18d2: b4 dc rcall .-1688 ; 0x123c - 18d4: 53 c0 rjmp .+166 ; 0x197c - } - - break; - case CDC_REQ_SetLineEncoding: - if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 18d6: 80 91 cc 02 lds r24, 0x02CC - 18da: 81 32 cpi r24, 0x21 ; 33 - 18dc: 09 f0 breq .+2 ; 0x18e0 - 18de: 4e c0 rjmp .+156 ; 0x197c - * \note This is not applicable for non CONTROL type endpoints. - */ - static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearSETUP(void) - { - UEINTX &= ~(1 << RXSTPI); - 18e0: 80 91 e8 00 lds r24, 0x00E8 - 18e4: 87 7f andi r24, 0xF7 ; 247 - 18e6: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearSETUP(); - - while (!(Endpoint_IsOUTReceived())) - 18ea: 04 c0 rjmp .+8 ; 0x18f4 - { - if (USB_DeviceState == DEVICE_STATE_Unattached) - 18ec: 8e b3 in r24, 0x1e ; 30 - 18ee: 88 23 and r24, r24 - 18f0: 09 f4 brne .+2 ; 0x18f4 - 18f2: 44 c0 rjmp .+136 ; 0x197c - * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. - */ - static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsOUTReceived(void) - { - return ((UEINTX & (1 << RXOUTI)) ? true : false); - 18f4: 80 91 e8 00 lds r24, 0x00E8 - case CDC_REQ_SetLineEncoding: - if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - { - Endpoint_ClearSETUP(); - - while (!(Endpoint_IsOUTReceived())) - 18f8: 82 ff sbrs r24, 2 - 18fa: f8 cf rjmp .-16 ; 0x18ec - { - uint32_t Value; - uint8_t Bytes[4]; - } Data; - - Data.Bytes[0] = UEDATX; - 18fc: 30 91 f1 00 lds r19, 0x00F1 - Data.Bytes[1] = UEDATX; - 1900: 20 91 f1 00 lds r18, 0x00F1 - Data.Bytes[2] = UEDATX; - 1904: 90 91 f1 00 lds r25, 0x00F1 - Data.Bytes[3] = UEDATX; - 1908: 80 91 f1 00 lds r24, 0x00F1 - { - if (USB_DeviceState == DEVICE_STATE_Unattached) - return; - } - - CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE(); - 190c: 3c 8b std Y+20, r19 ; 0x14 - 190e: 2d 8b std Y+21, r18 ; 0x15 - 1910: 9e 8b std Y+22, r25 ; 0x16 - 1912: 8f 8b std Y+23, r24 ; 0x17 - * \return Next byte in the currently selected endpoint's FIFO buffer. - */ - static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_Read_8(void) - { - return UEDATX; - 1914: 80 91 f1 00 lds r24, 0x00F1 - CDCInterfaceInfo->State.LineEncoding.CharFormat = Endpoint_Read_8(); - 1918: 88 8f std Y+24, r24 ; 0x18 - 191a: 80 91 f1 00 lds r24, 0x00F1 - CDCInterfaceInfo->State.LineEncoding.ParityType = Endpoint_Read_8(); - 191e: 89 8f std Y+25, r24 ; 0x19 - 1920: 80 91 f1 00 lds r24, 0x00F1 - CDCInterfaceInfo->State.LineEncoding.DataBits = Endpoint_Read_8(); - 1924: 8a 8f std Y+26, r24 ; 0x1a - */ - static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearOUT(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1926: 80 91 e8 00 lds r24, 0x00E8 - 192a: 8b 77 andi r24, 0x7B ; 123 - 192c: 80 93 e8 00 sts 0x00E8, r24 - - Endpoint_ClearOUT(); - Endpoint_ClearStatusStage(); - 1930: 85 dc rcall .-1782 ; 0x123c - - EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo); - 1932: ce 01 movw r24, r28 - 1934: 0e 94 c2 03 call 0x784 ; 0x784 - 1938: 21 c0 rjmp .+66 ; 0x197c - } - - break; - case CDC_REQ_SetControlLineState: - if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 193a: 80 91 cc 02 lds r24, 0x02CC - 193e: 81 32 cpi r24, 0x21 ; 33 - 1940: e9 f4 brne .+58 ; 0x197c - * \note This is not applicable for non CONTROL type endpoints. - */ - static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearSETUP(void) - { - UEINTX &= ~(1 << RXSTPI); - 1942: 80 91 e8 00 lds r24, 0x00E8 - 1946: 87 7f andi r24, 0xF7 ; 247 - 1948: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearSETUP(); - Endpoint_ClearStatusStage(); - 194c: 77 dc rcall .-1810 ; 0x123c - - CDCInterfaceInfo->State.ControlLineStates.HostToDevice = USB_ControlRequest.wValue; - 194e: 80 91 ce 02 lds r24, 0x02CE - 1952: 90 91 cf 02 lds r25, 0x02CF - 1956: 99 8b std Y+17, r25 ; 0x11 - 1958: 88 8b std Y+16, r24 ; 0x10 - - EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo); - 195a: ce 01 movw r24, r28 - 195c: d4 d0 rcall .+424 ; 0x1b06 - 195e: 0e c0 rjmp .+28 ; 0x197c - } - - break; - case CDC_REQ_SendBreak: - if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 1960: 80 91 cc 02 lds r24, 0x02CC - 1964: 81 32 cpi r24, 0x21 ; 33 - 1966: 51 f4 brne .+20 ; 0x197c - 1968: 80 91 e8 00 lds r24, 0x00E8 - 196c: 87 7f andi r24, 0xF7 ; 247 - 196e: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearSETUP(); - Endpoint_ClearStatusStage(); - 1972: 64 dc rcall .-1848 ; 0x123c - - EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue); - 1974: ce 01 movw r24, r28 - 1976: 60 91 ce 02 lds r22, 0x02CE - 197a: c5 d0 rcall .+394 ; 0x1b06 - } - - break; - } -} - 197c: df 91 pop r29 - 197e: cf 91 pop r28 - 1980: 08 95 ret - -00001982 : - -bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - 1982: cf 93 push r28 - 1984: df 93 push r29 - 1986: ec 01 movw r28, r24 - memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State)); - 1988: 40 96 adiw r24, 0x10 ; 16 - 198a: fc 01 movw r30, r24 - 198c: 8b e0 ldi r24, 0x0B ; 11 - 198e: df 01 movw r26, r30 - 1990: 1d 92 st X+, r1 - 1992: 8a 95 dec r24 - 1994: e9 f7 brne .-6 ; 0x1990 - - CDCInterfaceInfo->Config.DataINEndpoint.Type = EP_TYPE_BULK; - 1996: 82 e0 ldi r24, 0x02 ; 2 - 1998: 8c 83 std Y+4, r24 ; 0x04 - CDCInterfaceInfo->Config.DataOUTEndpoint.Type = EP_TYPE_BULK; - 199a: 89 87 std Y+9, r24 ; 0x09 - CDCInterfaceInfo->Config.NotificationEndpoint.Type = EP_TYPE_INTERRUPT; - 199c: 83 e0 ldi r24, 0x03 ; 3 - 199e: 8e 87 std Y+14, r24 ; 0x0e - - if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) - 19a0: ce 01 movw r24, r28 - 19a2: 01 96 adiw r24, 0x01 ; 1 - 19a4: 61 e0 ldi r22, 0x01 ; 1 - 19a6: 06 dc rcall .-2036 ; 0x11b4 - 19a8: 88 23 and r24, r24 - 19aa: 59 f0 breq .+22 ; 0x19c2 - return false; - - if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) - 19ac: ce 01 movw r24, r28 - 19ae: 06 96 adiw r24, 0x06 ; 6 - 19b0: 61 e0 ldi r22, 0x01 ; 1 - 19b2: 00 dc rcall .-2048 ; 0x11b4 - 19b4: 88 23 and r24, r24 - 19b6: 29 f0 breq .+10 ; 0x19c2 - return false; - - if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) - 19b8: ce 01 movw r24, r28 - 19ba: 0b 96 adiw r24, 0x0b ; 11 - 19bc: 61 e0 ldi r22, 0x01 ; 1 - 19be: fa db rcall .-2060 ; 0x11b4 - 19c0: 01 c0 rjmp .+2 ; 0x19c4 - - if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) - return false; - - if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) - return false; - 19c2: 80 e0 ldi r24, 0x00 ; 0 - - if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) - return false; - - return true; -} - 19c4: df 91 pop r29 - 19c6: cf 91 pop r28 - 19c8: 08 95 ret - -000019ca : - return Endpoint_Write_Stream_LE(Buffer, Length, NULL); -} - -uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, - const uint8_t Data) -{ - 19ca: df 93 push r29 - 19cc: cf 93 push r28 - 19ce: 0f 92 push r0 - 19d0: cd b7 in r28, 0x3d ; 61 - 19d2: de b7 in r29, 0x3e ; 62 - 19d4: fc 01 movw r30, r24 - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 19d6: 8e b3 in r24, 0x1e ; 30 - 19d8: 84 30 cpi r24, 0x04 ; 4 - 19da: f9 f4 brne .+62 ; 0x1a1a - 19dc: 24 89 ldd r18, Z+20 ; 0x14 - 19de: 35 89 ldd r19, Z+21 ; 0x15 - 19e0: 46 89 ldd r20, Z+22 ; 0x16 - 19e2: 57 89 ldd r21, Z+23 ; 0x17 - 19e4: 21 15 cp r18, r1 - 19e6: 31 05 cpc r19, r1 - 19e8: 41 05 cpc r20, r1 - 19ea: 51 05 cpc r21, r1 - 19ec: b1 f0 breq .+44 ; 0x1a1a - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 19ee: 81 81 ldd r24, Z+1 ; 0x01 - 19f0: 8f 70 andi r24, 0x0F ; 15 - 19f2: 80 93 e9 00 sts 0x00E9, r24 - * on its direction. - */ - static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsReadWriteAllowed(void) - { - return ((UEINTX & (1 << RWAL)) ? true : false); - 19f6: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWSTREAM_DeviceDisconnected; - - Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); - - if (!(Endpoint_IsReadWriteAllowed())) - 19fa: 85 fd sbrc r24, 5 - 19fc: 0a c0 rjmp .+20 ; 0x1a12 - */ - static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearIN(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 19fe: 80 91 e8 00 lds r24, 0x00E8 - 1a02: 8e 77 andi r24, 0x7E ; 126 - 1a04: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearIN(); - - uint8_t ErrorCode; - - if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 1a08: 69 83 std Y+1, r22 ; 0x01 - 1a0a: 37 dc rcall .-1938 ; 0x127a - 1a0c: 69 81 ldd r22, Y+1 ; 0x01 - 1a0e: 88 23 and r24, r24 - 1a10: 29 f4 brne .+10 ; 0x1a1c - * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_8(const uint8_t Data) - { - UEDATX = Data; - 1a12: 60 93 f1 00 sts 0x00F1, r22 - return ErrorCode; - } - - Endpoint_Write_8(Data); - return ENDPOINT_READYWAIT_NoError; - 1a16: 80 e0 ldi r24, 0x00 ; 0 - 1a18: 01 c0 rjmp .+2 ; 0x1a1c - -uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, - const uint8_t Data) -{ - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - return ENDPOINT_RWSTREAM_DeviceDisconnected; - 1a1a: 82 e0 ldi r24, 0x02 ; 2 - return ErrorCode; - } - - Endpoint_Write_8(Data); - return ENDPOINT_READYWAIT_NoError; -} - 1a1c: 0f 90 pop r0 - 1a1e: cf 91 pop r28 - 1a20: df 91 pop r29 - 1a22: 08 95 ret - -00001a24 : - -uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - 1a24: fc 01 movw r30, r24 - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1a26: 8e b3 in r24, 0x1e ; 30 - 1a28: 84 30 cpi r24, 0x04 ; 4 - 1a2a: 19 f5 brne .+70 ; 0x1a72 - 1a2c: 24 89 ldd r18, Z+20 ; 0x14 - 1a2e: 35 89 ldd r19, Z+21 ; 0x15 - 1a30: 46 89 ldd r20, Z+22 ; 0x16 - 1a32: 57 89 ldd r21, Z+23 ; 0x17 - 1a34: 21 15 cp r18, r1 - 1a36: 31 05 cpc r19, r1 - 1a38: 41 05 cpc r20, r1 - 1a3a: 51 05 cpc r21, r1 - 1a3c: d1 f0 breq .+52 ; 0x1a72 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1a3e: 81 81 ldd r24, Z+1 ; 0x01 - 1a40: 8f 70 andi r24, 0x0F ; 15 - 1a42: 80 93 e9 00 sts 0x00E9, r24 - #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) - return UEBCX; - #elif defined(USB_SERIES_4_AVR) - return (((uint16_t)UEBCHX << 8) | UEBCLX); - #elif defined(USB_SERIES_2_AVR) - return UEBCLX; - 1a46: 80 91 f2 00 lds r24, 0x00F2 - - uint8_t ErrorCode; - - Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); - - if (!(Endpoint_BytesInEndpoint())) - 1a4a: 88 23 and r24, r24 - 1a4c: a1 f0 breq .+40 ; 0x1a76 - * on its direction. - */ - static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsReadWriteAllowed(void) - { - return ((UEINTX & (1 << RWAL)) ? true : false); - 1a4e: 90 91 e8 00 lds r25, 0x00E8 - */ - static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearIN(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 1a52: 80 91 e8 00 lds r24, 0x00E8 - 1a56: 8e 77 andi r24, 0x7E ; 126 - 1a58: 80 93 e8 00 sts 0x00E8, r24 - - bool BankFull = !(Endpoint_IsReadWriteAllowed()); - - Endpoint_ClearIN(); - - if (BankFull) - 1a5c: 95 fd sbrc r25, 5 - 1a5e: 0d c0 rjmp .+26 ; 0x1a7a - { - if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 1a60: 0c dc rcall .-2024 ; 0x127a - 1a62: 88 23 and r24, r24 - 1a64: 59 f4 brne .+22 ; 0x1a7c - 1a66: 90 91 e8 00 lds r25, 0x00E8 - 1a6a: 9e 77 andi r25, 0x7E ; 126 - 1a6c: 90 93 e8 00 sts 0x00E8, r25 - 1a70: 08 95 ret -} - -uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - return ENDPOINT_RWSTREAM_DeviceDisconnected; - 1a72: 82 e0 ldi r24, 0x02 ; 2 - 1a74: 08 95 ret - uint8_t ErrorCode; - - Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); - - if (!(Endpoint_BytesInEndpoint())) - return ENDPOINT_READYWAIT_NoError; - 1a76: 80 e0 ldi r24, 0x00 ; 0 - 1a78: 08 95 ret - return ErrorCode; - - Endpoint_ClearIN(); - } - - return ENDPOINT_READYWAIT_NoError; - 1a7a: 80 e0 ldi r24, 0x00 ; 0 -} - 1a7c: 08 95 ret - -00001a7e : - return true; -} - -void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1a7e: 2e b3 in r18, 0x1e ; 30 - 1a80: 24 30 cpi r18, 0x04 ; 4 - 1a82: 99 f4 brne .+38 ; 0x1aaa - 1a84: fc 01 movw r30, r24 - 1a86: 24 89 ldd r18, Z+20 ; 0x14 - 1a88: 35 89 ldd r19, Z+21 ; 0x15 - 1a8a: 46 89 ldd r20, Z+22 ; 0x16 - 1a8c: 57 89 ldd r21, Z+23 ; 0x17 - 1a8e: 21 15 cp r18, r1 - 1a90: 31 05 cpc r19, r1 - 1a92: 41 05 cpc r20, r1 - 1a94: 51 05 cpc r21, r1 - 1a96: 49 f0 breq .+18 ; 0x1aaa - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1a98: 21 81 ldd r18, Z+1 ; 0x01 - 1a9a: 2f 70 andi r18, 0x0F ; 15 - 1a9c: 20 93 e9 00 sts 0x00E9, r18 - * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. - */ - static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsINReady(void) - { - return ((UEINTX & (1 << TXINI)) ? true : false); - 1aa0: 20 91 e8 00 lds r18, 0x00E8 - return; - - #if !defined(NO_CLASS_DRIVER_AUTOFLUSH) - Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); - - if (Endpoint_IsINReady()) - 1aa4: 20 ff sbrs r18, 0 - 1aa6: 01 c0 rjmp .+2 ; 0x1aaa - CDC_Device_Flush(CDCInterfaceInfo); - 1aa8: bd cf rjmp .-134 ; 0x1a24 - 1aaa: 08 95 ret - -00001aac : - return 0; - } -} - -int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - 1aac: fc 01 movw r30, r24 - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1aae: 8e b3 in r24, 0x1e ; 30 - 1ab0: 84 30 cpi r24, 0x04 ; 4 - 1ab2: 29 f5 brne .+74 ; 0x1afe - 1ab4: 24 89 ldd r18, Z+20 ; 0x14 - 1ab6: 35 89 ldd r19, Z+21 ; 0x15 - 1ab8: 46 89 ldd r20, Z+22 ; 0x16 - 1aba: 57 89 ldd r21, Z+23 ; 0x17 - 1abc: 21 15 cp r18, r1 - 1abe: 31 05 cpc r19, r1 - 1ac0: 41 05 cpc r20, r1 - 1ac2: 51 05 cpc r21, r1 - 1ac4: e1 f0 breq .+56 ; 0x1afe - */ - static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t Address) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = (Address & ENDPOINT_EPNUM_MASK); - 1ac6: 86 81 ldd r24, Z+6 ; 0x06 - 1ac8: 8f 70 andi r24, 0x0F ; 15 - 1aca: 80 93 e9 00 sts 0x00E9, r24 - * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. - */ - static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline bool Endpoint_IsOUTReceived(void) - { - return ((UEINTX & (1 << RXOUTI)) ? true : false); - 1ace: 80 91 e8 00 lds r24, 0x00E8 - - int16_t ReceivedByte = -1; - - Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpoint.Address); - - if (Endpoint_IsOUTReceived()) - 1ad2: 82 ff sbrs r24, 2 - 1ad4: 14 c0 rjmp .+40 ; 0x1afe - #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) - return UEBCX; - #elif defined(USB_SERIES_4_AVR) - return (((uint16_t)UEBCHX << 8) | UEBCLX); - #elif defined(USB_SERIES_2_AVR) - return UEBCLX; - 1ad6: 80 91 f2 00 lds r24, 0x00F2 - { - if (Endpoint_BytesInEndpoint()) - 1ada: 88 23 and r24, r24 - 1adc: 21 f0 breq .+8 ; 0x1ae6 - * \return Next byte in the currently selected endpoint's FIFO buffer. - */ - static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_Read_8(void) - { - return UEDATX; - 1ade: 20 91 f1 00 lds r18, 0x00F1 - ReceivedByte = Endpoint_Read_8(); - 1ae2: 30 e0 ldi r19, 0x00 ; 0 - 1ae4: 02 c0 rjmp .+4 ; 0x1aea -int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - return -1; - - int16_t ReceivedByte = -1; - 1ae6: 2f ef ldi r18, 0xFF ; 255 - 1ae8: 3f ef ldi r19, 0xFF ; 255 - #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) - return UEBCX; - #elif defined(USB_SERIES_4_AVR) - return (((uint16_t)UEBCHX << 8) | UEBCLX); - #elif defined(USB_SERIES_2_AVR) - return UEBCLX; - 1aea: 80 91 f2 00 lds r24, 0x00F2 - if (Endpoint_IsOUTReceived()) - { - if (Endpoint_BytesInEndpoint()) - ReceivedByte = Endpoint_Read_8(); - - if (!(Endpoint_BytesInEndpoint())) - 1aee: 88 23 and r24, r24 - 1af0: 41 f4 brne .+16 ; 0x1b02 - */ - static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearOUT(void) - { - #if !defined(CONTROL_ONLY_DEVICE) - UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1af2: 80 91 e8 00 lds r24, 0x00E8 - 1af6: 8b 77 andi r24, 0x7B ; 123 - 1af8: 80 93 e8 00 sts 0x00E8, r24 - 1afc: 02 c0 rjmp .+4 ; 0x1b02 -int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - return -1; - - int16_t ReceivedByte = -1; - 1afe: 2f ef ldi r18, 0xFF ; 255 - 1b00: 3f ef ldi r19, 0xFF ; 255 - if (!(Endpoint_BytesInEndpoint())) - Endpoint_ClearOUT(); - } - - return ReceivedByte; -} - 1b02: c9 01 movw r24, r18 - 1b04: 08 95 ret - -00001b06 : -#endif - -void CDC_Device_Event_Stub(void) -{ - -} - 1b06: 08 95 ret - -00001b08 <__subsf3>: - 1b08: 50 58 subi r21, 0x80 ; 128 - -00001b0a <__addsf3>: - 1b0a: bb 27 eor r27, r27 - 1b0c: aa 27 eor r26, r26 - 1b0e: 0e d0 rcall .+28 ; 0x1b2c <__addsf3x> - 1b10: 70 c1 rjmp .+736 ; 0x1df2 <__fp_round> - 1b12: 61 d1 rcall .+706 ; 0x1dd6 <__fp_pscA> - 1b14: 30 f0 brcs .+12 ; 0x1b22 <__addsf3+0x18> - 1b16: 66 d1 rcall .+716 ; 0x1de4 <__fp_pscB> - 1b18: 20 f0 brcs .+8 ; 0x1b22 <__addsf3+0x18> - 1b1a: 31 f4 brne .+12 ; 0x1b28 <__addsf3+0x1e> - 1b1c: 9f 3f cpi r25, 0xFF ; 255 - 1b1e: 11 f4 brne .+4 ; 0x1b24 <__addsf3+0x1a> - 1b20: 1e f4 brtc .+6 ; 0x1b28 <__addsf3+0x1e> - 1b22: 56 c1 rjmp .+684 ; 0x1dd0 <__fp_nan> - 1b24: 0e f4 brtc .+2 ; 0x1b28 <__addsf3+0x1e> - 1b26: e0 95 com r30 - 1b28: e7 fb bst r30, 7 - 1b2a: 4c c1 rjmp .+664 ; 0x1dc4 <__fp_inf> - -00001b2c <__addsf3x>: - 1b2c: e9 2f mov r30, r25 - 1b2e: 72 d1 rcall .+740 ; 0x1e14 <__fp_split3> - 1b30: 80 f3 brcs .-32 ; 0x1b12 <__addsf3+0x8> - 1b32: ba 17 cp r27, r26 - 1b34: 62 07 cpc r22, r18 - 1b36: 73 07 cpc r23, r19 - 1b38: 84 07 cpc r24, r20 - 1b3a: 95 07 cpc r25, r21 - 1b3c: 18 f0 brcs .+6 ; 0x1b44 <__addsf3x+0x18> - 1b3e: 71 f4 brne .+28 ; 0x1b5c <__addsf3x+0x30> - 1b40: 9e f5 brtc .+102 ; 0x1ba8 <__addsf3x+0x7c> - 1b42: 8a c1 rjmp .+788 ; 0x1e58 <__fp_zero> - 1b44: 0e f4 brtc .+2 ; 0x1b48 <__addsf3x+0x1c> - 1b46: e0 95 com r30 - 1b48: 0b 2e mov r0, r27 - 1b4a: ba 2f mov r27, r26 - 1b4c: a0 2d mov r26, r0 - 1b4e: 0b 01 movw r0, r22 - 1b50: b9 01 movw r22, r18 - 1b52: 90 01 movw r18, r0 - 1b54: 0c 01 movw r0, r24 - 1b56: ca 01 movw r24, r20 - 1b58: a0 01 movw r20, r0 - 1b5a: 11 24 eor r1, r1 - 1b5c: ff 27 eor r31, r31 - 1b5e: 59 1b sub r21, r25 - 1b60: 99 f0 breq .+38 ; 0x1b88 <__addsf3x+0x5c> - 1b62: 59 3f cpi r21, 0xF9 ; 249 - 1b64: 50 f4 brcc .+20 ; 0x1b7a <__addsf3x+0x4e> - 1b66: 50 3e cpi r21, 0xE0 ; 224 - 1b68: 68 f1 brcs .+90 ; 0x1bc4 <__addsf3x+0x98> - 1b6a: 1a 16 cp r1, r26 - 1b6c: f0 40 sbci r31, 0x00 ; 0 - 1b6e: a2 2f mov r26, r18 - 1b70: 23 2f mov r18, r19 - 1b72: 34 2f mov r19, r20 - 1b74: 44 27 eor r20, r20 - 1b76: 58 5f subi r21, 0xF8 ; 248 - 1b78: f3 cf rjmp .-26 ; 0x1b60 <__addsf3x+0x34> - 1b7a: 46 95 lsr r20 - 1b7c: 37 95 ror r19 - 1b7e: 27 95 ror r18 - 1b80: a7 95 ror r26 - 1b82: f0 40 sbci r31, 0x00 ; 0 - 1b84: 53 95 inc r21 - 1b86: c9 f7 brne .-14 ; 0x1b7a <__addsf3x+0x4e> - 1b88: 7e f4 brtc .+30 ; 0x1ba8 <__addsf3x+0x7c> - 1b8a: 1f 16 cp r1, r31 - 1b8c: ba 0b sbc r27, r26 - 1b8e: 62 0b sbc r22, r18 - 1b90: 73 0b sbc r23, r19 - 1b92: 84 0b sbc r24, r20 - 1b94: ba f0 brmi .+46 ; 0x1bc4 <__addsf3x+0x98> - 1b96: 91 50 subi r25, 0x01 ; 1 - 1b98: a1 f0 breq .+40 ; 0x1bc2 <__addsf3x+0x96> - 1b9a: ff 0f add r31, r31 - 1b9c: bb 1f adc r27, r27 - 1b9e: 66 1f adc r22, r22 - 1ba0: 77 1f adc r23, r23 - 1ba2: 88 1f adc r24, r24 - 1ba4: c2 f7 brpl .-16 ; 0x1b96 <__addsf3x+0x6a> - 1ba6: 0e c0 rjmp .+28 ; 0x1bc4 <__addsf3x+0x98> - 1ba8: ba 0f add r27, r26 - 1baa: 62 1f adc r22, r18 - 1bac: 73 1f adc r23, r19 - 1bae: 84 1f adc r24, r20 - 1bb0: 48 f4 brcc .+18 ; 0x1bc4 <__addsf3x+0x98> - 1bb2: 87 95 ror r24 - 1bb4: 77 95 ror r23 - 1bb6: 67 95 ror r22 - 1bb8: b7 95 ror r27 - 1bba: f7 95 ror r31 - 1bbc: 9e 3f cpi r25, 0xFE ; 254 - 1bbe: 08 f0 brcs .+2 ; 0x1bc2 <__addsf3x+0x96> - 1bc0: b3 cf rjmp .-154 ; 0x1b28 <__addsf3+0x1e> - 1bc2: 93 95 inc r25 - 1bc4: 88 0f add r24, r24 - 1bc6: 08 f0 brcs .+2 ; 0x1bca <__addsf3x+0x9e> - 1bc8: 99 27 eor r25, r25 - 1bca: ee 0f add r30, r30 - 1bcc: 97 95 ror r25 - 1bce: 87 95 ror r24 - 1bd0: 08 95 ret - -00001bd2 <__cmpsf2>: - 1bd2: d4 d0 rcall .+424 ; 0x1d7c <__fp_cmp> - 1bd4: 08 f4 brcc .+2 ; 0x1bd8 <__cmpsf2+0x6> - 1bd6: 81 e0 ldi r24, 0x01 ; 1 - 1bd8: 08 95 ret - -00001bda <__divsf3>: - 1bda: 0c d0 rcall .+24 ; 0x1bf4 <__divsf3x> - 1bdc: 0a c1 rjmp .+532 ; 0x1df2 <__fp_round> - 1bde: 02 d1 rcall .+516 ; 0x1de4 <__fp_pscB> - 1be0: 40 f0 brcs .+16 ; 0x1bf2 <__divsf3+0x18> - 1be2: f9 d0 rcall .+498 ; 0x1dd6 <__fp_pscA> - 1be4: 30 f0 brcs .+12 ; 0x1bf2 <__divsf3+0x18> - 1be6: 21 f4 brne .+8 ; 0x1bf0 <__divsf3+0x16> - 1be8: 5f 3f cpi r21, 0xFF ; 255 - 1bea: 19 f0 breq .+6 ; 0x1bf2 <__divsf3+0x18> - 1bec: eb c0 rjmp .+470 ; 0x1dc4 <__fp_inf> - 1bee: 51 11 cpse r21, r1 - 1bf0: 34 c1 rjmp .+616 ; 0x1e5a <__fp_szero> - 1bf2: ee c0 rjmp .+476 ; 0x1dd0 <__fp_nan> - -00001bf4 <__divsf3x>: - 1bf4: 0f d1 rcall .+542 ; 0x1e14 <__fp_split3> - 1bf6: 98 f3 brcs .-26 ; 0x1bde <__divsf3+0x4> - -00001bf8 <__divsf3_pse>: - 1bf8: 99 23 and r25, r25 - 1bfa: c9 f3 breq .-14 ; 0x1bee <__divsf3+0x14> - 1bfc: 55 23 and r21, r21 - 1bfe: b1 f3 breq .-20 ; 0x1bec <__divsf3+0x12> - 1c00: 95 1b sub r25, r21 - 1c02: 55 0b sbc r21, r21 - 1c04: bb 27 eor r27, r27 - 1c06: aa 27 eor r26, r26 - 1c08: 62 17 cp r22, r18 - 1c0a: 73 07 cpc r23, r19 - 1c0c: 84 07 cpc r24, r20 - 1c0e: 38 f0 brcs .+14 ; 0x1c1e <__divsf3_pse+0x26> - 1c10: 9f 5f subi r25, 0xFF ; 255 - 1c12: 5f 4f sbci r21, 0xFF ; 255 - 1c14: 22 0f add r18, r18 - 1c16: 33 1f adc r19, r19 - 1c18: 44 1f adc r20, r20 - 1c1a: aa 1f adc r26, r26 - 1c1c: a9 f3 breq .-22 ; 0x1c08 <__divsf3_pse+0x10> - 1c1e: 33 d0 rcall .+102 ; 0x1c86 <__divsf3_pse+0x8e> - 1c20: 0e 2e mov r0, r30 - 1c22: 3a f0 brmi .+14 ; 0x1c32 <__divsf3_pse+0x3a> - 1c24: e0 e8 ldi r30, 0x80 ; 128 - 1c26: 30 d0 rcall .+96 ; 0x1c88 <__divsf3_pse+0x90> - 1c28: 91 50 subi r25, 0x01 ; 1 - 1c2a: 50 40 sbci r21, 0x00 ; 0 - 1c2c: e6 95 lsr r30 - 1c2e: 00 1c adc r0, r0 - 1c30: ca f7 brpl .-14 ; 0x1c24 <__divsf3_pse+0x2c> - 1c32: 29 d0 rcall .+82 ; 0x1c86 <__divsf3_pse+0x8e> - 1c34: fe 2f mov r31, r30 - 1c36: 27 d0 rcall .+78 ; 0x1c86 <__divsf3_pse+0x8e> - 1c38: 66 0f add r22, r22 - 1c3a: 77 1f adc r23, r23 - 1c3c: 88 1f adc r24, r24 - 1c3e: bb 1f adc r27, r27 - 1c40: 26 17 cp r18, r22 - 1c42: 37 07 cpc r19, r23 - 1c44: 48 07 cpc r20, r24 - 1c46: ab 07 cpc r26, r27 - 1c48: b0 e8 ldi r27, 0x80 ; 128 - 1c4a: 09 f0 breq .+2 ; 0x1c4e <__divsf3_pse+0x56> - 1c4c: bb 0b sbc r27, r27 - 1c4e: 80 2d mov r24, r0 - 1c50: bf 01 movw r22, r30 - 1c52: ff 27 eor r31, r31 - 1c54: 93 58 subi r25, 0x83 ; 131 - 1c56: 5f 4f sbci r21, 0xFF ; 255 - 1c58: 2a f0 brmi .+10 ; 0x1c64 <__divsf3_pse+0x6c> - 1c5a: 9e 3f cpi r25, 0xFE ; 254 - 1c5c: 51 05 cpc r21, r1 - 1c5e: 68 f0 brcs .+26 ; 0x1c7a <__divsf3_pse+0x82> - 1c60: b1 c0 rjmp .+354 ; 0x1dc4 <__fp_inf> - 1c62: fb c0 rjmp .+502 ; 0x1e5a <__fp_szero> - 1c64: 5f 3f cpi r21, 0xFF ; 255 - 1c66: ec f3 brlt .-6 ; 0x1c62 <__divsf3_pse+0x6a> - 1c68: 98 3e cpi r25, 0xE8 ; 232 - 1c6a: dc f3 brlt .-10 ; 0x1c62 <__divsf3_pse+0x6a> - 1c6c: 86 95 lsr r24 - 1c6e: 77 95 ror r23 - 1c70: 67 95 ror r22 - 1c72: b7 95 ror r27 - 1c74: f7 95 ror r31 - 1c76: 9f 5f subi r25, 0xFF ; 255 - 1c78: c9 f7 brne .-14 ; 0x1c6c <__divsf3_pse+0x74> - 1c7a: 88 0f add r24, r24 - 1c7c: 91 1d adc r25, r1 - 1c7e: 96 95 lsr r25 - 1c80: 87 95 ror r24 - 1c82: 97 f9 bld r25, 7 - 1c84: 08 95 ret - 1c86: e1 e0 ldi r30, 0x01 ; 1 - 1c88: 66 0f add r22, r22 - 1c8a: 77 1f adc r23, r23 - 1c8c: 88 1f adc r24, r24 - 1c8e: bb 1f adc r27, r27 - 1c90: 62 17 cp r22, r18 - 1c92: 73 07 cpc r23, r19 - 1c94: 84 07 cpc r24, r20 - 1c96: ba 07 cpc r27, r26 - 1c98: 20 f0 brcs .+8 ; 0x1ca2 <__divsf3_pse+0xaa> - 1c9a: 62 1b sub r22, r18 - 1c9c: 73 0b sbc r23, r19 - 1c9e: 84 0b sbc r24, r20 - 1ca0: ba 0b sbc r27, r26 - 1ca2: ee 1f adc r30, r30 - 1ca4: 88 f7 brcc .-30 ; 0x1c88 <__divsf3_pse+0x90> - 1ca6: e0 95 com r30 - 1ca8: 08 95 ret - -00001caa <__fixunssfsi>: - 1caa: bc d0 rcall .+376 ; 0x1e24 <__fp_splitA> - 1cac: 88 f0 brcs .+34 ; 0x1cd0 <__fixunssfsi+0x26> - 1cae: 9f 57 subi r25, 0x7F ; 127 - 1cb0: 90 f0 brcs .+36 ; 0x1cd6 <__fixunssfsi+0x2c> - 1cb2: b9 2f mov r27, r25 - 1cb4: 99 27 eor r25, r25 - 1cb6: b7 51 subi r27, 0x17 ; 23 - 1cb8: a0 f0 brcs .+40 ; 0x1ce2 <__fixunssfsi+0x38> - 1cba: d1 f0 breq .+52 ; 0x1cf0 <__fixunssfsi+0x46> - 1cbc: 66 0f add r22, r22 - 1cbe: 77 1f adc r23, r23 - 1cc0: 88 1f adc r24, r24 - 1cc2: 99 1f adc r25, r25 - 1cc4: 1a f0 brmi .+6 ; 0x1ccc <__fixunssfsi+0x22> - 1cc6: ba 95 dec r27 - 1cc8: c9 f7 brne .-14 ; 0x1cbc <__fixunssfsi+0x12> - 1cca: 12 c0 rjmp .+36 ; 0x1cf0 <__fixunssfsi+0x46> - 1ccc: b1 30 cpi r27, 0x01 ; 1 - 1cce: 81 f0 breq .+32 ; 0x1cf0 <__fixunssfsi+0x46> - 1cd0: c3 d0 rcall .+390 ; 0x1e58 <__fp_zero> - 1cd2: b1 e0 ldi r27, 0x01 ; 1 - 1cd4: 08 95 ret - 1cd6: c0 c0 rjmp .+384 ; 0x1e58 <__fp_zero> - 1cd8: 67 2f mov r22, r23 - 1cda: 78 2f mov r23, r24 - 1cdc: 88 27 eor r24, r24 - 1cde: b8 5f subi r27, 0xF8 ; 248 - 1ce0: 39 f0 breq .+14 ; 0x1cf0 <__fixunssfsi+0x46> - 1ce2: b9 3f cpi r27, 0xF9 ; 249 - 1ce4: cc f3 brlt .-14 ; 0x1cd8 <__fixunssfsi+0x2e> - 1ce6: 86 95 lsr r24 - 1ce8: 77 95 ror r23 - 1cea: 67 95 ror r22 - 1cec: b3 95 inc r27 - 1cee: d9 f7 brne .-10 ; 0x1ce6 <__fixunssfsi+0x3c> - 1cf0: 3e f4 brtc .+14 ; 0x1d00 <__fixunssfsi+0x56> - 1cf2: 90 95 com r25 - 1cf4: 80 95 com r24 - 1cf6: 70 95 com r23 - 1cf8: 61 95 neg r22 - 1cfa: 7f 4f sbci r23, 0xFF ; 255 - 1cfc: 8f 4f sbci r24, 0xFF ; 255 - 1cfe: 9f 4f sbci r25, 0xFF ; 255 - 1d00: 08 95 ret - -00001d02 <__floatunsisf>: - 1d02: e8 94 clt - 1d04: 09 c0 rjmp .+18 ; 0x1d18 <__floatsisf+0x12> - -00001d06 <__floatsisf>: - 1d06: 97 fb bst r25, 7 - 1d08: 3e f4 brtc .+14 ; 0x1d18 <__floatsisf+0x12> - 1d0a: 90 95 com r25 - 1d0c: 80 95 com r24 - 1d0e: 70 95 com r23 - 1d10: 61 95 neg r22 - 1d12: 7f 4f sbci r23, 0xFF ; 255 - 1d14: 8f 4f sbci r24, 0xFF ; 255 - 1d16: 9f 4f sbci r25, 0xFF ; 255 - 1d18: 99 23 and r25, r25 - 1d1a: a9 f0 breq .+42 ; 0x1d46 <__floatsisf+0x40> - 1d1c: f9 2f mov r31, r25 - 1d1e: 96 e9 ldi r25, 0x96 ; 150 - 1d20: bb 27 eor r27, r27 - 1d22: 93 95 inc r25 - 1d24: f6 95 lsr r31 - 1d26: 87 95 ror r24 - 1d28: 77 95 ror r23 - 1d2a: 67 95 ror r22 - 1d2c: b7 95 ror r27 - 1d2e: f1 11 cpse r31, r1 - 1d30: f8 cf rjmp .-16 ; 0x1d22 <__floatsisf+0x1c> - 1d32: fa f4 brpl .+62 ; 0x1d72 <__floatsisf+0x6c> - 1d34: bb 0f add r27, r27 - 1d36: 11 f4 brne .+4 ; 0x1d3c <__floatsisf+0x36> - 1d38: 60 ff sbrs r22, 0 - 1d3a: 1b c0 rjmp .+54 ; 0x1d72 <__floatsisf+0x6c> - 1d3c: 6f 5f subi r22, 0xFF ; 255 - 1d3e: 7f 4f sbci r23, 0xFF ; 255 - 1d40: 8f 4f sbci r24, 0xFF ; 255 - 1d42: 9f 4f sbci r25, 0xFF ; 255 - 1d44: 16 c0 rjmp .+44 ; 0x1d72 <__floatsisf+0x6c> - 1d46: 88 23 and r24, r24 - 1d48: 11 f0 breq .+4 ; 0x1d4e <__floatsisf+0x48> - 1d4a: 96 e9 ldi r25, 0x96 ; 150 - 1d4c: 11 c0 rjmp .+34 ; 0x1d70 <__floatsisf+0x6a> - 1d4e: 77 23 and r23, r23 - 1d50: 21 f0 breq .+8 ; 0x1d5a <__floatsisf+0x54> - 1d52: 9e e8 ldi r25, 0x8E ; 142 - 1d54: 87 2f mov r24, r23 - 1d56: 76 2f mov r23, r22 - 1d58: 05 c0 rjmp .+10 ; 0x1d64 <__floatsisf+0x5e> - 1d5a: 66 23 and r22, r22 - 1d5c: 71 f0 breq .+28 ; 0x1d7a <__floatsisf+0x74> - 1d5e: 96 e8 ldi r25, 0x86 ; 134 - 1d60: 86 2f mov r24, r22 - 1d62: 70 e0 ldi r23, 0x00 ; 0 - 1d64: 60 e0 ldi r22, 0x00 ; 0 - 1d66: 2a f0 brmi .+10 ; 0x1d72 <__floatsisf+0x6c> - 1d68: 9a 95 dec r25 - 1d6a: 66 0f add r22, r22 - 1d6c: 77 1f adc r23, r23 - 1d6e: 88 1f adc r24, r24 - 1d70: da f7 brpl .-10 ; 0x1d68 <__floatsisf+0x62> - 1d72: 88 0f add r24, r24 - 1d74: 96 95 lsr r25 - 1d76: 87 95 ror r24 - 1d78: 97 f9 bld r25, 7 - 1d7a: 08 95 ret - -00001d7c <__fp_cmp>: - 1d7c: 99 0f add r25, r25 - 1d7e: 00 08 sbc r0, r0 - 1d80: 55 0f add r21, r21 - 1d82: aa 0b sbc r26, r26 - 1d84: e0 e8 ldi r30, 0x80 ; 128 - 1d86: fe ef ldi r31, 0xFE ; 254 - 1d88: 16 16 cp r1, r22 - 1d8a: 17 06 cpc r1, r23 - 1d8c: e8 07 cpc r30, r24 - 1d8e: f9 07 cpc r31, r25 - 1d90: c0 f0 brcs .+48 ; 0x1dc2 <__fp_cmp+0x46> - 1d92: 12 16 cp r1, r18 - 1d94: 13 06 cpc r1, r19 - 1d96: e4 07 cpc r30, r20 - 1d98: f5 07 cpc r31, r21 - 1d9a: 98 f0 brcs .+38 ; 0x1dc2 <__fp_cmp+0x46> - 1d9c: 62 1b sub r22, r18 - 1d9e: 73 0b sbc r23, r19 - 1da0: 84 0b sbc r24, r20 - 1da2: 95 0b sbc r25, r21 - 1da4: 39 f4 brne .+14 ; 0x1db4 <__fp_cmp+0x38> - 1da6: 0a 26 eor r0, r26 - 1da8: 61 f0 breq .+24 ; 0x1dc2 <__fp_cmp+0x46> - 1daa: 23 2b or r18, r19 - 1dac: 24 2b or r18, r20 - 1dae: 25 2b or r18, r21 - 1db0: 21 f4 brne .+8 ; 0x1dba <__fp_cmp+0x3e> - 1db2: 08 95 ret - 1db4: 0a 26 eor r0, r26 - 1db6: 09 f4 brne .+2 ; 0x1dba <__fp_cmp+0x3e> - 1db8: a1 40 sbci r26, 0x01 ; 1 - 1dba: a6 95 lsr r26 - 1dbc: 8f ef ldi r24, 0xFF ; 255 - 1dbe: 81 1d adc r24, r1 - 1dc0: 81 1d adc r24, r1 - 1dc2: 08 95 ret - -00001dc4 <__fp_inf>: - 1dc4: 97 f9 bld r25, 7 - 1dc6: 9f 67 ori r25, 0x7F ; 127 - 1dc8: 80 e8 ldi r24, 0x80 ; 128 - 1dca: 70 e0 ldi r23, 0x00 ; 0 - 1dcc: 60 e0 ldi r22, 0x00 ; 0 - 1dce: 08 95 ret - -00001dd0 <__fp_nan>: - 1dd0: 9f ef ldi r25, 0xFF ; 255 - 1dd2: 80 ec ldi r24, 0xC0 ; 192 - 1dd4: 08 95 ret - -00001dd6 <__fp_pscA>: - 1dd6: 00 24 eor r0, r0 - 1dd8: 0a 94 dec r0 - 1dda: 16 16 cp r1, r22 - 1ddc: 17 06 cpc r1, r23 - 1dde: 18 06 cpc r1, r24 - 1de0: 09 06 cpc r0, r25 - 1de2: 08 95 ret - -00001de4 <__fp_pscB>: - 1de4: 00 24 eor r0, r0 - 1de6: 0a 94 dec r0 - 1de8: 12 16 cp r1, r18 - 1dea: 13 06 cpc r1, r19 - 1dec: 14 06 cpc r1, r20 - 1dee: 05 06 cpc r0, r21 - 1df0: 08 95 ret - -00001df2 <__fp_round>: - 1df2: 09 2e mov r0, r25 - 1df4: 03 94 inc r0 - 1df6: 00 0c add r0, r0 - 1df8: 11 f4 brne .+4 ; 0x1dfe <__fp_round+0xc> - 1dfa: 88 23 and r24, r24 - 1dfc: 52 f0 brmi .+20 ; 0x1e12 <__fp_round+0x20> - 1dfe: bb 0f add r27, r27 - 1e00: 40 f4 brcc .+16 ; 0x1e12 <__fp_round+0x20> - 1e02: bf 2b or r27, r31 - 1e04: 11 f4 brne .+4 ; 0x1e0a <__fp_round+0x18> - 1e06: 60 ff sbrs r22, 0 - 1e08: 04 c0 rjmp .+8 ; 0x1e12 <__fp_round+0x20> - 1e0a: 6f 5f subi r22, 0xFF ; 255 - 1e0c: 7f 4f sbci r23, 0xFF ; 255 - 1e0e: 8f 4f sbci r24, 0xFF ; 255 - 1e10: 9f 4f sbci r25, 0xFF ; 255 - 1e12: 08 95 ret - -00001e14 <__fp_split3>: - 1e14: 57 fd sbrc r21, 7 - 1e16: 90 58 subi r25, 0x80 ; 128 - 1e18: 44 0f add r20, r20 - 1e1a: 55 1f adc r21, r21 - 1e1c: 59 f0 breq .+22 ; 0x1e34 <__fp_splitA+0x10> - 1e1e: 5f 3f cpi r21, 0xFF ; 255 - 1e20: 71 f0 breq .+28 ; 0x1e3e <__fp_splitA+0x1a> - 1e22: 47 95 ror r20 - -00001e24 <__fp_splitA>: - 1e24: 88 0f add r24, r24 - 1e26: 97 fb bst r25, 7 - 1e28: 99 1f adc r25, r25 - 1e2a: 61 f0 breq .+24 ; 0x1e44 <__fp_splitA+0x20> - 1e2c: 9f 3f cpi r25, 0xFF ; 255 - 1e2e: 79 f0 breq .+30 ; 0x1e4e <__fp_splitA+0x2a> - 1e30: 87 95 ror r24 - 1e32: 08 95 ret - 1e34: 12 16 cp r1, r18 - 1e36: 13 06 cpc r1, r19 - 1e38: 14 06 cpc r1, r20 - 1e3a: 55 1f adc r21, r21 - 1e3c: f2 cf rjmp .-28 ; 0x1e22 <__fp_split3+0xe> - 1e3e: 46 95 lsr r20 - 1e40: f1 df rcall .-30 ; 0x1e24 <__fp_splitA> - 1e42: 08 c0 rjmp .+16 ; 0x1e54 <__fp_splitA+0x30> - 1e44: 16 16 cp r1, r22 - 1e46: 17 06 cpc r1, r23 - 1e48: 18 06 cpc r1, r24 - 1e4a: 99 1f adc r25, r25 - 1e4c: f1 cf rjmp .-30 ; 0x1e30 <__fp_splitA+0xc> - 1e4e: 86 95 lsr r24 - 1e50: 71 05 cpc r23, r1 - 1e52: 61 05 cpc r22, r1 - 1e54: 08 94 sec - 1e56: 08 95 ret - -00001e58 <__fp_zero>: - 1e58: e8 94 clt - -00001e5a <__fp_szero>: - 1e5a: bb 27 eor r27, r27 - 1e5c: 66 27 eor r22, r22 - 1e5e: 77 27 eor r23, r23 - 1e60: cb 01 movw r24, r22 - 1e62: 97 f9 bld r25, 7 - 1e64: 08 95 ret - -00001e66 <__gesf2>: - 1e66: 8a df rcall .-236 ; 0x1d7c <__fp_cmp> - 1e68: 08 f4 brcc .+2 ; 0x1e6c <__gesf2+0x6> - 1e6a: 8f ef ldi r24, 0xFF ; 255 - 1e6c: 08 95 ret - -00001e6e <__mulhi3>: - 1e6e: 55 27 eor r21, r21 - 1e70: 00 24 eor r0, r0 - -00001e72 <__mulhi3_loop>: - 1e72: 80 ff sbrs r24, 0 - 1e74: 02 c0 rjmp .+4 ; 0x1e7a <__mulhi3_skip1> - 1e76: 06 0e add r0, r22 - 1e78: 57 1f adc r21, r23 - -00001e7a <__mulhi3_skip1>: - 1e7a: 66 0f add r22, r22 - 1e7c: 77 1f adc r23, r23 - 1e7e: 61 15 cp r22, r1 - 1e80: 71 05 cpc r23, r1 - 1e82: 21 f0 breq .+8 ; 0x1e8c <__mulhi3_exit> - 1e84: 96 95 lsr r25 - 1e86: 87 95 ror r24 - 1e88: 00 97 sbiw r24, 0x00 ; 0 - 1e8a: 99 f7 brne .-26 ; 0x1e72 <__mulhi3_loop> - -00001e8c <__mulhi3_exit>: - 1e8c: 95 2f mov r25, r21 - 1e8e: 80 2d mov r24, r0 - 1e90: 08 95 ret - -00001e92 <__udivmodhi4>: - 1e92: aa 1b sub r26, r26 - 1e94: bb 1b sub r27, r27 - 1e96: 51 e1 ldi r21, 0x11 ; 17 - 1e98: 07 c0 rjmp .+14 ; 0x1ea8 <__udivmodhi4_ep> - -00001e9a <__udivmodhi4_loop>: - 1e9a: aa 1f adc r26, r26 - 1e9c: bb 1f adc r27, r27 - 1e9e: a6 17 cp r26, r22 - 1ea0: b7 07 cpc r27, r23 - 1ea2: 10 f0 brcs .+4 ; 0x1ea8 <__udivmodhi4_ep> - 1ea4: a6 1b sub r26, r22 - 1ea6: b7 0b sbc r27, r23 - -00001ea8 <__udivmodhi4_ep>: - 1ea8: 88 1f adc r24, r24 - 1eaa: 99 1f adc r25, r25 - 1eac: 5a 95 dec r21 - 1eae: a9 f7 brne .-22 ; 0x1e9a <__udivmodhi4_loop> - 1eb0: 80 95 com r24 - 1eb2: 90 95 com r25 - 1eb4: bc 01 movw r22, r24 - 1eb6: cd 01 movw r24, r26 - 1eb8: 08 95 ret - -00001eba <__divmodhi4>: - 1eba: 97 fb bst r25, 7 - 1ebc: 09 2e mov r0, r25 - 1ebe: 07 26 eor r0, r23 - 1ec0: 0a d0 rcall .+20 ; 0x1ed6 <__divmodhi4_neg1> - 1ec2: 77 fd sbrc r23, 7 - 1ec4: 04 d0 rcall .+8 ; 0x1ece <__divmodhi4_neg2> - 1ec6: e5 df rcall .-54 ; 0x1e92 <__udivmodhi4> - 1ec8: 06 d0 rcall .+12 ; 0x1ed6 <__divmodhi4_neg1> - 1eca: 00 20 and r0, r0 - 1ecc: 1a f4 brpl .+6 ; 0x1ed4 <__divmodhi4_exit> - -00001ece <__divmodhi4_neg2>: - 1ece: 70 95 com r23 - 1ed0: 61 95 neg r22 - 1ed2: 7f 4f sbci r23, 0xFF ; 255 - -00001ed4 <__divmodhi4_exit>: - 1ed4: 08 95 ret - -00001ed6 <__divmodhi4_neg1>: - 1ed6: f6 f7 brtc .-4 ; 0x1ed4 <__divmodhi4_exit> - 1ed8: 90 95 com r25 - 1eda: 81 95 neg r24 - 1edc: 9f 4f sbci r25, 0xFF ; 255 - 1ede: 08 95 ret - -00001ee0 <__udivmodsi4>: - 1ee0: a1 e2 ldi r26, 0x21 ; 33 - 1ee2: 1a 2e mov r1, r26 - 1ee4: aa 1b sub r26, r26 - 1ee6: bb 1b sub r27, r27 - 1ee8: fd 01 movw r30, r26 - 1eea: 0d c0 rjmp .+26 ; 0x1f06 <__udivmodsi4_ep> - -00001eec <__udivmodsi4_loop>: - 1eec: aa 1f adc r26, r26 - 1eee: bb 1f adc r27, r27 - 1ef0: ee 1f adc r30, r30 - 1ef2: ff 1f adc r31, r31 - 1ef4: a2 17 cp r26, r18 - 1ef6: b3 07 cpc r27, r19 - 1ef8: e4 07 cpc r30, r20 - 1efa: f5 07 cpc r31, r21 - 1efc: 20 f0 brcs .+8 ; 0x1f06 <__udivmodsi4_ep> - 1efe: a2 1b sub r26, r18 - 1f00: b3 0b sbc r27, r19 - 1f02: e4 0b sbc r30, r20 - 1f04: f5 0b sbc r31, r21 - -00001f06 <__udivmodsi4_ep>: - 1f06: 66 1f adc r22, r22 - 1f08: 77 1f adc r23, r23 - 1f0a: 88 1f adc r24, r24 - 1f0c: 99 1f adc r25, r25 - 1f0e: 1a 94 dec r1 - 1f10: 69 f7 brne .-38 ; 0x1eec <__udivmodsi4_loop> - 1f12: 60 95 com r22 - 1f14: 70 95 com r23 - 1f16: 80 95 com r24 - 1f18: 90 95 com r25 - 1f1a: 9b 01 movw r18, r22 - 1f1c: ac 01 movw r20, r24 - 1f1e: bd 01 movw r22, r26 - 1f20: cf 01 movw r24, r30 - 1f22: 08 95 ret - -00001f24 : - 1f24: fc 01 movw r30, r24 - 1f26: 88 27 eor r24, r24 - 1f28: 99 27 eor r25, r25 - 1f2a: e8 94 clt - 1f2c: 21 91 ld r18, Z+ - 1f2e: 20 32 cpi r18, 0x20 ; 32 - 1f30: e9 f3 breq .-6 ; 0x1f2c - 1f32: 29 30 cpi r18, 0x09 ; 9 - 1f34: 10 f0 brcs .+4 ; 0x1f3a - 1f36: 2e 30 cpi r18, 0x0E ; 14 - 1f38: c8 f3 brcs .-14 ; 0x1f2c - 1f3a: 2b 32 cpi r18, 0x2B ; 43 - 1f3c: 39 f0 breq .+14 ; 0x1f4c - 1f3e: 2d 32 cpi r18, 0x2D ; 45 - 1f40: 31 f4 brne .+12 ; 0x1f4e - 1f42: 68 94 set - 1f44: 03 c0 rjmp .+6 ; 0x1f4c - 1f46: 1a d0 rcall .+52 ; 0x1f7c <__mulhi_const_10> - 1f48: 82 0f add r24, r18 - 1f4a: 91 1d adc r25, r1 - 1f4c: 21 91 ld r18, Z+ - 1f4e: 20 53 subi r18, 0x30 ; 48 - 1f50: 2a 30 cpi r18, 0x0A ; 10 - 1f52: c8 f3 brcs .-14 ; 0x1f46 - 1f54: 1e f4 brtc .+6 ; 0x1f5c - 1f56: 90 95 com r25 - 1f58: 81 95 neg r24 - 1f5a: 9f 4f sbci r25, 0xFF ; 255 - 1f5c: 08 95 ret - -00001f5e : - 1f5e: fb 01 movw r30, r22 - 1f60: dc 01 movw r26, r24 - 1f62: 41 50 subi r20, 0x01 ; 1 - 1f64: 50 40 sbci r21, 0x00 ; 0 - 1f66: 48 f0 brcs .+18 ; 0x1f7a - 1f68: 01 90 ld r0, Z+ - 1f6a: 0d 92 st X+, r0 - 1f6c: 00 20 and r0, r0 - 1f6e: c9 f7 brne .-14 ; 0x1f62 - 1f70: 01 c0 rjmp .+2 ; 0x1f74 - 1f72: 1d 92 st X+, r1 - 1f74: 41 50 subi r20, 0x01 ; 1 - 1f76: 50 40 sbci r21, 0x00 ; 0 - 1f78: e0 f7 brcc .-8 ; 0x1f72 - 1f7a: 08 95 ret - -00001f7c <__mulhi_const_10>: - 1f7c: bc 01 movw r22, r24 - 1f7e: 88 0f add r24, r24 - 1f80: 99 1f adc r25, r25 - 1f82: 88 0f add r24, r24 - 1f84: 99 1f adc r25, r25 - 1f86: 86 0f add r24, r22 - 1f88: 97 1f adc r25, r23 - 1f8a: 88 0f add r24, r24 - 1f8c: 99 1f adc r25, r25 - 1f8e: 08 95 ret - -00001f90 <_exit>: - 1f90: f8 94 cli - -00001f92 <__stop_program>: - 1f92: ff cf rjmp .-2 ; 0x1f92 <__stop_program> diff --git a/firmware/USBtoSerial.map b/firmware/USBtoSerial.map deleted file mode 100644 index 6c4019a..0000000 --- a/firmware/USBtoSerial.map +++ /dev/null @@ -1,1860 +0,0 @@ -Archive member included because of file (symbol) - -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - USBtoSerial.o (__subsf3) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) (__addsf3x) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - USBtoSerial.o (__ltsf2) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - USBtoSerial.o (__divsf3) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) (__divsf3x) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - USBtoSerial.o (__fixunssfsi) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - USBtoSerial.o (__floatunsisf) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) (__fp_cmp) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) (__fp_inf) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) (__fp_nan) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) (__fp_pscA) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) (__fp_pscB) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) (__fp_round) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) (__fp_split3) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) (__fp_zero) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - USBtoSerial.o (__gtsf2) -/usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulhi3.o) - USBtoSerial.o (__mulhi3) -/usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulsi3.o) - USBtoSerial.o (__mulsi3) -/usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) - USBtoSerial.o (__udivmodhi4) -/usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) - USBtoSerial.o (__divmodhi4) -/usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - USBtoSerial.o (__udivmodsi4) -/usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o (exit) -/usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) - USBtoSerial.o (__do_copy_data) -/usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_clear_bss.o) - USBtoSerial.o (__do_clear_bss) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) - USBtoSerial.o (atoi) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy_P.o) - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o (memcpy_P) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcmp.o) - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o (memcmp) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy.o) - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o (memcpy) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memset.o) - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o (memset) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(strncpy.o) - USBtoSerial.o (strncpy) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(mul10.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) (__mulhi_const_10) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eerd_byte_atmega32u2.o) - ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o (__eerd_byte_m32u2) -/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eeupd_byte_atmega32u2.o) - ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o (__eeupd_byte_m32u2) - -Allocating common symbols -Common symbol size file - -adb_werte 0x9 USBtoSerial.o -USB_IsInitialized 0x1 ../../LUFA/Drivers/USB/Core/USBTask.o -USB_Device_ConfigurationNumber - 0x1 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o -stringbuffer 0x10 USBtoSerial.o -USB_Device_CurrentlySelfPowered - 0x1 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o -USB_ControlRequest 0x8 ../../LUFA/Drivers/USB/Core/USBTask.o -USB_Device_RemoteWakeupEnabled - 0x1 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o -t0ovfcount 0x1 USBtoSerial.o -adb_data_length 0x1 USBtoSerial.o - -Discarded input sections - - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o - .text 0x0000000000000000 0x0 USBtoSerial.o - .text.touchpad_set_abs_mode - 0x0000000000000000 0x42 USBtoSerial.o - .text.touchpad_set_rel_mode_200dpi - 0x0000000000000000 0x2a USBtoSerial.o - .text.z_pressure - 0x0000000000000000 0x16 USBtoSerial.o - .text.x_abs 0x0000000000000000 0x3c USBtoSerial.o - .text.y_abs 0x0000000000000000 0x3e USBtoSerial.o - .text.decode_field - 0x0000000000000000 0x8c USBtoSerial.o - .text.uart_print_number - 0x0000000000000000 0x2c USBtoSerial.o - .text.times_ten_pow - 0x0000000000000000 0x3a USBtoSerial.o - .text 0x0000000000000000 0x0 Descriptors.o - .data 0x0000000000000000 0x0 Descriptors.o - .bss 0x0000000000000000 0x0 Descriptors.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .text.USB_ProcessHIDReport - 0x0000000000000000 0x836 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .text.USB_GetHIDReportItemInfo - 0x0000000000000000 0xbc ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .text.USB_SetHIDReportItemInfo - 0x0000000000000000 0xc8 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .text.USB_GetHIDReportSize - 0x0000000000000000 0x58 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .text.USB_Device_SendRemoteWakeup - 0x0000000000000000 0x2c ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Discard_Stream - 0x0000000000000000 0x8e ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Null_Stream - 0x0000000000000000 0x8e ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_Stream_LE - 0x0000000000000000 0xbe ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_Stream_BE - 0x0000000000000000 0xae ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Read_Stream_LE - 0x0000000000000000 0xbe ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Read_Stream_BE - 0x0000000000000000 0xae ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_PStream_LE - 0x0000000000000000 0xc2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_PStream_BE - 0x0000000000000000 0xae ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_EStream_LE - 0x0000000000000000 0xc4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_EStream_BE - 0x0000000000000000 0xb0 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Read_EStream_LE - 0x0000000000000000 0xc2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Read_EStream_BE - 0x0000000000000000 0xb2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_Control_Stream_BE - 0x0000000000000000 0xb8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Read_Control_Stream_LE - 0x0000000000000000 0x78 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Read_Control_Stream_BE - 0x0000000000000000 0x7a ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_Control_PStream_BE - 0x0000000000000000 0xba ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_Control_EStream_LE - 0x0000000000000000 0xcc ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Write_Control_EStream_BE - 0x0000000000000000 0xda ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Read_Control_EStream_LE - 0x0000000000000000 0x84 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text.Endpoint_Read_Control_EStream_BE - 0x0000000000000000 0x8a ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .text.Endpoint_ClearEndpoints - 0x0000000000000000 0x2c ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .text.USB_Disable - 0x0000000000000000 0x2e ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .text.USB_GetNextDescriptorOfType - 0x0000000000000000 0x4c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .text.USB_GetNextDescriptorOfTypeBefore - 0x0000000000000000 0x56 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .text.USB_GetNextDescriptorOfTypeAfter - 0x0000000000000000 0x34 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .text.USB_GetNextDescriptorComp - 0x0000000000000000 0x86 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/Events.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/Events.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/Events.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/USBTask.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/USBTask.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/USBTask.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .text.Audio_Device_ProcessControlRequest - 0x0000000000000000 0x316 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .text.Audio_Device_ConfigureEndpoints - 0x0000000000000000 0x30 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .text.Audio_Device_Event_Stub - 0x0000000000000000 0x2 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .data 0x0000000000000000 0x8 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text.CDC_Device_SendString - 0x0000000000000000 0x46 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text.CDC_Device_SendData - 0x0000000000000000 0x38 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text.CDC_Device_putchar - 0x0000000000000000 0x20 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text.CDC_Device_BytesReceived - 0x0000000000000000 0x4e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text.CDC_Device_getchar_Blocking - 0x0000000000000000 0x36 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text.CDC_Device_getchar - 0x0000000000000000 0x18 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text.CDC_Device_SendControlLineStateChange - 0x0000000000000000 0x8c ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text.CDC_Device_CreateStream - 0x0000000000000000 0x26 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text.CDC_Device_CreateBlockingStream - 0x0000000000000000 0x26 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .text.HID_Device_ProcessControlRequest - 0x0000000000000000 0x28c ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .text.HID_Device_ConfigureEndpoints - 0x0000000000000000 0x34 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .text.HID_Device_USBTask - 0x0000000000000000 0x1a0 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .text.MS_Device_ProcessControlRequest - 0x0000000000000000 0x7e ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .text.MS_Device_ConfigureEndpoints - 0x0000000000000000 0x3c ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .text.MS_Device_USBTask - 0x0000000000000000 0x266 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .text.MIDI_Device_ConfigureEndpoints - 0x0000000000000000 0x30 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .text.MIDI_Device_SendEventPacket - 0x0000000000000000 0x3a ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .text.MIDI_Device_Flush - 0x0000000000000000 0x30 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .text.MIDI_Device_USBTask - 0x0000000000000000 0x1e ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .text.MIDI_Device_ReceiveEventPacket - 0x0000000000000000 0x44 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .data 0x0000000000000000 0x8 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .text.RNDIS_Device_ProcessControlRequest - 0x0000000000000000 0x5bc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .text.RNDIS_Device_ConfigureEndpoints - 0x0000000000000000 0x4e ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .text.RNDIS_Device_USBTask - 0x0000000000000000 0x86 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .text.RNDIS_Device_IsPacketReceived - 0x0000000000000000 0x2e ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .text.RNDIS_Device_ReadPacket - 0x0000000000000000 0xbe ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .text.RNDIS_Device_SendPacket - 0x0000000000000000 0xde ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .progmem.data 0x0000000000000000 0x6c ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulhi3.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulhi3.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulhi3.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulsi3.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulsi3.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulsi3.o) - .text.libgcc 0x0000000000000000 0x32 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulsi3.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - .text.libgcc 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) - .text.libgcc 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_clear_bss.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_clear_bss.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_clear_bss.o) - .text.libgcc 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_clear_bss.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy_P.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy_P.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy_P.o) - .text.avr-libc - 0x0000000000000000 0x12 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy_P.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcmp.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcmp.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcmp.o) - .text.avr-libc - 0x0000000000000000 0x1a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcmp.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy.o) - .text.avr-libc - 0x0000000000000000 0x12 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memset.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memset.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memset.o) - .text.avr-libc - 0x0000000000000000 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memset.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(strncpy.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(strncpy.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(strncpy.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(mul10.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(mul10.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(mul10.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eerd_byte_atmega32u2.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eerd_byte_atmega32u2.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eerd_byte_atmega32u2.o) - .text.avr-libc - 0x0000000000000000 0x10 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eerd_byte_atmega32u2.o) - .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eeupd_byte_atmega32u2.o) - .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eeupd_byte_atmega32u2.o) - .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eeupd_byte_atmega32u2.o) - .text.avr-libc - 0x0000000000000000 0x24 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eeupd_byte_atmega32u2.o) - -Memory Configuration - -Name Origin Length Attributes -text 0x0000000000000000 0x0000000000010000 xr -data 0x0000000000800060 0x000000000000ffa0 rw !x -eeprom 0x0000000000810000 0x0000000000010000 rw !x -fuse 0x0000000000820000 0x0000000000000400 rw !x -lock 0x0000000000830000 0x0000000000000400 rw !x -signature 0x0000000000840000 0x0000000000000400 rw !x -*default* 0x0000000000000000 0xffffffffffffffff - -Linker script and memory map - -Address of section .data set to 0x800100 -LOAD /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -LOAD USBtoSerial.o -LOAD Descriptors.o -LOAD ../../LUFA/Drivers/USB/Class/Common/HIDParser.o -LOAD ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o -LOAD ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_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/PipeStream_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/ConfigDescriptors.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/Device/AudioClassDevice.o -LOAD ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -LOAD ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o -LOAD ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o -LOAD ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o -LOAD ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -LOAD ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o -LOAD ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o -LOAD ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o -LOAD ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o -LOAD ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o -LOAD ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o -LOAD ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o -LOAD ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o -LOAD ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o -LOAD /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a -LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a -LOAD /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a -LOAD /usr/lib/gcc/avr/4.5.3/avr35/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 0x0000000000000000 0x1f94 - *(.vectors) - .vectors 0x0000000000000000 0x98 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o - 0x0000000000000000 __vectors - 0x0000000000000000 __vector_default - *(.vectors) - *(.progmem.gcc*) - *(.progmem*) - .progmem.data 0x0000000000000098 0x9e Descriptors.o - 0x0000000000000098 DeviceDescriptor - 0x00000000000000aa ConfigurationDescriptor - 0x00000000000000e8 LanguageString - 0x00000000000000ec ManufacturerString - 0x0000000000000106 ProductString - 0x0000000000000136 . = ALIGN (0x2) - 0x0000000000000136 __trampolines_start = . - *(.trampolines) - .trampolines 0x0000000000000136 0x0 linker stubs - *(.trampolines*) - 0x0000000000000136 __trampolines_end = . - *(.jumptables) - *(.jumptables*) - *(.lowtext) - *(.lowtext*) - 0x0000000000000136 __ctors_start = . - *(.ctors) - 0x0000000000000136 __ctors_end = . - 0x0000000000000136 __dtors_start = . - *(.dtors) - 0x0000000000000136 __dtors_end = . - SORT(*)(.ctors) - SORT(*)(.dtors) - *(.init0) - .init0 0x0000000000000136 0x0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o - 0x0000000000000136 __init - *(.init0) - *(.init1) - *(.init1) - *(.init2) - .init2 0x0000000000000136 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o - *(.init2) - *(.init3) - *(.init3) - *(.init4) - .init4 0x0000000000000142 0x16 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) - 0x0000000000000142 __do_copy_data - .init4 0x0000000000000158 0x10 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_clear_bss.o) - 0x0000000000000158 __do_clear_bss - *(.init4) - *(.init5) - *(.init5) - *(.init6) - *(.init6) - *(.init7) - *(.init7) - *(.init8) - *(.init8) - *(.init9) - .init9 0x0000000000000168 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o - *(.init9) - *(.text) - .text 0x000000000000016e 0x2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o - 0x000000000000016e __vector_22 - 0x000000000000016e __vector_28 - 0x000000000000016e __vector_1 - 0x000000000000016e __vector_32 - 0x000000000000016e __vector_34 - 0x000000000000016e __vector_24 - 0x000000000000016e __bad_interrupt - 0x000000000000016e __vector_6 - 0x000000000000016e __vector_31 - 0x000000000000016e __vector_35 - 0x000000000000016e __vector_3 - 0x000000000000016e __vector_30 - 0x000000000000016e __vector_25 - 0x000000000000016e __vector_13 - 0x000000000000016e __vector_17 - 0x000000000000016e __vector_19 - 0x000000000000016e __vector_7 - 0x000000000000016e __vector_27 - 0x000000000000016e __vector_5 - 0x000000000000016e __vector_33 - 0x000000000000016e __vector_37 - 0x000000000000016e __vector_4 - 0x000000000000016e __vector_9 - 0x000000000000016e __vector_2 - 0x000000000000016e __vector_15 - 0x000000000000016e __vector_36 - 0x000000000000016e __vector_29 - 0x000000000000016e __vector_8 - 0x000000000000016e __vector_26 - 0x000000000000016e __vector_14 - 0x000000000000016e __vector_10 - 0x000000000000016e __vector_16 - 0x000000000000016e __vector_18 - 0x000000000000016e __vector_20 - 0x0000000000000170 . = ALIGN (0x2) - *(.text.*) - .text.RingBuffer_Insert - 0x0000000000000170 0x36 USBtoSerial.o - .text.RingBuffer_Remove - 0x00000000000001a6 0x32 USBtoSerial.o - .text.set_x 0x00000000000001d8 0x76 USBtoSerial.o - 0x00000000000001d8 set_x - .text.set_y 0x000000000000024e 0x74 USBtoSerial.o - 0x000000000000024e set_y - .text.RingBuffer_InitBuffer.clone.0 - 0x00000000000002c2 0x2a USBtoSerial.o - .text.__vector_21 - 0x00000000000002ec 0x22 USBtoSerial.o - 0x00000000000002ec __vector_21 - .text.t0ext 0x000000000000030e 0x10 USBtoSerial.o - 0x000000000000030e t0ext - .text.t0rst 0x000000000000031e 0x8 USBtoSerial.o - 0x000000000000031e t0rst - .text.adb 0x0000000000000326 0x220 USBtoSerial.o - 0x0000000000000326 adb - .text.touchpad_init - 0x0000000000000546 0x10 USBtoSerial.o - 0x0000000000000546 touchpad_init - .text.touchpad_read - 0x0000000000000556 0x12 USBtoSerial.o - 0x0000000000000556 touchpad_read - .text.touchpad_set_rel_mode_100dpi - 0x0000000000000568 0x28 USBtoSerial.o - 0x0000000000000568 touchpad_set_rel_mode_100dpi - .text.delta_y 0x0000000000000590 0x20 USBtoSerial.o - 0x0000000000000590 delta_y - .text.delta_x 0x00000000000005b0 0x20 USBtoSerial.o - 0x00000000000005b0 delta_x - .text.init_leds - 0x00000000000005d0 0x8 USBtoSerial.o - 0x00000000000005d0 init_leds - .text.set_led0 - 0x00000000000005d8 0x14 USBtoSerial.o - 0x00000000000005d8 set_led0 - .text.set_led1 - 0x00000000000005ec 0xc USBtoSerial.o - 0x00000000000005ec set_led1 - .text.set_led2 - 0x00000000000005f8 0x1a USBtoSerial.o - 0x00000000000005f8 set_led2 - .text.init_sw 0x0000000000000612 0xe USBtoSerial.o - 0x0000000000000612 init_sw - .text.sw0_state - 0x0000000000000620 0x14 USBtoSerial.o - 0x0000000000000620 sw0_state - .text.sw1_state - 0x0000000000000634 0x14 USBtoSerial.o - 0x0000000000000634 sw1_state - .text.sw2_state - 0x0000000000000648 0x14 USBtoSerial.o - 0x0000000000000648 sw2_state - .text.Usb2SerialTask - 0x000000000000065c 0x96 USBtoSerial.o - 0x000000000000065c Usb2SerialTask - .text.SetupHardware - 0x00000000000006f2 0x2a USBtoSerial.o - 0x00000000000006f2 SetupHardware - .text.EVENT_USB_Device_Connect - 0x000000000000071c 0x2 USBtoSerial.o - 0x000000000000071c EVENT_USB_Device_Connect - .text.EVENT_USB_Device_Disconnect - 0x000000000000071e 0x2 USBtoSerial.o - 0x000000000000071e EVENT_USB_Device_Disconnect - .text.EVENT_USB_Device_ConfigurationChanged - 0x0000000000000720 0x8 USBtoSerial.o - 0x0000000000000720 EVENT_USB_Device_ConfigurationChanged - .text.EVENT_USB_Device_ControlRequest - 0x0000000000000728 0x8 USBtoSerial.o - 0x0000000000000728 EVENT_USB_Device_ControlRequest - .text.__vector_23 - 0x0000000000000730 0x54 USBtoSerial.o - 0x0000000000000730 __vector_23 - .text.EVENT_CDC_Device_LineEncodingChanged - 0x0000000000000784 0xcc USBtoSerial.o - 0x0000000000000784 EVENT_CDC_Device_LineEncodingChanged - .text.uart_putc - 0x0000000000000850 0x10 USBtoSerial.o - 0x0000000000000850 uart_putc - .text.uart_puts - 0x0000000000000860 0x26 USBtoSerial.o - 0x0000000000000860 uart_puts - .text.my_uitoa - 0x0000000000000886 0xcc USBtoSerial.o - 0x0000000000000886 my_uitoa - .text.sign 0x0000000000000952 0x18 USBtoSerial.o - 0x0000000000000952 sign - .text.uart_print_number_wlzeros - 0x000000000000096a 0x28 USBtoSerial.o - 0x000000000000096a uart_print_number_wlzeros - .text.uart_print_signed_number - 0x0000000000000992 0x46 USBtoSerial.o - 0x0000000000000992 uart_print_signed_number - .text.init_motors - 0x00000000000009d8 0x1a USBtoSerial.o - 0x00000000000009d8 init_motors - .text.motor_step - 0x00000000000009f2 0x64 USBtoSerial.o - 0x00000000000009f2 motor_step - .text.move_plate - 0x0000000000000a56 0xa2 USBtoSerial.o - 0x0000000000000a56 move_plate - .text.print_steps_in_mm - 0x0000000000000af8 0x54 USBtoSerial.o - 0x0000000000000af8 print_steps_in_mm - .text.pos_report - 0x0000000000000b4c 0x26 USBtoSerial.o - 0x0000000000000b4c pos_report - .text.parse_command - 0x0000000000000b72 0x35e USBtoSerial.o - 0x0000000000000b72 parse_command - .text.main 0x0000000000000ed0 0xb2 USBtoSerial.o - 0x0000000000000ed0 main - .text.CALLBACK_USB_GetDescriptor - 0x0000000000000f82 0x5a Descriptors.o - 0x0000000000000f82 CALLBACK_USB_GetDescriptor - .text.Endpoint_Write_Control_Stream_LE - 0x0000000000000fdc 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x0000000000000fdc Endpoint_Write_Control_Stream_LE - .text.Endpoint_Write_Control_PStream_LE - 0x0000000000001090 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x0000000000001090 Endpoint_Write_Control_PStream_LE - .text.Endpoint_ConfigureEndpoint_Prv - 0x0000000000001146 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000001146 Endpoint_ConfigureEndpoint_Prv - .text.Endpoint_ConfigureEndpointTable - 0x00000000000011b4 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x00000000000011b4 Endpoint_ConfigureEndpointTable - .text.Endpoint_ClearStatusStage - 0x000000000000123c 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x000000000000123c Endpoint_ClearStatusStage - .text.Endpoint_WaitUntilReady - 0x000000000000127a 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x000000000000127a Endpoint_WaitUntilReady - .text.USB_ResetInterface - 0x00000000000012e0 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x00000000000012e0 USB_ResetInterface - .text.USB_Init - 0x0000000000001350 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000001350 USB_Init - .text.USB_INT_DisableAllInterrupts - 0x0000000000001362 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000001362 USB_INT_DisableAllInterrupts - .text.USB_INT_ClearAllInterrupts - 0x0000000000001368 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000001368 USB_INT_ClearAllInterrupts - .text.__vector_11 - 0x000000000000136e 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x000000000000136e __vector_11 - .text.__vector_12 - 0x00000000000014b6 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x00000000000014b6 __vector_12 - .text.USB_Device_ProcessControlRequest - 0x000000000000152c 0x2c4 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x000000000000152c USB_Device_ProcessControlRequest - .text.USB_Event_Stub - 0x00000000000017f0 0x2 ../../LUFA/Drivers/USB/Core/Events.o - 0x00000000000017f0 EVENT_USB_Device_WakeUp - 0x00000000000017f0 USB_Event_Stub - 0x00000000000017f0 EVENT_USB_Device_Suspend - 0x00000000000017f0 EVENT_USB_Device_StartOfFrame - 0x00000000000017f0 EVENT_USB_Device_Reset - .text.USB_USBTask - 0x00000000000017f2 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x00000000000017f2 USB_USBTask - .text.CDC_Device_ProcessControlRequest - 0x0000000000001828 0x15a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001828 CDC_Device_ProcessControlRequest - .text.CDC_Device_ConfigureEndpoints - 0x0000000000001982 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001982 CDC_Device_ConfigureEndpoints - .text.CDC_Device_SendByte - 0x00000000000019ca 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000019ca CDC_Device_SendByte - .text.CDC_Device_Flush - 0x0000000000001a24 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001a24 CDC_Device_Flush - .text.CDC_Device_USBTask - 0x0000000000001a7e 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001a7e CDC_Device_USBTask - .text.CDC_Device_ReceiveByte - 0x0000000000001aac 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001aac CDC_Device_ReceiveByte - .text.CDC_Device_Event_Stub - 0x0000000000001b06 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001b06 EVENT_CDC_Device_ControLineStateChanged - 0x0000000000001b06 EVENT_CDC_Device_BreakSent - 0x0000000000001b06 CDC_Device_Event_Stub - .text.avr-libc.fplib - 0x0000000000001b08 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - 0x0000000000001b08 __subsf3 - 0x0000000000001b0a __addsf3 - .text.avr-libc.fplib - 0x0000000000001b12 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - 0x0000000000001b2c __addsf3x - .text.avr-libc.fplib - 0x0000000000001bd2 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - 0x0000000000001bd2 __lesf2 - 0x0000000000001bd2 __nesf2 - 0x0000000000001bd2 __eqsf2 - 0x0000000000001bd2 __cmpsf2 - 0x0000000000001bd2 __ltsf2 - .text.avr-libc.fplib - 0x0000000000001bda 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - 0x0000000000001bda __divsf3 - .text.avr-libc.fplib - 0x0000000000001bde 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - 0x0000000000001bf4 __divsf3x - 0x0000000000001bf8 __divsf3_pse - .text.avr-libc.fplib - 0x0000000000001caa 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - 0x0000000000001caa __fixunssfsi - .text.avr-libc.fplib - 0x0000000000001d02 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - 0x0000000000001d02 __floatunsisf - 0x0000000000001d06 __floatsisf - .text.avr-libc.fplib - 0x0000000000001d7c 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - 0x0000000000001d7c __fp_cmp - .text.avr-libc.fplib - 0x0000000000001dc4 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - 0x0000000000001dc4 __fp_inf - .text.avr-libc.fplib - 0x0000000000001dd0 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - 0x0000000000001dd0 __fp_nan - .text.avr-libc.fplib - 0x0000000000001dd6 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - 0x0000000000001dd6 __fp_pscA - .text.avr-libc.fplib - 0x0000000000001de4 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - 0x0000000000001de4 __fp_pscB - .text.avr-libc.fplib - 0x0000000000001df2 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - 0x0000000000001df2 __fp_round - .text.avr-libc.fplib - 0x0000000000001e14 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - 0x0000000000001e14 __fp_split3 - 0x0000000000001e24 __fp_splitA - .text.avr-libc.fplib - 0x0000000000001e58 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - 0x0000000000001e58 __fp_zero - 0x0000000000001e5a __fp_szero - .text.avr-libc.fplib - 0x0000000000001e66 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - 0x0000000000001e66 __gtsf2 - 0x0000000000001e66 __gesf2 - .text.libgcc 0x0000000000001e6e 0x24 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulhi3.o) - 0x0000000000001e6e __mulhi3 - .text.libgcc 0x0000000000001e92 0x28 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) - 0x0000000000001e92 __udivmodhi4 - .text.libgcc 0x0000000000001eba 0x26 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) - 0x0000000000001eba __divmodhi4 - 0x0000000000001eba _div - .text.libgcc 0x0000000000001ee0 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - 0x0000000000001ee0 __udivmodsi4 - .text.avr-libc - 0x0000000000001f24 0x3a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) - 0x0000000000001f24 atoi - .text.avr-libc - 0x0000000000001f5e 0x1e /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(strncpy.o) - 0x0000000000001f5e strncpy - .text.avr-libc - 0x0000000000001f7c 0x14 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(mul10.o) - 0x0000000000001f7c __mulhi_const_10 - 0x0000000000001f90 . = ALIGN (0x2) - *(.fini9) - .fini9 0x0000000000001f90 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - 0x0000000000001f90 exit - 0x0000000000001f90 _exit - *(.fini9) - *(.fini8) - *(.fini8) - *(.fini7) - *(.fini7) - *(.fini6) - *(.fini6) - *(.fini5) - *(.fini5) - *(.fini4) - *(.fini4) - *(.fini3) - *(.fini3) - *(.fini2) - *(.fini2) - *(.fini1) - *(.fini1) - *(.fini0) - .fini0 0x0000000000001f90 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - *(.fini0) - 0x0000000000001f94 _etext = . - -.data 0x0000000000800100 0x4e load address 0x0000000000001f94 - 0x0000000000800100 PROVIDE (__data_start, .) - *(.data) - .data 0x0000000000800100 0x4d USBtoSerial.o - 0x0000000000800128 VirtualSerial_CDC_Interface - 0x0000000000800143 phase_pattern - *(.data*) - *(.rodata) - *(.rodata*) - *(.gnu.linkonce.d*) - 0x000000000080014e . = ALIGN (0x2) - *fill* 0x000000000080014d 0x1 00 - 0x000000000080014e _edata = . - 0x000000000080014e PROVIDE (__data_end, .) - -.bss 0x000000000080014e 0x186 - 0x000000000080014e PROVIDE (__bss_start, .) - *(.bss) - .bss 0x000000000080014e 0x15f USBtoSerial.o - 0x000000000080014e plate_pos_x - 0x0000000000800150 plate_pos_y - *(.bss*) - *(COMMON) - COMMON 0x00000000008002ad 0x1b USBtoSerial.o - 0x00000000008002ad adb_werte - 0x00000000008002b6 stringbuffer - 0x00000000008002c6 t0ovfcount - 0x00000000008002c7 adb_data_length - COMMON 0x00000000008002c8 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x00000000008002c8 USB_Device_ConfigurationNumber - 0x00000000008002c9 USB_Device_CurrentlySelfPowered - 0x00000000008002ca USB_Device_RemoteWakeupEnabled - COMMON 0x00000000008002cb 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x00000000008002cb USB_IsInitialized - 0x00000000008002cc USB_ControlRequest - 0x00000000008002d4 PROVIDE (__bss_end, .) - 0x0000000000001f94 __data_load_start = LOADADDR (.data) - 0x0000000000001fe2 __data_load_end = (__data_load_start + SIZEOF (.data)) - -.noinit 0x00000000008002d4 0x0 - 0x00000000008002d4 PROVIDE (__noinit_start, .) - *(.noinit*) - 0x00000000008002d4 PROVIDE (__noinit_end, .) - 0x00000000008002d4 _end = . - 0x00000000008002d4 PROVIDE (__heap_start, .) - -.eeprom 0x0000000000810000 0x0 - *(.eeprom*) - 0x0000000000810000 __eeprom_end = . - -.fuse - *(.fuse) - *(.lfuse) - *(.hfuse) - *(.efuse) - -.lock - *(.lock*) - -.signature - *(.signature*) - -.stab 0x0000000000000000 0x255c - *(.stab) - .stab 0x0000000000000000 0x6cc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o - .stab 0x00000000000006cc 0x78 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - 0x84 (size before relaxing) - .stab 0x0000000000000744 0x4bc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - 0x4c8 (size before relaxing) - .stab 0x0000000000000c00 0x90 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - 0x9c (size before relaxing) - .stab 0x0000000000000c90 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - 0x54 (size before relaxing) - .stab 0x0000000000000cd8 0x510 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - 0x51c (size before relaxing) - .stab 0x00000000000011e8 0x240 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - 0x24c (size before relaxing) - .stab 0x0000000000001428 0x318 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - 0x324 (size before relaxing) - .stab 0x0000000000001740 0x1e0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - 0x1ec (size before relaxing) - .stab 0x0000000000001920 0x78 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - 0x84 (size before relaxing) - .stab 0x0000000000001998 0x54 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - 0x60 (size before relaxing) - .stab 0x00000000000019ec 0x84 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - 0x90 (size before relaxing) - .stab 0x0000000000001a70 0x84 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - 0x90 (size before relaxing) - .stab 0x0000000000001af4 0xfc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - 0x108 (size before relaxing) - .stab 0x0000000000001bf0 0x1d4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - 0x1e0 (size before relaxing) - .stab 0x0000000000001dc4 0x90 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - 0x9c (size before relaxing) - .stab 0x0000000000001e54 0x6c /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - 0x78 (size before relaxing) - .stab 0x0000000000001ec0 0x174 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) - 0x180 (size before relaxing) - .stab 0x0000000000002034 0x84 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy_P.o) - 0x90 (size before relaxing) - .stab 0x00000000000020b8 0xb4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcmp.o) - 0xc0 (size before relaxing) - .stab 0x000000000000216c 0x84 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy.o) - 0x90 (size before relaxing) - .stab 0x00000000000021f0 0x6c /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memset.o) - 0x78 (size before relaxing) - .stab 0x000000000000225c 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(strncpy.o) - 0xd8 (size before relaxing) - .stab 0x0000000000002328 0x90 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(mul10.o) - 0x9c (size before relaxing) - .stab 0x00000000000023b8 0x90 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eerd_byte_atmega32u2.o) - 0x9c (size before relaxing) - .stab 0x0000000000002448 0x114 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eeupd_byte_atmega32u2.o) - 0x120 (size before relaxing) - -.stabstr 0x0000000000000000 0x4d5 - *(.stabstr) - .stabstr 0x0000000000000000 0x4d5 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.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 0x0000000000000000 0x5e0 - *(.debug_aranges) - .debug_aranges - 0x0000000000000000 0x1b0 USBtoSerial.o - .debug_aranges - 0x00000000000001b0 0x20 Descriptors.o - .debug_aranges - 0x00000000000001d0 0x38 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_aranges - 0x0000000000000208 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_aranges - 0x0000000000000228 0xc8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_aranges - 0x00000000000002f0 0x40 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_aranges - 0x0000000000000330 0x30 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_aranges - 0x0000000000000360 0x38 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_aranges - 0x0000000000000398 0x38 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_aranges - 0x00000000000003d0 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_aranges - 0x00000000000003f0 0x20 ../../LUFA/Drivers/USB/Core/Events.o - .debug_aranges - 0x0000000000000410 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_aranges - 0x0000000000000430 0x30 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_aranges - 0x0000000000000460 0x98 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_aranges - 0x00000000000004f8 0x30 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_aranges - 0x0000000000000528 0x30 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_aranges - 0x0000000000000558 0x40 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_aranges - 0x0000000000000598 0x48 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - -.debug_pubnames - 0x0000000000000000 0xfa4 - *(.debug_pubnames) - .debug_pubnames - 0x0000000000000000 0x409 USBtoSerial.o - .debug_pubnames - 0x0000000000000409 0x9e Descriptors.o - .debug_pubnames - 0x00000000000004a7 0x7e ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_pubnames - 0x0000000000000525 0x32 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_pubnames - 0x0000000000000557 0x2df ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_pubnames - 0x0000000000000836 0xaf ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_pubnames - 0x00000000000008e5 0x46 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_pubnames - 0x000000000000092b 0x72 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_pubnames - 0x000000000000099d 0x9b ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_pubnames - 0x0000000000000a38 0xa1 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_pubnames - 0x0000000000000ad9 0x25 ../../LUFA/Drivers/USB/Core/Events.o - .debug_pubnames - 0x0000000000000afe 0x4f ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_pubnames - 0x0000000000000b4d 0x79 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_pubnames - 0x0000000000000bc6 0x18b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_pubnames - 0x0000000000000d51 0x70 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_pubnames - 0x0000000000000dc1 0x6d ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_pubnames - 0x0000000000000e2e 0xa6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_pubnames - 0x0000000000000ed4 0xd0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - -.debug_info 0x0000000000000000 0x9390 - *(.debug_info) - .debug_info 0x0000000000000000 0x15d2 USBtoSerial.o - .debug_info 0x00000000000015d2 0x77d Descriptors.o - .debug_info 0x0000000000001d4f 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_info 0x0000000000002448 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_info 0x0000000000002520 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_info 0x0000000000003a6c 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_info 0x000000000000406f 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_info 0x00000000000040db 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_info 0x0000000000004147 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_info 0x00000000000041b3 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_info 0x00000000000045c5 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_info 0x0000000000004c27 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_info 0x0000000000004fb3 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_info 0x0000000000005926 0x85 ../../LUFA/Drivers/USB/Core/Events.o - .debug_info 0x00000000000059ab 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_info 0x0000000000005a17 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_info 0x0000000000005c5c 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_info 0x00000000000061c8 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_info 0x0000000000006e03 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_info 0x000000000000747d 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_info 0x0000000000007c47 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_info 0x0000000000008108 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_info 0x0000000000008fc4 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_info 0x0000000000009030 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_info 0x000000000000909c 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_info 0x0000000000009108 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_info 0x0000000000009174 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_info 0x00000000000091e0 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_info 0x000000000000924c 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_info 0x00000000000092b8 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_info 0x0000000000009324 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - *(.gnu.linkonce.wi.*) - -.debug_abbrev 0x0000000000000000 0x21fc - *(.debug_abbrev) - .debug_abbrev 0x0000000000000000 0x473 USBtoSerial.o - .debug_abbrev 0x0000000000000473 0x153 Descriptors.o - .debug_abbrev 0x00000000000005c6 0x1ec ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_abbrev 0x00000000000007b2 0x7d ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_abbrev 0x000000000000082f 0x18b ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_abbrev 0x00000000000009ba 0x1ee ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_abbrev 0x0000000000000ba8 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_abbrev 0x0000000000000bd2 0x2a ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_abbrev 0x0000000000000bfc 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_abbrev 0x0000000000000c26 0x14d ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_abbrev 0x0000000000000d73 0x1e2 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_abbrev 0x0000000000000f55 0x148 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_abbrev 0x000000000000109d 0x20b ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_abbrev 0x00000000000012a8 0x41 ../../LUFA/Drivers/USB/Core/Events.o - .debug_abbrev 0x00000000000012e9 0x2a ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_abbrev 0x0000000000001313 0x14b ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_abbrev 0x000000000000145e 0x160 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_abbrev 0x00000000000015be 0x2ec ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_abbrev 0x00000000000018aa 0x1b5 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_abbrev 0x0000000000001a5f 0x205 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_abbrev 0x0000000000001c64 0x16c ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_abbrev 0x0000000000001dd0 0x2b2 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_abbrev 0x0000000000002082 0x2a ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_abbrev 0x00000000000020ac 0x2a ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_abbrev 0x00000000000020d6 0x2a ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_abbrev 0x0000000000002100 0x2a ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_abbrev 0x000000000000212a 0x2a ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_abbrev 0x0000000000002154 0x2a ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_abbrev 0x000000000000217e 0x2a ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_abbrev 0x00000000000021a8 0x2a ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_abbrev 0x00000000000021d2 0x2a ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - -.debug_line 0x0000000000000000 0x7d90 - *(.debug_line) - .debug_line 0x0000000000000000 0x17ad USBtoSerial.o - .debug_line 0x00000000000017ad 0x1d9 Descriptors.o - .debug_line 0x0000000000001986 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_line 0x00000000000020e8 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_line 0x0000000000002247 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_line 0x0000000000003cc7 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_line 0x0000000000004268 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_line 0x00000000000042a6 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_line 0x00000000000042e4 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_line 0x0000000000004322 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_line 0x0000000000004634 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_line 0x0000000000004b8e 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_line 0x0000000000004df7 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_line 0x0000000000005399 0x80 ../../LUFA/Drivers/USB/Core/Events.o - .debug_line 0x0000000000005419 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_line 0x0000000000005457 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_line 0x0000000000005605 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_line 0x0000000000005ac3 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_line 0x0000000000006485 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_line 0x0000000000006a48 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_line 0x000000000000700e 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_line 0x00000000000073ca 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_line 0x0000000000007b62 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_line 0x0000000000007ba0 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_line 0x0000000000007bde 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_line 0x0000000000007c1c 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_line 0x0000000000007c5a 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_line 0x0000000000007c98 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_line 0x0000000000007cd6 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_line 0x0000000000007d14 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_line 0x0000000000007d52 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - -.debug_frame 0x0000000000000000 0x980 - *(.debug_frame) - .debug_frame 0x0000000000000000 0x340 USBtoSerial.o - .debug_frame 0x0000000000000340 0x20 Descriptors.o - .debug_frame 0x0000000000000360 0x50 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_frame 0x00000000000003b0 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_frame 0x00000000000003d0 0x170 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_frame 0x0000000000000540 0x60 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_frame 0x00000000000005a0 0x40 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_frame 0x00000000000005e0 0x50 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_frame 0x0000000000000630 0x50 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_frame 0x0000000000000680 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_frame 0x00000000000006a0 0x20 ../../LUFA/Drivers/USB/Core/Events.o - .debug_frame 0x00000000000006c0 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_frame 0x00000000000006e0 0x40 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_frame 0x0000000000000720 0x110 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_frame 0x0000000000000830 0x40 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_frame 0x0000000000000870 0x40 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_frame 0x00000000000008b0 0x60 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_frame 0x0000000000000910 0x70 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - -.debug_str 0x0000000000000000 0x3dc5 - *(.debug_str) - .debug_str 0x0000000000000000 0xb07 USBtoSerial.o - 0xbbf (size before relaxing) - .debug_str 0x0000000000000b07 0x8ba Descriptors.o - 0x9e5 (size before relaxing) - .debug_str 0x00000000000013c1 0x47c ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - 0x5c5 (size before relaxing) - .debug_str 0x000000000000183d 0x77 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - 0x128 (size before relaxing) - .debug_str 0x00000000000018b4 0x592 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x73e (size before relaxing) - .debug_str 0x0000000000001e46 0x212 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x53a (size before relaxing) - .debug_str 0x0000000000002058 0x2d ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - 0xd0 (size before relaxing) - .debug_str 0x0000000000002085 0x33 ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - 0xd6 (size before relaxing) - .debug_str 0x00000000000020b8 0x2d ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - 0xd0 (size before relaxing) - .debug_str 0x00000000000020e5 0x209 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x3f9 (size before relaxing) - .debug_str 0x00000000000022ee 0x113 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x3fb (size before relaxing) - .debug_str 0x0000000000002401 0x227 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - 0x310 (size before relaxing) - .debug_str 0x0000000000002628 0x3b2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x82e (size before relaxing) - .debug_str 0x00000000000029da 0x34 ../../LUFA/Drivers/USB/Core/Events.o - 0xd7 (size before relaxing) - .debug_str 0x0000000000002a0e 0x2e ../../LUFA/Drivers/USB/Core/HostStandardReq.o - 0xd1 (size before relaxing) - .debug_str 0x0000000000002a3c 0x4e ../../LUFA/Drivers/USB/Core/USBTask.o - 0x27e (size before relaxing) - .debug_str 0x0000000000002a8a 0x239 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - 0x4fe (size before relaxing) - .debug_str 0x0000000000002cc3 0x2fa ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x8b2 (size before relaxing) - .debug_str 0x0000000000002fbd 0x1ed ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - 0x52d (size before relaxing) - .debug_str 0x00000000000031aa 0x23d ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - 0x68e (size before relaxing) - .debug_str 0x00000000000033e7 0x118 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - 0x515 (size before relaxing) - .debug_str 0x00000000000034ff 0x6e8 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - 0xbc6 (size before relaxing) - .debug_str 0x0000000000003be7 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - 0xe1 (size before relaxing) - .debug_str 0x0000000000003c25 0x33 ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - 0xd6 (size before relaxing) - .debug_str 0x0000000000003c58 0x31 ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - 0xd4 (size before relaxing) - .debug_str 0x0000000000003c89 0x31 ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - 0xd4 (size before relaxing) - .debug_str 0x0000000000003cba 0x39 ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - 0xdc (size before relaxing) - .debug_str 0x0000000000003cf3 0x32 ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - 0xd5 (size before relaxing) - .debug_str 0x0000000000003d25 0x35 ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - 0xd8 (size before relaxing) - .debug_str 0x0000000000003d5a 0x33 ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - 0xd6 (size before relaxing) - .debug_str 0x0000000000003d8d 0x38 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - 0xdb (size before relaxing) - -.debug_loc 0x0000000000000000 0x4b8d - *(.debug_loc) - .debug_loc 0x0000000000000000 0xaf1 USBtoSerial.o - .debug_loc 0x0000000000000af1 0xd3 Descriptors.o - .debug_loc 0x0000000000000bc4 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_loc 0x0000000000001453 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_loc 0x0000000000002dd5 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_loc 0x0000000000003165 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_loc 0x00000000000032f5 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_loc 0x00000000000035b1 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_loc 0x00000000000037db 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_loc 0x0000000000003802 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_loc 0x000000000000396f 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_loc 0x0000000000003e9a 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_loc 0x00000000000040e3 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_loc 0x0000000000004235 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_loc 0x000000000000442b 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - -.debug_macinfo - *(.debug_macinfo) -OUTPUT(USBtoSerial.elf elf32-avr) -LOAD linker stubs - -.debug_pubtypes - 0x0000000000000000 0x1111 - .debug_pubtypes - 0x0000000000000000 0x15a USBtoSerial.o - .debug_pubtypes - 0x000000000000015a 0x1f1 Descriptors.o - .debug_pubtypes - 0x000000000000034b 0x145 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_pubtypes - 0x0000000000000490 0x1e ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_pubtypes - 0x00000000000004ae 0xab ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_pubtypes - 0x0000000000000559 0x9e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_pubtypes - 0x00000000000005f7 0x12 ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_pubtypes - 0x0000000000000609 0x12 ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_pubtypes - 0x000000000000061b 0x12 ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_pubtypes - 0x000000000000062d 0x68 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_pubtypes - 0x0000000000000695 0x58 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_pubtypes - 0x00000000000006ed 0xb4 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_pubtypes - 0x00000000000007a1 0xd7 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_pubtypes - 0x0000000000000878 0x12 ../../LUFA/Drivers/USB/Core/Events.o - .debug_pubtypes - 0x000000000000088a 0x12 ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_pubtypes - 0x000000000000089c 0x5c ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_pubtypes - 0x00000000000008f8 0xb2 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_pubtypes - 0x00000000000009aa 0x151 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_pubtypes - 0x0000000000000afb 0xc6 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_pubtypes - 0x0000000000000bc1 0x132 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_pubtypes - 0x0000000000000cf3 0xe0 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_pubtypes - 0x0000000000000dd3 0x29c ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_pubtypes - 0x000000000000106f 0x12 ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_pubtypes - 0x0000000000001081 0x12 ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_pubtypes - 0x0000000000001093 0x12 ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_pubtypes - 0x00000000000010a5 0x12 ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_pubtypes - 0x00000000000010b7 0x12 ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_pubtypes - 0x00000000000010c9 0x12 ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_pubtypes - 0x00000000000010db 0x12 ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_pubtypes - 0x00000000000010ed 0x12 ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_pubtypes - 0x00000000000010ff 0x12 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - -.debug_ranges 0x0000000000000000 0x868 - .debug_ranges 0x0000000000000000 0x1d0 USBtoSerial.o - .debug_ranges 0x00000000000001d0 0x10 Descriptors.o - .debug_ranges 0x00000000000001e0 0x100 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_ranges 0x00000000000002e0 0x10 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_ranges 0x00000000000002f0 0x298 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_ranges 0x0000000000000588 0xa8 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_ranges 0x0000000000000630 0x20 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_ranges 0x0000000000000650 0x28 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_ranges 0x0000000000000678 0x28 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_ranges 0x00000000000006a0 0x10 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_ranges 0x00000000000006b0 0x10 ../../LUFA/Drivers/USB/Core/Events.o - .debug_ranges 0x00000000000006c0 0x10 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_ranges 0x00000000000006d0 0x20 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_ranges 0x00000000000006f0 0x88 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_ranges 0x0000000000000778 0x20 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_ranges 0x0000000000000798 0x20 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_ranges 0x00000000000007b8 0x30 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_ranges 0x00000000000007e8 0x80 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - -Cross Reference Table - -Symbol File -Audio_Device_ConfigureEndpoints ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o -Audio_Device_Event_Stub ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o -Audio_Device_ProcessControlRequest ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o -CALLBACK_Audio_Device_GetSetEndpointProperty ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o -CALLBACK_Audio_Device_GetSetInterfaceProperty ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o -CALLBACK_HIDParser_FilterHIDReportItem ../../LUFA/Drivers/USB/Class/Common/HIDParser.o -CALLBACK_HID_Device_CreateHIDReport ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o -CALLBACK_HID_Device_ProcessHIDReport ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o -CALLBACK_MS_Device_SCSICommandReceived ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o -CALLBACK_USB_GetDescriptor Descriptors.o - ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o -CDC_Device_BytesReceived ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -CDC_Device_ConfigureEndpoints ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - USBtoSerial.o -CDC_Device_CreateBlockingStream ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -CDC_Device_CreateStream ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -CDC_Device_Event_Stub ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -CDC_Device_Flush ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -CDC_Device_ProcessControlRequest ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - USBtoSerial.o -CDC_Device_ReceiveByte ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - USBtoSerial.o -CDC_Device_SendByte ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - USBtoSerial.o -CDC_Device_SendControlLineStateChange ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -CDC_Device_SendData ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -CDC_Device_SendString ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -CDC_Device_USBTask ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - USBtoSerial.o -ConfigurationDescriptor Descriptors.o -DeviceDescriptor Descriptors.o -EVENT_Audio_Device_StreamStartStop ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o -EVENT_CDC_Device_BreakSent ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -EVENT_CDC_Device_ControLineStateChanged ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -EVENT_CDC_Device_LineEncodingChanged USBtoSerial.o -EVENT_USB_Device_ConfigurationChanged USBtoSerial.o - ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o -EVENT_USB_Device_Connect USBtoSerial.o - ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o -EVENT_USB_Device_ControlRequest USBtoSerial.o - ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o -EVENT_USB_Device_Disconnect USBtoSerial.o - ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o -EVENT_USB_Device_Reset ../../LUFA/Drivers/USB/Core/Events.o - ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o -EVENT_USB_Device_StartOfFrame ../../LUFA/Drivers/USB/Core/Events.o - ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o -EVENT_USB_Device_Suspend ../../LUFA/Drivers/USB/Core/Events.o -EVENT_USB_Device_WakeUp ../../LUFA/Drivers/USB/Core/Events.o -Endpoint_ClearEndpoints ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o -Endpoint_ClearStatusStage ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o -Endpoint_ConfigureEndpointTable ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o -Endpoint_ConfigureEndpoint_Prv ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o -Endpoint_Discard_Stream ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Null_Stream ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Read_Control_EStream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Read_Control_EStream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Read_Control_Stream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Read_Control_Stream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o -Endpoint_Read_EStream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Read_EStream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Read_Stream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Read_Stream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o -Endpoint_WaitUntilReady ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_Control_EStream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_Control_EStream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_Control_PStream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_Control_PStream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o -Endpoint_Write_Control_Stream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_Control_Stream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o -Endpoint_Write_EStream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_EStream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_PStream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_PStream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_Stream_BE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -Endpoint_Write_Stream_LE ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o -HID_Device_ConfigureEndpoints ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o -HID_Device_ProcessControlRequest ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o -HID_Device_USBTask ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o -LanguageString Descriptors.o -MIDI_Device_ConfigureEndpoints ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o -MIDI_Device_Flush ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o -MIDI_Device_ReceiveEventPacket ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o -MIDI_Device_SendEventPacket ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o -MIDI_Device_USBTask ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o -MS_Device_ConfigureEndpoints ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o -MS_Device_ProcessControlRequest ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o -MS_Device_USBTask ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o -ManufacturerString Descriptors.o -ProductString Descriptors.o -RNDIS_Device_ConfigureEndpoints ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -RNDIS_Device_IsPacketReceived ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -RNDIS_Device_ProcessControlRequest ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -RNDIS_Device_ReadPacket ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -RNDIS_Device_SendPacket ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -RNDIS_Device_USBTask ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -SetupHardware USBtoSerial.o -USB_ControlRequest ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - ../../LUFA/Drivers/USB/Core/USBTask.o - ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -USB_Device_ConfigurationNumber ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o -USB_Device_CurrentlySelfPowered ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o -USB_Device_ProcessControlRequest ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - ../../LUFA/Drivers/USB/Core/USBTask.o - ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o -USB_Device_RemoteWakeupEnabled ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o -USB_Device_SendRemoteWakeup ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o -USB_Disable ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.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/ConfigDescriptors.o -USB_GetNextDescriptorOfType ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o -USB_GetNextDescriptorOfTypeAfter ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o -USB_GetNextDescriptorOfTypeBefore ../../LUFA/Drivers/USB/Core/ConfigDescriptors.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 - USBtoSerial.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 -USB_SetHIDReportItemInfo ../../LUFA/Drivers/USB/Class/Common/HIDParser.o -USB_USBTask ../../LUFA/Drivers/USB/Core/USBTask.o - ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - USBtoSerial.o -Usb2SerialTask USBtoSerial.o -VirtualSerial_CDC_Interface USBtoSerial.o -__addsf3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - USBtoSerial.o -__addsf3x /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) -__bad_interrupt /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__bss_end /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_clear_bss.o) -__bss_start /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_clear_bss.o) -__cmpsf2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) -__data_end /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) -__data_load_start /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) -__data_start /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) -__divmodhi4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) - USBtoSerial.o -__divsf3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - USBtoSerial.o -__divsf3_pse /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) -__divsf3x /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) -__do_clear_bss /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_clear_bss.o) - ../../LUFA/Drivers/USB/Core/USBTask.o - ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - USBtoSerial.o -__do_copy_data /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - USBtoSerial.o -__eerd_byte_m32u2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eerd_byte_atmega32u2.o) - ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -__eeupd_byte_m32u2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eeupd_byte_atmega32u2.o) - ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -__eeupd_r18_m32u2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(eeupd_byte_atmega32u2.o) -__eqsf2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) -__fixunssfsi /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - USBtoSerial.o -__floatsisf /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) -__floatunsisf /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - USBtoSerial.o -__fp_cmp /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) -__fp_inf /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) -__fp_nan /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) -__fp_pscA /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) -__fp_pscB /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) -__fp_round /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) -__fp_split3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) -__fp_splitA /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) -__fp_szero /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) -__fp_zero /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) -__gesf2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) -__gtsf2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - USBtoSerial.o -__heap_end /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__init /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__lesf2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) -__ltsf2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - USBtoSerial.o -__mulhi3 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulhi3.o) - ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - USBtoSerial.o -__mulhi_const_10 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(mul10.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) -__mulsi3 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_mulsi3.o) - USBtoSerial.o -__nesf2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) -__stack /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__subsf3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - USBtoSerial.o -__udivmodhi4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) - /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) - USBtoSerial.o -__udivmodsi4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - USBtoSerial.o -__vector_1 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_10 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_11 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_12 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_13 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_14 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_15 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_16 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_17 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_18 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_19 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_2 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_20 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_21 USBtoSerial.o - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_23 USBtoSerial.o - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_24 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_25 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_26 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_27 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_28 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_29 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_30 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_31 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_32 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_33 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_34 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_35 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_36 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_37 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_5 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_7 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_9 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_default /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vectors /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -_div /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) -_exit /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) -adb USBtoSerial.o -adb_data_length USBtoSerial.o -adb_werte USBtoSerial.o -atoi /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(atoi.o) - USBtoSerial.o -decode_field USBtoSerial.o -delta_x USBtoSerial.o -delta_y USBtoSerial.o -exit /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -init_leds USBtoSerial.o -init_motors USBtoSerial.o -init_sw USBtoSerial.o -main USBtoSerial.o - /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -memcmp /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcmp.o) - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o -memcpy /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy.o) - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o -memcpy_P /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcpy_P.o) - ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -memset /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memset.o) - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o -motor_step USBtoSerial.o -move_plate USBtoSerial.o -my_uitoa USBtoSerial.o -parse_command USBtoSerial.o -phase_pattern USBtoSerial.o -plate_pos_x USBtoSerial.o -plate_pos_y USBtoSerial.o -pos_report USBtoSerial.o -print_steps_in_mm USBtoSerial.o -set_led0 USBtoSerial.o -set_led1 USBtoSerial.o -set_led2 USBtoSerial.o -set_x USBtoSerial.o -set_y USBtoSerial.o -sign USBtoSerial.o -stringbuffer USBtoSerial.o -strncpy /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(strncpy.o) - USBtoSerial.o -sw0_state USBtoSerial.o -sw1_state USBtoSerial.o -sw2_state USBtoSerial.o -t0ext USBtoSerial.o -t0ovfcount USBtoSerial.o -t0rst USBtoSerial.o -times_ten_pow USBtoSerial.o -touchpad_init USBtoSerial.o -touchpad_read USBtoSerial.o -touchpad_set_abs_mode USBtoSerial.o -touchpad_set_rel_mode_100dpi USBtoSerial.o -touchpad_set_rel_mode_200dpi USBtoSerial.o -uart_print_number USBtoSerial.o -uart_print_number_wlzeros USBtoSerial.o -uart_print_signed_number USBtoSerial.o -uart_putc USBtoSerial.o -uart_puts USBtoSerial.o -x_abs USBtoSerial.o -y_abs USBtoSerial.o -z_pressure USBtoSerial.o diff --git a/firmware/USBtoSerial.o b/firmware/USBtoSerial.o deleted file mode 100644 index 6fb4646d5e8c65c3f272d46631ccf947a093469a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64748 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 diff --git a/firmware/USBtoSerial.sym b/firmware/USBtoSerial.sym deleted file mode 100644 index 853f2c0..0000000 --- a/firmware/USBtoSerial.sym +++ /dev/null @@ -1,408 +0,0 @@ - U CALLBACK_Audio_Device_GetSetEndpointProperty - U CALLBACK_Audio_Device_GetSetInterfaceProperty - U CALLBACK_HIDParser_FilterHIDReportItem - U CALLBACK_HID_Device_CreateHIDReport - U CALLBACK_HID_Device_ProcessHIDReport - U CALLBACK_MS_Device_SCSICommandReceived -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 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__ -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__ -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__ -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__ -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__ -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 DeviceDescriptor -000000aa T ConfigurationDescriptor -000000e8 T LanguageString -000000ec T ManufacturerString -00000106 T ProductString -00000136 T __ctors_end -00000136 T __ctors_start -00000136 T __dtors_end -00000136 T __dtors_start -00000136 W __init -00000136 T __trampolines_end -00000136 T __trampolines_start -00000142 T __do_copy_data -00000158 T __do_clear_bss -00000160 t .do_clear_bss_loop -00000162 t .do_clear_bss_start -0000016e T __bad_interrupt -0000016e W __vector_1 -0000016e W __vector_10 -0000016e W __vector_13 -0000016e W __vector_14 -0000016e W __vector_15 -0000016e W __vector_16 -0000016e W __vector_17 -0000016e W __vector_18 -0000016e W __vector_19 -0000016e W __vector_2 -0000016e W __vector_20 -0000016e W __vector_22 -0000016e W __vector_24 -0000016e W __vector_25 -0000016e W __vector_26 -0000016e W __vector_27 -0000016e W __vector_28 -0000016e W __vector_29 -0000016e W __vector_3 -0000016e W __vector_30 -0000016e W __vector_31 -0000016e W __vector_32 -0000016e W __vector_33 -0000016e W __vector_34 -0000016e W __vector_35 -0000016e W __vector_36 -0000016e W __vector_37 -0000016e W __vector_4 -0000016e W __vector_5 -0000016e W __vector_6 -0000016e W __vector_7 -0000016e W __vector_8 -0000016e W __vector_9 -00000170 t RingBuffer_Insert -000001a6 t RingBuffer_Remove -000001d8 T set_x -0000024e T set_y -000002c2 t RingBuffer_InitBuffer.clone.0 -000002ec T __vector_21 -0000030e T t0ext -0000031e T t0rst -00000326 T adb -000004ff W __stack -00000546 T touchpad_init -00000556 T touchpad_read -00000568 T touchpad_set_rel_mode_100dpi -00000590 T delta_y -000005b0 T delta_x -000005d0 T init_leds -000005d8 T set_led0 -000005ec T set_led1 -000005f8 T set_led2 -00000612 T init_sw -00000620 T sw0_state -00000634 T sw1_state -00000648 T sw2_state -0000065c T Usb2SerialTask -000006f2 T SetupHardware -0000071c T EVENT_USB_Device_Connect -0000071e T EVENT_USB_Device_Disconnect -00000720 T EVENT_USB_Device_ConfigurationChanged -00000728 T EVENT_USB_Device_ControlRequest -00000730 T __vector_23 -00000784 T EVENT_CDC_Device_LineEncodingChanged -00000850 T uart_putc -00000860 T uart_puts -00000886 T my_uitoa -00000952 T sign -0000096a T uart_print_number_wlzeros -00000992 T uart_print_signed_number -000009d8 T init_motors -000009f2 T motor_step -00000a56 T move_plate -00000af8 T print_steps_in_mm -00000b4c T pos_report -00000b72 T parse_command -00000ed0 T main -00000f82 T CALLBACK_USB_GetDescriptor -00000fdc T Endpoint_Write_Control_Stream_LE -00001090 T Endpoint_Write_Control_PStream_LE -00001146 T Endpoint_ConfigureEndpoint_Prv -000011b4 T Endpoint_ConfigureEndpointTable -0000123c T Endpoint_ClearStatusStage -0000127a T Endpoint_WaitUntilReady -000012e0 T USB_ResetInterface -00001350 T USB_Init -00001362 T USB_INT_DisableAllInterrupts -00001368 T USB_INT_ClearAllInterrupts -0000136e T __vector_11 -000014b6 T __vector_12 -0000152c T USB_Device_ProcessControlRequest -000017f0 W EVENT_USB_Device_Reset -000017f0 W EVENT_USB_Device_StartOfFrame -000017f0 W EVENT_USB_Device_Suspend -000017f0 W EVENT_USB_Device_WakeUp -000017f0 T USB_Event_Stub -000017f2 T USB_USBTask -00001828 T CDC_Device_ProcessControlRequest -00001982 T CDC_Device_ConfigureEndpoints -000019ca T CDC_Device_SendByte -00001a24 T CDC_Device_Flush -00001a7e T CDC_Device_USBTask -00001aac T CDC_Device_ReceiveByte -00001b06 T CDC_Device_Event_Stub -00001b06 W EVENT_CDC_Device_BreakSent -00001b06 W EVENT_CDC_Device_ControLineStateChanged -00001b08 T __subsf3 -00001b0a T __addsf3 -00001b2c T __addsf3x -00001bd2 T __cmpsf2 -00001bd2 T __eqsf2 -00001bd2 T __lesf2 -00001bd2 T __ltsf2 -00001bd2 T __nesf2 -00001bda T __divsf3 -00001bf4 T __divsf3x -00001bf8 T __divsf3_pse -00001caa T __fixunssfsi -00001d02 T __floatunsisf -00001d06 T __floatsisf -00001d7c T __fp_cmp -00001dc4 T __fp_inf -00001dd0 T __fp_nan -00001dd6 T __fp_pscA -00001de4 T __fp_pscB -00001df2 T __fp_round -00001e14 T __fp_split3 -00001e24 T __fp_splitA -00001e58 T __fp_zero -00001e5a T __fp_szero -00001e66 T __gesf2 -00001e66 T __gtsf2 -00001e6e T __mulhi3 -00001e72 t __mulhi3_loop -00001e7a t __mulhi3_skip1 -00001e8c t __mulhi3_exit -00001e92 T __udivmodhi4 -00001e9a t __udivmodhi4_loop -00001ea8 t __udivmodhi4_ep -00001eba T __divmodhi4 -00001eba T _div -00001ece t __divmodhi4_neg2 -00001ed4 t __divmodhi4_exit -00001ed6 t __divmodhi4_neg1 -00001ee0 T __udivmodsi4 -00001eec t __udivmodsi4_loop -00001f06 t __udivmodsi4_ep -00001f24 T atoi -00001f5e T strncpy -00001f7c T __mulhi_const_10 -00001f90 T _exit -00001f90 W exit -00001f92 t __stop_program -00001f94 A __data_load_start -00001f94 T _etext -00001fe2 A __data_load_end -00800100 D __data_start -00800128 D VirtualSerial_CDC_Interface -00800143 D phase_pattern -00800147 d CSWTCH.36 -00800149 d CSWTCH.39 -0080014e B __bss_start -0080014e D __data_end -0080014e D _edata -0080014e B plate_pos_x -00800150 B plate_pos_y -00800152 b USBtoUSART_Buffer -0080015e b USBtoUSART_Buffer_Data -008001de b USARTtoUSB_Buffer -008001ea b USARTtoUSB_Buffer_Data -0080026a b nums_found.4257 -0080026b b num_start.4256 -0080026c b curCmdLen.4255 -0080026d b cmdPos.4254 -0080026e b postdot.4253 -00800270 b predot.4252 -00800272 b numbuffer.4251 -00800282 b cmdbuffer.4250 -008002a2 b todo_y.4236 -008002a4 b todo_x.4235 -008002a6 b phase_memory.4217 -008002a8 b y_mem.4090 -008002aa b x_mem.4089 -008002ac b last_pressure.4084 -008002ad B adb_werte -008002b6 B stringbuffer -008002c6 B t0ovfcount -008002c7 B adb_data_length -008002c8 B USB_Device_ConfigurationNumber -008002c9 B USB_Device_CurrentlySelfPowered -008002ca B USB_Device_RemoteWakeupEnabled -008002cb B USB_IsInitialized -008002cc B USB_ControlRequest -008002d4 B __bss_end -008002d4 N _end -00810000 N __eeprom_end diff --git a/firmware/leds.c b/firmware/leds.c index ef20540..e43f97f 100644 --- a/firmware/leds.c +++ b/firmware/leds.c @@ -8,17 +8,17 @@ void init_leds(void) { void set_led0(uint8_t value){ PORTLED0 &= ~(1<>SW0; -} - -uint8_t sw1_state(void){ - return (PINSW1 & (1<>SW1; -} - -uint8_t sw2_state(void){ - return (PINSW2 & (1<>SW2; -} \ No newline at end of file diff --git a/firmware/makefile b/firmware/makefile index e9a153c..6a9fd09 100644 --- a/firmware/makefile +++ b/firmware/makefile @@ -19,7 +19,7 @@ F_USB = $(F_CPU) OPTIMIZATION = s TARGET = USBtoSerial SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) -LUFA_PATH = ../../LUFA +LUFA_PATH = ../LUFA/LUFA-130303/LUFA CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ LD_FLAGS = diff --git a/firmware/makefile~ b/firmware/makefile~ deleted file mode 100644 index b3122e3..0000000 --- a/firmware/makefile~ +++ /dev/null @@ -1,44 +0,0 @@ -# -# LUFA Library -# Copyright (C) Dean Camera, 2013. -# -# dean [at] fourwalledcubicle [dot] com -# www.lufa-lib.org -# -# -------------------------------------- -# LUFA Project Makefile. -# -------------------------------------- - -# Run "make help" for target help. - -MCU = atmega32u2 -ARCH = AVR8 -BOARD = USBKEY -F_CPU = 16000000 -F_USB = $(F_CPU) -OPTIMIZATION = s -TARGET = USBtoSerial -SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) -LUFA_PATH = ../../LUFA -CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -LD_FLAGS = - -# Default target -all: - -# Include LUFA build script makefiles -include $(LUFA_PATH)/Build/lufa_core.mk -include $(LUFA_PATH)/Build/lufa_sources.mk -include $(LUFA_PATH)/Build/lufa_build.mk -include $(LUFA_PATH)/Build/lufa_cppcheck.mk -include $(LUFA_PATH)/Build/lufa_doxygen.mk -include $(LUFA_PATH)/Build/lufa_dfu.mk -include $(LUFA_PATH)/Build/lufa_hid.mk -include $(LUFA_PATH)/Build/lufa_avrdude.mk -include $(LUFA_PATH)/Build/lufa_atprogram.mk - -.PHONY: all - -program: all - - dfu-programmer $(MCU) erase && dfu-programmer $(MCU) flash $(TARGET).hex && dfu-programmer $(MCU) start \ No newline at end of file diff --git a/firmware/pins.h b/firmware/pins.h index 49c1856..e02e6c1 100644 --- a/firmware/pins.h +++ b/firmware/pins.h @@ -1,29 +1,31 @@ -#define X0 2 -#define DDRX0 DDRB -#define PORTX0 PORTB -#define PINX0 PINB -#define X1 3 -#define DDRX1 DDRB -#define PORTX1 PORTB -#define PINX1 PINB + +#define X0 4 +#define DDRX0 DDRC +#define PORTX0 PORTC +#define PINX0 PINC + +#define X1 5 +#define DDRX1 DDRC +#define PORTX1 PORTC +#define PINX1 PINC #define X2 4 -#define DDRX2 DDRB -#define PORTX2 PORTB -#define PINX2 PINB +#define DDRX2 DDRD +#define PORTX2 PORTD +#define PINX2 PIND -#define X3 5 -#define DDRX3 DDRB -#define PORTX3 PORTB -#define PINX3 PINB +#define X3 6 +#define DDRX3 DDRC +#define PORTX3 PORTC +#define PINX3 PINC #define Y0 7 -#define DDRY0 DDRB -#define PORTY0 PORTB -#define PINY0 PINB +#define DDRY0 DDRC +#define PORTY0 PORTC +#define PINY0 PINC #define Y1 6 #define DDRY1 DDRB @@ -31,14 +33,37 @@ #define PINY1 PINB #define Y2 7 -#define DDRY2 DDRC -#define PORTY2 PORTC -#define PINY2 PINC - -#define Y3 6 -#define DDRY3 DDRC -#define PORTY3 PORTC -#define PINY3 PINC +#define DDRY2 DDRB +#define PORTY2 PORTB +#define PINY2 PINB + +#define Y3 5 +#define DDRY3 DDRB +#define PORTY3 PORTB +#define PINY3 PINB + + +#define XEND1 7 +#define DDRXEND1 DDRD +#define PORTXEND1 PORTD +#define PINXEND1 PIND + +#define XEND2 0 +#define DDRXEND2 DDRB +#define PORTXEND2 PORTB +#define PINXEND2 PINB + + +#define YEND1 4 +#define DDRYEND1 DDRB +#define PORTYEND1 PORTB +#define PINYEND1 PINB + +#define YEND2 3 +#define DDRYEND2 DDRB +#define PORTYEND2 PORTB +#define PINYEND2 PINB + diff --git a/firmware/pins.h~ b/firmware/pins.h~ deleted file mode 100644 index a1c5389..0000000 --- a/firmware/pins.h~ +++ /dev/null @@ -1,45 +0,0 @@ - -#define X0 2 -#define DDRX0 DDRB -#define PORTX0 PORTB -#define PINX0 PINB - -#define X1 3 -#define DDRX1 DDRB -#define PORTX1 PORTB -#define PINX1 PINB - -#define X2 4 -#define DDRX2 DDRB -#define PORTX2 PORTB -#define PINX2 PINB - -#define X3 5 -#define DDRX3 DDRB -#define PORTX3 PORTB -#define PINX3 PINB - - -#define Y0 7 -#define DDRY0 DDRB -#define PORTY0 PORTB -#define PINY0 PINB - -#define Y1 6 -#define DDRY1 DDRB -#define PORTY1 PORTB -#define PINY1 PINB - -#define Y2 7 -#define DDRY2 DDRC -#define PORTY2 PORTC -#define PINY2 PINC - -#define Y3 6 -#define DDRY3 DDRC -#define PORTY3 PORTC -#define PINY3 PINC - -#define X 0 -#define Y 1 - diff --git a/firmware/rfm70.c b/firmware/rfm70.c deleted file mode 100644 index eeda2f4..0000000 --- a/firmware/rfm70.c +++ /dev/null @@ -1,533 +0,0 @@ -/* - Diese Library bassiert auf der Arduino RFM70 Library, ich habe sie lediglich so - angepasst, dass man sie auf einem AVR und ohne zusätzliche Libs von Arduino - verwenden kann. - - Es sind nur die wichtigstens Funktionen implementiert! - Bei Fragen oder Anregungen: - Mein Blog: http:://projects.web4clans.com - Meine Email: daniel.weber@web4clans.com - -*/ - -#include "rfm70.h" -/////////////////////////////////////////////////////////////////////////////// -// Register initialization values and command macros // -/////////////////////////////////////////////////////////////////////////////// - -//************ Address definition commands -const uint8_t PROGMEM RFM70_cmd_adrRX0[] = { (0x20|0x0A), 0x34,0x43,0x10,0x10,0x01}; -const uint8_t PROGMEM RFM70_cmd_adrTX[] = { (0x20|0x10), 0x34,0x43,0x10,0x10,0x01}; -const uint8_t PROGMEM RFM70_cmd_adrRX1[] = { (0x20|0x0B), 0x35,0x43,0x10,0x10,0x02}; - -//************ Bank0 register initialization commands - const uint8_t PROGMEM RFM70_bank0Init[][2] = { - // address data - { (0x20|0x00), 0x0F }, //Disable CRC ,CRC=1byte, POWER UP, TX - { (0x20|0x01), 0x3F }, //Enable auto acknowledgement data pipe0-5 - { (0x20|0x02), 0x3F }, //Enable RX Addresses pipe0-5 - { (0x20|0x03), 0x03 }, //RX/TX address field width 5byte - { (0x20|0x04), 0x08 }, //x = 250 ms = 4000ms, y = 15 tries - { (0x20|0x05), 0x17 }, //channel = 0x17 - { (0x20|0x06), 0x3F }, //air data rate-2M,out power 5dbm,setup LNA gain high (0dBM) - { (0x20|0x07), 0x07 }, // - { (0x20|0x08), 0x00 }, // - { (0x20|0x09), 0x00 }, // - { (0x20|0x0C), 0xc3 }, //LSB Addr pipe 2 - { (0x20|0x0D), 0xc4 }, //LSB Addr pipe 3 - { (0x20|0x0E), 0xc5 }, //LSB Addr pipe 4 - { (0x20|0x0F), 0xc6 }, //LSB Addr pipe 5 - { (0x20|0x11), 0x20 }, //Payload len pipe0 - { (0x20|0x12), 0x20 }, //Payload len pipe0 - { (0x20|0x13), 0x20 }, //Payload len pipe0 - { (0x20|0x14), 0x20 }, //Payload len pipe0 - { (0x20|0x15), 0x20 }, //Payload len pipe0 - { (0x20|0x16), 0x20 }, //Payload len pipe0 - { (0x20|0x17), 0x20 }, //Payload len pipe0 - { (0x20|0x1C), 0x3F }, //Enable dynamic payload legth data pipe0-5 - { (0x20|0x1D), 0x07 } //Enables Dynamic Payload Length,Enables Payload with ACK -}; - -//************ Bank1 register initialization commands - const uint8_t PROGMEM RFM70_bank1Init[][5] = { - // address data - { (0x20|0x00), 0x40, 0x4B, 0x01, 0xE2 }, - { (0x20|0x01), 0xC0, 0x4B, 0x00, 0x00 }, - { (0x20|0x02), 0xD0, 0xFC, 0x8C, 0x02 }, - { (0x20|0x03), 0x99, 0x00, 0x39, 0x41 }, - { (0x20|0x04), 0xb9, 0x9E, 0x86, 0x0B }, // b9? f9? - { (0x20|0x05), 0x24, 0x06, 0x7F, 0xA6 }, - { (0x20|0x06), 0x00, 0x00, 0x00, 0x00 }, - { (0x20|0x07), 0x00, 0x00, 0x00, 0x00 }, - { (0x20|0x08), 0x00, 0x00, 0x00, 0x00 }, - { (0x20|0x09), 0x00, 0x00, 0x00, 0x00 }, - { (0x20|0x0a), 0x00, 0x00, 0x00, 0x00 }, - { (0x20|0x0b), 0x00, 0x00, 0x00, 0x00 }, - { (0x20|0x0C), 0x00, 0x12, 0x73, 0x00 }, - { (0x20|0x0D), 0x36, 0xb4, 0x80, 0x00 } -}; - -//************ Bank1 register 14 initialization commands - const uint8_t PROGMEM RFM70_bank1R0EInit[] = { - // address Data... - (0x20|0x0E), 0x41,0x20,0x08,0x04,0x81,0x20,0xCF,0xF7,0xFE,0xFF,0xFF -}; - - -//************ other commands: { , , ... } -const uint8_t PROGMEM RFM70_cmd_switch_cfg[] = { 0x50, 0x53 }; // switch Register Bank -const uint8_t PROGMEM RFM70_cmd_flush_rx[] = { 0xe2, 0x00 }; // flush RX FIFO -const uint8_t PROGMEM RFM70_cmd_flush_tx[] = { 0xe1, 0x00 }; // flush TX FIFO -const uint8_t PROGMEM RFM70_cmd_activate[] = { 0x50, 0x73 }; // Activation command -const uint8_t PROGMEM RFM70_cmd_tog1[]={ (0x20|0x04), 0xd9 | 0x06, 0x9e, 0x86, 0x0b }; //assosciated with set1[4]! -const uint8_t PROGMEM RFM70_cmd_tog2[]={ (0x20|0x04), 0xd9 & ~0x06, 0x9e, 0x86, 0x0b}; //assosciated with set1[4]! - - - -void initSPI(uint8_t clk_div) -{ - // set the pin direction to output - DDR_SPI |= (1< 32 || nr > 5 || en_aa > 1) - return 0; - - // write address - if(nr<2) // full length for rx pipe 0 an 1 - writeRegCmdBuf(RFM70_CMD_WRITE_REG | (RFM70_REG_RX_ADDR_P0 + nr), adr, sizeof(adr)); - else // only LSB for pipes 2..5 - writeRegVal(RFM70_CMD_WRITE_REG | (RFM70_REG_RX_ADDR_P0 + nr), adr[0]); //ODO:check this - - // static - if (plLen) { - // set payload len - writeRegVal(RFM70_CMD_WRITE_REG | (RFM70_REG_RX_PW_P0 + nr), plLen); - // set EN_AA bit - tmp = readRegVal(RFM70_REG_EN_AA); - if (en_aa) - tmp |= 1 << nr; - else - tmp &= ~(1 << nr); - writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_EN_AA, tmp); - // clear DPL bit - tmp = readRegVal(RFM70_REG_DYNPD); - tmp &= ~(1 << nr); - writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_DYNPD, tmp); - // set Enable pipe bit - enableRxPipe(nr); - } - // dynamic - else - { - // set payload len to default - writeRegVal(RFM70_CMD_WRITE_REG | (RFM70_REG_RX_PW_P0 + nr), 0x20); - // set EN_AA bit - tmp = readRegVal(RFM70_REG_EN_AA); - tmp |= 1 << nr; - writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_EN_AA, tmp); - // set DPL bit - tmp = readRegVal(RFM70_REG_DYNPD); - tmp |= 1 << nr; - writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_DYNPD, tmp); - // set Enable pipe bit - enableRxPipe(nr); - } - return 1; -} - -void enableRxPipe(uint8_t pipe_nr) -{ - uint8_t nr = pipe_nr - 1; - if (nr > 5) return; - uint8_t tmp; - // set Enable pipe bit - tmp = readRegVal(RFM70_REG_EN_RXADDR); - tmp |= 1 << nr; - writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_EN_RXADDR, tmp); -} - -void disableRxPipe(uint8_t pipe_nr) -{ - uint8_t nr = pipe_nr - 1; - if (nr > 5) return; - uint8_t tmp; - // set Enable pipe bit - tmp = readRegVal(RFM70_REG_EN_RXADDR); - tmp &= ~(1 << nr); - writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_EN_RXADDR, tmp); - -} - -void configTxPipe(uint8_t * adr, uint8_t pltype) -{ - // write TX address - writeRegCmdBuf(RFM70_CMD_WRITE_REG | RFM70_REG_TX_ADDR, adr, sizeof(adr)); - // write RX0 address - writeRegCmdBuf(RFM70_CMD_WRITE_REG | RFM70_REG_RX_ADDR_P0, adr, sizeof(adr)); - // set static or dynamic payload - uint8_t tmp; - tmp = readRegVal(RFM70_REG_DYNPD); - if(pltype == TX_DPL) // dynamic - tmp |= 1; - else - tmp &= ~(1 << 0); - writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_DYNPD, tmp); -} - -uint8_t sendPayload(uint8_t * payload, uint8_t len, uint8_t toAck) // choose 0=nAck, 1=AckRequest -{ - - // check TX_FIFO - uint8_t status; - - status = readRegVal(RFM70_REG_FIFO_STATUS); - - if (status & RFM70_FIFO_STATUS_TX_FULL) - { - debug(RFM70_DEBUG_FIFO_FULL); - return 0; - } - - - // send payload - PORT_SPI &=~ (1< 3) return; - uint8_t tmp = readRegVal(RFM70_REG_RF_SETUP); - tmp &= 0xF9; - tmp |= pwr << 1; - writeRegVal(RFM70_CMD_WRITE_REG | RFM70_REG_RF_SETUP, tmp); -} - - - - -void debug(uint8_t token) -{ - switch(token) - { - case 0x01: - //uart_puts("rfm error: the reseive chip id is invalid!\n"); - break; - - case 0x02: - //uart_puts("rfm error: the fifo is full!\n"); - break; - } -} - -void spiSetClockDivider(uint8_t rate) -{ - SPCR = (SPCR & ~SPI_CLOCK_MASK) | (rate & SPI_CLOCK_MASK); - SPSR = (SPSR & ~SPI_2XCLOCK_MASK) | ((rate >> 2) & SPI_2XCLOCK_MASK); -} - - diff --git a/firmware/rfm70.h b/firmware/rfm70.h deleted file mode 100644 index 5e76657..0000000 --- a/firmware/rfm70.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - Diese Library bassiert auf der Arduino RFM70 Library, ich habe sie lediglich so - angepasst, dass man sie auf einem AVR und ohne zusätzliche Libs von Arduino - verwenden kann. - - Es sind nur die wichtigstens Funktionen implementiert! - Bei Fragen oder Anregungen: - Mein Blog: http:://projects.web4clans.com - Meine Email: daniel.weber@web4clans.com - -*/ - -#include -#include -#include -#include -#include - - -//************************RFM function parameter constants********************************// -#define WITH_ACK 0x01 // parameter for sendPayload(..): send with ack expectation -#define NO_ACK 0x00 // parameter for sendPayload(..): send without ack expectation -#define MODE_PTX 0x00 // parameter for setMode(mode): set to transmitter -#define MODE_PRX 0x01 // parameter for setMode(mode): set to receiver -#define EN_AA 0x01 // parameter for configRxPipe(..): enable pipe auto ack -#define NO_AA 0x00 // parameter for configRxPipe(..): disable pipe auto ack -#define TX_DPL 0x01 // parameter for configTxPipe(..): enable dynamic payload for PTX -#define TX_SPL 0x00 // parameter for configTxPipe(..): enable static payload for PTX -#define CRC0 0x00 // parameter for configCRC(crc): disable CRC -#define CRC1 0x01 // parameter for configCRC(crc): 1 byte CRC -#define CRC2 0x02 // parameter for configCRC(crc): 2 byte CRC -#define MBPS1 0x01 // parameter for configSpeed(speed): 1Mbps -#define MBPS2 0x02 // parameter for configSpeed(speed): 2Mbps -#define DBMM10 0x00 // parameter for confRfPwr(pwr): -10 dBm -#define DBMM5 0x01 // parameter for confRfPwr(pwr): -5 dBm -#define DBM0 0x02 // parameter for confRfPwr(pwr): 0 dBm -#define DBM5 0x03 // parameter for confRfPwr(pwr): +5 dBm -#define ADR_WIDTH3 0x03 // parameter for confAdrWidth(width): 3 byte -#define ADR_WIDTH4 0x03 // parameter for confAdrWidth(width): 4 byte -#define ADR_WIDTH5 0x03 // parameter for confAdrWidth(width): 5 byte -#define PWR_OFF 0x00 // parameter for setPower(pwr): off -#define PWR_ON 0x01 // parameter for setPower(pwr): on - - -//************************RFM Definitions************************************************// -#define RFM70_MAX_PACKET_LEN 32// max value is 32 -#define RFM70_BEGIN_INIT_WAIT_MS 3000 // pause before Init Registers -#define RFM70_END_INIT_WAIT_MS 100 // pause after init registers -#define RFM70_CS_DELAY 0 // wait ms after CS pin state change default 0 - -//************************RFM COMMAND and REGISTER****************************************// -// SPI(RFM70) commands -#define RFM70_CMD_READ_REG 0x00 // Define read command to register -#define RFM70_CMD_WRITE_REG 0x20 // Define write command to register -#define RFM70_CMD_RD_RX_PLOAD 0x61 // Define RX payload command -#define RFM70_CMD_WR_TX_PLOAD 0xA0 // Define TX payload command -#define RFM70_CMD_FLUSH_TX 0xE1 // Define flush TX register command -#define RFM70_CMD_FLUSH_RX 0xE2 // Define flush RX register command -#define RFM70_CMD_REUSE_TX_PL 0xE3 // Define reuse TX payload register command -#define RFM70_CMD_W_TX_PAYLOAD_NOACK 0xb0 // Define TX payload NOACK command -#define RFM70_CMD_W_ACK_PAYLOAD 0xa8 // Define Write ack command -#define RFM70_CMD_ACTIVATE 0x50 // Define feature activation command -#define RFM70_CMD_RX_PL_WID 0x60 // Define received payload width command -#define RFM70_CMD_NOP_NOP 0xFF // Define No Operation, might be used to read status register - -// SPI(RFM70) registers(addresses) -#define RFM70_REG_CONFIG 0x00 // 'Config' register address -#define RFM70_REG_EN_AA 0x01 // 'Enable Auto Acknowledgment' register address -#define RFM70_REG_EN_RXADDR 0x02 // 'Enabled RX addresses' register address -#define RFM70_REG_SETUP_AW 0x03 // 'Setup address width' register address -#define RFM70_REG_SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address -#define RFM70_REG_RF_CH 0x05 // 'RF channel' register address -#define RFM70_REG_RF_SETUP 0x06 // 'RF setup' register address -#define RFM70_REG_STATUS 0x07 // 'Status' register address -#define RFM70_REG_OBSERVE_TX 0x08 // 'Observe TX' register address -#define RFM70_REG_CD 0x09 // 'Carrier Detect' register address -#define RFM70_REG_RX_ADDR_P0 0x0A // 'RX address pipe0' register address -#define RFM70_REG_RX_ADDR_P1 0x0B // 'RX address pipe1' register address -#define RFM70_REG_RX_ADDR_P2 0x0C // 'RX address pipe2' register address -#define RFM70_REG_RX_ADDR_P3 0x0D // 'RX address pipe3' register address -#define RFM70_REG_RX_ADDR_P4 0x0E // 'RX address pipe4' register address -#define RFM70_REG_RX_ADDR_P5 0x0F // 'RX address pipe5' register address -#define RFM70_REG_TX_ADDR 0x10 // 'TX address' register address -#define RFM70_REG_RX_PW_P0 0x11 // 'RX payload width, pipe0' register address -#define RFM70_REG_RX_PW_P1 0x12 // 'RX payload width, pipe1' register address -#define RFM70_REG_RX_PW_P2 0x13 // 'RX payload width, pipe2' register address -#define RFM70_REG_RX_PW_P3 0x14 // 'RX payload width, pipe3' register address -#define RFM70_REG_RX_PW_P4 0x15 // 'RX payload width, pipe4' register address -#define RFM70_REG_RX_PW_P5 0x16 // 'RX payload width, pipe5' register address -#define RFM70_REG_FIFO_STATUS 0x17 // 'FIFO Status Register' register address -#define RFM70_REG_DYNPD 0x1c // 'Enable dynamic payload length' register address -#define RFM70_REG_FEATURE 0x1d // 'Feature' register address - -//************************RFM Debug Tokens******************************************// -#define RFM70_DEBUG_WRONG_CHIP_ID 0x01 -#define RFM70_DEBUG_FIFO_FULL 0x02 - -//************************RFM SPI Constants****************************************// -#define RFM77_SPI_CLOCK_DIV4 0x00 -#define RFM77_SPI_CLOCK_DIV16 0x01 -//#define RFM77_SPI_CLOCK_DIV64 0x02 -#define RFM77_SPI_CLOCK_DIV128 0x03 -#define RFM77_SPI_CLOCK_DIV2 0x04 -#define RFM77_SPI_CLOCK_DIV8 0x05 -#define RFM77_SPI_CLOCK_DIV32 0x06 -#define RFM77_SPI_CLOCK_DIV64 0x07 -#define SPI_CLOCK_MASK 0x03 // SPR1 = bit 1, SPR0 = bit 0 on SPCR -#define SPI_2XCLOCK_MASK 0x01 // SPI2X = bit 0 on SPSR - -#define RFM77_DEFAULT_SPI_CLOCK_DIV RFM77_SPI_CLOCK_DIV2 - - -//interrupt status -#define RFM70_IRQ_STATUS_RX_DR 0x40 // Status bit RX_DR IRQ -#define RFM70_IRQ_STATUS_TX_DS 0x20 // Status bit TX_DS IRQ -#define RFM70_IRQ_STATUS_MAX_RT 0x10 // Status bit MAX_RT IRQ - -#define RFM70_IRQ_STATUS_TX_FULL 0x01 - - -#define RFM70_PIN_PRIM_RX 0x01 -#define RFM70_PIN_POWER 0x02 - -//FIFO_STATUS -#define RFM70_FIFO_STATUS_TX_REUSE 0x40 -#define RFM70_FIFO_STATUS_TX_FULL 0x20 -#define RFM70_FIFO_STATUS_TX_EMPTY 0x10 - -#define RFM70_FIFO_STATUS_RX_FULL 0x02 -#define RFM70_FIFO_STATUS_RX_EMPTY 0x01 - -// PIN SETUP - -#define DDR_SPI DDRB -#define PORT_SPI PORTB -#define CE PB4 -#define CSN PB0 -#define SCK PB1 -#define MISO PB3 -#define MOSI PB2 -#define IRQ PB5 - -void initSPI(uint8_t clk_div); -void initHardware(uint8_t irq); -void initRegisters(void); -uint8_t transmitSPI(uint8_t val); -uint8_t readRegVal(uint8_t cmd); -uint8_t writeRegVal(uint8_t cmd, uint8_t val); -uint8_t writeRegPgmBuf(uint8_t * cmdbuf, uint8_t len); -void readRegBuf(uint8_t reg, uint8_t * buf, uint8_t len); -void selectBank(uint8_t bank); -void setModeTX(void); -void setModeRX(void); -void setMode(uint8_t mode); -uint8_t getMode(void); -void setChannel(uint8_t cnum); -uint8_t getChannel(void); -uint8_t configRxPipe(uint8_t pipe_nr, uint8_t * adr, uint8_t plLen, uint8_t en_aa); -void enableRxPipe(uint8_t pipe_nr); -void debug(uint8_t token); -void setModeRX(void); -void spiSetClockDivider(uint8_t rate); -void setBegin(uint8_t irq, uint8_t clk_div); -void Begin(void); -uint8_t writeRegCmdBuf(uint8_t cmd, uint8_t * buf, uint8_t len); -void disableRxPipe(uint8_t pipe_nr); -void configTxPipe(uint8_t * adr, uint8_t pltype); -void flushTxFIFO(); -void flushRxFIFO(); -uint8_t receivePayload(uint8_t *payload); -uint8_t sendPayload(uint8_t * payload, uint8_t len, uint8_t toAck); -void configRfPower(uint8_t pwr); -- 2.43.0