diff options
Diffstat (limited to 'firmware/VirtualSerial.lss')
-rw-r--r-- | firmware/VirtualSerial.lss | 3526 |
1 files changed, 0 insertions, 3526 deletions
diff --git a/firmware/VirtualSerial.lss b/firmware/VirtualSerial.lss deleted file mode 100644 index c2bb1c1..0000000 --- a/firmware/VirtualSerial.lss +++ /dev/null @@ -1,3526 +0,0 @@ - -VirtualSerial.elf: file format elf32-avr - -Sections: -Idx Name Size VMA LMA File off Algn - 0 .data 000000d8 00800100 00000ece 00000f62 2**0 - CONTENTS, ALLOC, LOAD, DATA - 1 .text 00000ece 00000000 00000000 00000094 2**1 - CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 0000003e 008001d8 008001d8 0000103a 2**0 - ALLOC - 3 .stab 00001080 00000000 00000000 0000103c 2**2 - CONTENTS, READONLY, DEBUGGING - 4 .stabstr 000009a6 00000000 00000000 000020bc 2**0 - CONTENTS, READONLY, DEBUGGING - 5 .debug_aranges 00000438 00000000 00000000 00002a62 2**0 - CONTENTS, READONLY, DEBUGGING - 6 .debug_pubnames 00000b8d 00000000 00000000 00002e9a 2**0 - CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00006c93 00000000 00000000 00003a27 2**0 - CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 00001dd1 00000000 00000000 0000a6ba 2**0 - CONTENTS, READONLY, DEBUGGING - 9 .debug_line 00005218 00000000 00000000 0000c48b 2**0 - CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000650 00000000 00000000 000116a4 2**2 - CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00002b5d 00000000 00000000 00011cf4 2**0 - CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00002be2 00000000 00000000 00014851 2**0 - CONTENTS, READONLY, DEBUGGING - 13 .debug_ranges 00000458 00000000 00000000 00017433 2**0 - CONTENTS, READONLY, DEBUGGING - -Disassembly of section .text: - -00000000 <__vectors>: - USB_Init(); -} - -/** Checks for changes in the position of the board joystick, sending strings to the host upon each change. */ -void CheckPinStatus(void) -{ - 0: 81 c0 rjmp .+258 ; 0x104 <__ctors_end> - - return Endpoint_IsConfigured(); -} - -void Endpoint_ClearEndpoints(void) -{ - 2: 00 00 nop - #if defined(USB_CAN_BE_BOTH) - USB_CurrentMode = USB_MODE_None; - #endif - - USB_IsInitialized = false; -} - 4: 9a c0 rjmp .+308 ; 0x13a <__bad_interrupt> -uint8_t TEMPLATE_FUNC_NAME (const void* Buffer, - uint16_t Length) -{ - 6: 00 00 nop - - return ENDPOINT_READYWAIT_NoError; -} - -uint16_t CDC_Device_BytesReceived(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - 8: 98 c0 rjmp .+304 ; 0x13a <__bad_interrupt> - a: 00 00 nop - c: 96 c0 rjmp .+300 ; 0x13a <__bad_interrupt> - e: 00 00 nop - 10: 94 c0 rjmp .+296 ; 0x13a <__bad_interrupt> - 12: 00 00 nop - 14: 92 c0 rjmp .+292 ; 0x13a <__bad_interrupt> - 16: 00 00 nop - 18: 90 c0 rjmp .+288 ; 0x13a <__bad_interrupt> - 1a: 00 00 nop - 1c: 8e c0 rjmp .+284 ; 0x13a <__bad_interrupt> - 1e: 00 00 nop - 20: 8c c0 rjmp .+280 ; 0x13a <__bad_interrupt> - 22: 00 00 nop - 24: 8a c0 rjmp .+276 ; 0x13a <__bad_interrupt> - 26: 00 00 nop - 28: 88 c0 rjmp .+272 ; 0x13a <__bad_interrupt> - 2a: 00 00 nop - 2c: 80 c2 rjmp .+1280 ; 0x52e <__vector_11> - 2e: 00 00 nop - 30: 84 c0 rjmp .+264 ; 0x13a <__bad_interrupt> - 32: 00 00 nop - 34: 82 c0 rjmp .+260 ; 0x13a <__bad_interrupt> - 36: 00 00 nop - 38: 80 c0 rjmp .+256 ; 0x13a <__bad_interrupt> - 3a: 00 00 nop - 3c: 93 c0 rjmp .+294 ; 0x164 <__vector_15> - 3e: 00 00 nop - 40: 7c c0 rjmp .+248 ; 0x13a <__bad_interrupt> - 42: 00 00 nop - 44: 7a c0 rjmp .+244 ; 0x13a <__bad_interrupt> - 46: 00 00 nop - 48: 78 c0 rjmp .+240 ; 0x13a <__bad_interrupt> - 4a: 00 00 nop - 4c: 76 c0 rjmp .+236 ; 0x13a <__bad_interrupt> - 4e: 00 00 nop - 50: 74 c0 rjmp .+232 ; 0x13a <__bad_interrupt> - 52: 00 00 nop - 54: 72 c0 rjmp .+228 ; 0x13a <__bad_interrupt> - 56: 00 00 nop - 58: 70 c0 rjmp .+224 ; 0x13a <__bad_interrupt> - 5a: 00 00 nop - 5c: 6e c0 rjmp .+220 ; 0x13a <__bad_interrupt> - 5e: 00 00 nop - 60: 6c c0 rjmp .+216 ; 0x13a <__bad_interrupt> - 62: 00 00 nop - 64: 6a c0 rjmp .+212 ; 0x13a <__bad_interrupt> - 66: 00 00 nop - 68: 68 c0 rjmp .+208 ; 0x13a <__bad_interrupt> - 6a: 00 00 nop - 6c: 66 c0 rjmp .+204 ; 0x13a <__bad_interrupt> - 6e: 00 00 nop - 70: 64 c0 rjmp .+200 ; 0x13a <__bad_interrupt> - 72: 00 00 nop - -00000074 <DeviceDescriptor>: - 74: 12 01 10 01 02 00 00 08 eb 03 6f 20 01 00 01 02 ..........o .... - 84: 00 01 .. - -00000086 <ConfigurationDescriptor>: - 86: 09 02 3e 00 02 01 00 c0 32 09 04 00 00 01 02 02 ..>.....2....... - 96: 01 00 05 24 00 10 01 04 24 02 06 05 24 06 00 01 ...$....$...$... - a6: 07 05 82 03 08 00 ff 09 04 01 00 02 0a 00 00 00 ................ - b6: 07 05 04 02 10 00 01 07 05 83 02 10 00 01 .............. - -000000c4 <LanguageString>: - c4: 04 03 09 04 .... - -000000c8 <ManufacturerString>: - c8: 18 03 50 00 49 00 4e 00 47 00 20 00 4c 00 61 00 ..P.I.N.G. .L.a. - d8: 62 00 73 00 00 00 b.s... - -000000de <ProductString>: - de: 26 03 46 00 72 00 69 00 64 00 67 00 65 00 20 00 &.F.r.i.d.g.e. . - ee: 43 00 6f 00 6e 00 74 00 72 00 6f 00 6c 00 6c 00 C.o.n.t.r.o.l.l. - fe: 65 00 72 00 00 00 e.r... - -00000104 <__ctors_end>: - 104: 11 24 eor r1, r1 - 106: 1f be out 0x3f, r1 ; 63 - 108: cf ef ldi r28, 0xFF ; 255 - 10a: d2 e0 ldi r29, 0x02 ; 2 - 10c: de bf out 0x3e, r29 ; 62 - 10e: cd bf out 0x3d, r28 ; 61 - -00000110 <__do_copy_data>: - 110: 11 e0 ldi r17, 0x01 ; 1 - 112: a0 e0 ldi r26, 0x00 ; 0 - 114: b1 e0 ldi r27, 0x01 ; 1 - 116: ee ec ldi r30, 0xCE ; 206 - 118: fe e0 ldi r31, 0x0E ; 14 - 11a: 02 c0 rjmp .+4 ; 0x120 <.do_copy_data_start> - -0000011c <.do_copy_data_loop>: - 11c: 05 90 lpm r0, Z+ - 11e: 0d 92 st X+, r0 - -00000120 <.do_copy_data_start>: - 120: a8 3d cpi r26, 0xD8 ; 216 - 122: b1 07 cpc r27, r17 - 124: d9 f7 brne .-10 ; 0x11c <.do_copy_data_loop> - -00000126 <__do_clear_bss>: - 126: 12 e0 ldi r17, 0x02 ; 2 - 128: a8 ed ldi r26, 0xD8 ; 216 - 12a: b1 e0 ldi r27, 0x01 ; 1 - 12c: 01 c0 rjmp .+2 ; 0x130 <.do_clear_bss_start> - -0000012e <.do_clear_bss_loop>: - 12e: 1d 92 st X+, r1 - -00000130 <.do_clear_bss_start>: - 130: a6 31 cpi r26, 0x16 ; 22 - 132: b1 07 cpc r27, r17 - 134: e1 f7 brne .-8 ; 0x12e <.do_clear_bss_loop> - 136: eb d0 rcall .+470 ; 0x30e <main> - 138: c8 c6 rjmp .+3472 ; 0xeca <_exit> - -0000013a <__bad_interrupt>: - 13a: 62 cf rjmp .-316 ; 0x0 <__vectors> - -0000013c <lock_timer_setup>: - -static volatile uint8_t lock_timer_ticks; - -void lock_timer_setup(void) -{ - OCR1A = 128; - 13c: e0 e8 ldi r30, 0x80 ; 128 - 13e: f0 e0 ldi r31, 0x00 ; 0 - 140: f0 93 89 00 sts 0x0089, r31 - 144: e0 93 88 00 sts 0x0088, r30 - - // CTC mode - TCCR1A = (1 << WGM12); - 148: 88 e0 ldi r24, 0x08 ; 8 - 14a: 80 83 st Z, r24 - - // Prescaler - TCCR1B = (1 << CS12); - 14c: 84 e0 ldi r24, 0x04 ; 4 - 14e: 80 93 81 00 sts 0x0081, r24 - - // Enable interrupt - TIMSK1 = (1 << OCIE1A); - 152: 82 e0 ldi r24, 0x02 ; 2 - 154: 80 93 6f 00 sts 0x006F, r24 -} - 158: 08 95 ret - -0000015a <lock_timer_reset>: - -void lock_timer_reset(void) -{ - lock_timer_ticks = 0; - 15a: 10 92 08 02 sts 0x0208, r1 -} - 15e: 08 95 ret - -00000160 <EVENT_USB_Device_Connect>: - -/** Event handler for the library USB Connection event. */ -void EVENT_USB_Device_Connect(void) -{ -// LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); -} - 160: 08 95 ret - -00000162 <EVENT_USB_Device_Disconnect>: - -/** Event handler for the library USB Disconnection event. */ -void EVENT_USB_Device_Disconnect(void) -{ -// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); -} - 162: 08 95 ret - -00000164 <__vector_15>: -{ - CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); -} - -ISR(TIMER1_COMPA_vect) -{ - 164: 1f 92 push r1 - 166: 0f 92 push r0 - 168: 0f b6 in r0, 0x3f ; 63 - 16a: 0f 92 push r0 - 16c: 11 24 eor r1, r1 - 16e: 8f 93 push r24 - if(PINB & (1 << PB5)) - 170: 1d 99 sbic 0x03, 5 ; 3 - PORTB |= 1 << PB4; - 172: 2c 9a sbi 0x05, 4 ; 5 - - if(lock_timer_ticks == 0xff) - 174: 80 91 08 02 lds r24, 0x0208 - 178: 8f 3f cpi r24, 0xFF ; 255 - 17a: 61 f0 breq .+24 ; 0x194 <__vector_15+0x30> - return; - - if(lock_timer_ticks < 30) - 17c: 80 91 08 02 lds r24, 0x0208 - 180: 8e 31 cpi r24, 0x1E ; 30 - 182: 20 f4 brcc .+8 ; 0x18c <__vector_15+0x28> - { - ++lock_timer_ticks; - 184: 80 91 08 02 lds r24, 0x0208 - 188: 8f 5f subi r24, 0xFF ; 255 - 18a: 02 c0 rjmp .+4 ; 0x190 <__vector_15+0x2c> - return; - } - - PORTB |= 1 << PB4; - 18c: 2c 9a sbi 0x05, 4 ; 5 - lock_timer_ticks = 0xff; - 18e: 8f ef ldi r24, 0xFF ; 255 - 190: 80 93 08 02 sts 0x0208, r24 -} - 194: 8f 91 pop r24 - 196: 0f 90 pop r0 - 198: 0f be out 0x3f, r0 ; 63 - 19a: 0f 90 pop r0 - 19c: 1f 90 pop r1 - 19e: 18 95 reti - -000001a0 <EVENT_USB_Device_ControlRequest>: -} - -/** Event handler for the library USB Control Request reception event. */ -void EVENT_USB_Device_ControlRequest(void) -{ - CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); - 1a0: 80 ec ldi r24, 0xC0 ; 192 - 1a2: 91 e0 ldi r25, 0x01 ; 1 -} - 1a4: ad c5 rjmp .+2906 ; 0xd00 <CDC_Device_ProcessControlRequest> - -000001a6 <EVENT_USB_Device_ConfigurationChanged>: -/** 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); - 1a6: 80 ec ldi r24, 0xC0 ; 192 - 1a8: 91 e0 ldi r25, 0x01 ; 1 - -// LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); -} - 1aa: 61 c5 rjmp .+2754 ; 0xc6e <CDC_Device_ConfigureEndpoints> - -000001ac <SetupHardware>: - -/** Configures the board hardware and chip peripherals for the demo's functionality. */ -void SetupHardware(void) -{ - /* Disable watchdog if enabled by bootloader/fuses */ - MCUSR &= ~(1 << WDRF); - 1ac: 84 b7 in r24, 0x34 ; 52 - 1ae: 87 7f andi r24, 0xF7 ; 247 - 1b0: 84 bf out 0x34, r24 ; 52 - - /* Enable the watchdog timer. */ - wdt_enable(WDTO_1S); - 1b2: 2e e0 ldi r18, 0x0E ; 14 - 1b4: 88 e1 ldi r24, 0x18 ; 24 - 1b6: 90 e0 ldi r25, 0x00 ; 0 - 1b8: 0f b6 in r0, 0x3f ; 63 - 1ba: f8 94 cli - 1bc: a8 95 wdr - 1be: 80 93 60 00 sts 0x0060, r24 - 1c2: 0f be out 0x3f, r0 ; 63 - 1c4: 20 93 60 00 sts 0x0060, r18 -The type of x is clock_div_t. -*/ -void clock_prescale_set(clock_div_t __x) -{ - uint8_t __tmp = _BV(CLKPCE); - __asm__ __volatile__ ( - 1c8: 90 e0 ldi r25, 0x00 ; 0 - 1ca: 80 e8 ldi r24, 0x80 ; 128 - 1cc: 0f b6 in r0, 0x3f ; 63 - 1ce: f8 94 cli - 1d0: 80 93 61 00 sts 0x0061, r24 - 1d4: 90 93 61 00 sts 0x0061, r25 - 1d8: 0f be out 0x3f, r0 ; 63 - /* Disable clock division */ - clock_prescale_set(clock_div_1); - - /* Hardware Initialization */ - USB_Init(); -} - 1da: 9a c1 rjmp .+820 ; 0x510 <USB_Init> - -000001dc <handle_command>: - - for (;;); -} - -void handle_command(const char *buf) -{ - 1dc: cf 93 push r28 - 1de: df 93 push r29 - 1e0: ec 01 movw r28, r24 - if (strcmp("cola", buf) == 0) - 1e2: 8d e1 ldi r24, 0x1D ; 29 - 1e4: 91 e0 ldi r25, 0x01 ; 1 - 1e6: be 01 movw r22, r28 - 1e8: f8 d5 rcall .+3056 ; 0xdda <strcmp> - 1ea: 00 97 sbiw r24, 0x00 ; 0 - 1ec: 39 f4 brne .+14 ; 0x1fc <handle_command+0x20> - { - PORTB ^= 1 << PB5; - 1ee: 85 b1 in r24, 0x05 ; 5 - 1f0: 90 e2 ldi r25, 0x20 ; 32 - 1f2: 89 27 eor r24, r25 - 1f4: 85 b9 out 0x05, r24 ; 5 - fputs("mmm! LED toggeled\r\n", &USBSerialStream); - 1f6: 82 e2 ldi r24, 0x22 ; 34 - 1f8: 91 e0 ldi r25, 0x01 ; 1 - 1fa: 4e c0 rjmp .+156 ; 0x298 <handle_command+0xbc> - } - - else if (strcmp("reboot", buf) == 0 || strcmp("reset", buf) == 0) - 1fc: 86 e3 ldi r24, 0x36 ; 54 - 1fe: 91 e0 ldi r25, 0x01 ; 1 - 200: be 01 movw r22, r28 - 202: eb d5 rcall .+3030 ; 0xdda <strcmp> - 204: 00 97 sbiw r24, 0x00 ; 0 - 206: 31 f0 breq .+12 ; 0x214 <handle_command+0x38> - 208: 8d e3 ldi r24, 0x3D ; 61 - 20a: 91 e0 ldi r25, 0x01 ; 1 - 20c: be 01 movw r22, r28 - 20e: e5 d5 rcall .+3018 ; 0xdda <strcmp> - 210: 00 97 sbiw r24, 0x00 ; 0 - 212: 51 f4 brne .+20 ; 0x228 <handle_command+0x4c> - { - fputs("Rebooting!\r\n", &USBSerialStream); - 214: 80 e1 ldi r24, 0x10 ; 16 - 216: 91 e0 ldi r25, 0x01 ; 1 - 218: 6a ef ldi r22, 0xFA ; 250 - 21a: 71 e0 ldi r23, 0x01 ; 1 - 21c: 13 d6 rcall .+3110 ; 0xe44 <fputs> - running = false; - 21e: 10 92 d7 01 sts 0x01D7, r1 - 222: 10 92 d6 01 sts 0x01D6, r1 - 226: 3b c0 rjmp .+118 ; 0x29e <handle_command+0xc2> - } - - else if (strcmp("toggle", buf) == 0) - 228: 83 e4 ldi r24, 0x43 ; 67 - 22a: 91 e0 ldi r25, 0x01 ; 1 - 22c: be 01 movw r22, r28 - 22e: d5 d5 rcall .+2986 ; 0xdda <strcmp> - 230: 00 97 sbiw r24, 0x00 ; 0 - 232: 51 f4 brne .+20 ; 0x248 <handle_command+0x6c> - { - fputs("Toggling Magnet Lock\r\n", &USBSerialStream); - 234: 8a e4 ldi r24, 0x4A ; 74 - 236: 91 e0 ldi r25, 0x01 ; 1 - 238: 6a ef ldi r22, 0xFA ; 250 - 23a: 71 e0 ldi r23, 0x01 ; 1 - 23c: 03 d6 rcall .+3078 ; 0xe44 <fputs> - PORTB ^= 1 << PB4; - 23e: 85 b1 in r24, 0x05 ; 5 - 240: 90 e1 ldi r25, 0x10 ; 16 - 242: 89 27 eor r24, r25 - 244: 85 b9 out 0x05, r24 ; 5 - 246: 2b c0 rjmp .+86 ; 0x29e <handle_command+0xc2> - } - - else if (strcmp("lock", buf) == 0) - 248: 81 e6 ldi r24, 0x61 ; 97 - 24a: 91 e0 ldi r25, 0x01 ; 1 - 24c: be 01 movw r22, r28 - 24e: c5 d5 rcall .+2954 ; 0xdda <strcmp> - 250: 00 97 sbiw r24, 0x00 ; 0 - 252: 39 f4 brne .+14 ; 0x262 <handle_command+0x86> - { - fputs("status: locked\n", &USBSerialStream); - 254: 86 e6 ldi r24, 0x66 ; 102 - 256: 91 e0 ldi r25, 0x01 ; 1 - 258: 6a ef ldi r22, 0xFA ; 250 - 25a: 71 e0 ldi r23, 0x01 ; 1 - 25c: f3 d5 rcall .+3046 ; 0xe44 <fputs> - PORTB |= 1 << PB4; - 25e: 2c 9a sbi 0x05, 4 ; 5 - 260: 1e c0 rjmp .+60 ; 0x29e <handle_command+0xc2> - } - - else if (strcmp("unlock", buf) == 0) - 262: 86 e7 ldi r24, 0x76 ; 118 - 264: 91 e0 ldi r25, 0x01 ; 1 - 266: be 01 movw r22, r28 - 268: b8 d5 rcall .+2928 ; 0xdda <strcmp> - 26a: 00 97 sbiw r24, 0x00 ; 0 - 26c: 41 f4 brne .+16 ; 0x27e <handle_command+0xa2> - { - fputs("status: unlocked\n", &USBSerialStream); - 26e: 8d e7 ldi r24, 0x7D ; 125 - 270: 91 e0 ldi r25, 0x01 ; 1 - 272: 6a ef ldi r22, 0xFA ; 250 - 274: 71 e0 ldi r23, 0x01 ; 1 - 276: e6 d5 rcall .+3020 ; 0xe44 <fputs> - PORTB &= ~(1 << PB4); - 278: 2c 98 cbi 0x05, 4 ; 5 - lock_timer_reset(); - 27a: 6f df rcall .-290 ; 0x15a <lock_timer_reset> - 27c: 10 c0 rjmp .+32 ; 0x29e <handle_command+0xc2> - } - - else if (strcmp("doorstatus", buf) == 0) - 27e: 8f e8 ldi r24, 0x8F ; 143 - 280: 91 e0 ldi r25, 0x01 ; 1 - 282: be 01 movw r22, r28 - 284: aa d5 rcall .+2900 ; 0xdda <strcmp> - 286: 00 97 sbiw r24, 0x00 ; 0 - 288: 51 f4 brne .+20 ; 0x29e <handle_command+0xc2> - { - if (PINB & (1 << PB5)) - 28a: 1d 9b sbis 0x03, 5 ; 3 - 28c: 03 c0 rjmp .+6 ; 0x294 <handle_command+0xb8> - fputs("doorstatus: open\n", &USBSerialStream); - 28e: 8a e9 ldi r24, 0x9A ; 154 - 290: 91 e0 ldi r25, 0x01 ; 1 - 292: 02 c0 rjmp .+4 ; 0x298 <handle_command+0xbc> - else - fputs("doorstatus: closed\n", &USBSerialStream); - 294: 8c ea ldi r24, 0xAC ; 172 - 296: 91 e0 ldi r25, 0x01 ; 1 - 298: 6a ef ldi r22, 0xFA ; 250 - 29a: 71 e0 ldi r23, 0x01 ; 1 - 29c: d3 d5 rcall .+2982 ; 0xe44 <fputs> - } -} - 29e: df 91 pop r29 - 2a0: cf 91 pop r28 - 2a2: 08 95 ret - -000002a4 <CheckACMStatus>: - -void CheckACMStatus() -{ - 2a4: cf 93 push r28 - 2a6: df 93 push r29 - 2a8: 28 c0 rjmp .+80 ; 0x2fa <CheckACMStatus+0x56> - static uint8_t len = 0; - - int c; - while((c = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface)) > 0) - { - putc(c, &USBSerialStream); - 2aa: ce 01 movw r24, r28 - 2ac: 6a ef ldi r22, 0xFA ; 250 - 2ae: 71 e0 ldi r23, 0x01 ; 1 - 2b0: 9d d5 rcall .+2874 ; 0xdec <fputc> - - if (c == '\r') - 2b2: cd 30 cpi r28, 0x0D ; 13 - 2b4: d1 05 cpc r29, r1 - 2b6: 99 f4 brne .+38 ; 0x2de <CheckACMStatus+0x3a> - { - putc('\n', &USBSerialStream); - 2b8: 8a e0 ldi r24, 0x0A ; 10 - 2ba: 90 e0 ldi r25, 0x00 ; 0 - 2bc: 6a ef ldi r22, 0xFA ; 250 - 2be: 71 e0 ldi r23, 0x01 ; 1 - 2c0: 95 d5 rcall .+2858 ; 0xdec <fputc> - buf[len++] = '\0'; - 2c2: 80 91 d9 01 lds r24, 0x01D9 - 2c6: e8 2f mov r30, r24 - 2c8: f0 e0 ldi r31, 0x00 ; 0 - 2ca: e6 52 subi r30, 0x26 ; 38 - 2cc: fe 4f sbci r31, 0xFE ; 254 - 2ce: 10 82 st Z, r1 - 2d0: 8f 5f subi r24, 0xFF ; 255 - 2d2: 80 93 d9 01 sts 0x01D9, r24 - handle_command(buf); - 2d6: 8a ed ldi r24, 0xDA ; 218 - 2d8: 91 e0 ldi r25, 0x01 ; 1 - 2da: 80 df rcall .-256 ; 0x1dc <handle_command> - 2dc: 0c c0 rjmp .+24 ; 0x2f6 <CheckACMStatus+0x52> - len = 0; - continue; - } - - buf[len++] = c; - 2de: 80 91 d9 01 lds r24, 0x01D9 - 2e2: e8 2f mov r30, r24 - 2e4: f0 e0 ldi r31, 0x00 ; 0 - 2e6: e6 52 subi r30, 0x26 ; 38 - 2e8: fe 4f sbci r31, 0xFE ; 254 - 2ea: c0 83 st Z, r28 - 2ec: 8f 5f subi r24, 0xFF ; 255 - 2ee: 80 93 d9 01 sts 0x01D9, r24 - - if (len == sizeof(buf)) - 2f2: 80 32 cpi r24, 0x20 ; 32 - 2f4: 11 f4 brne .+4 ; 0x2fa <CheckACMStatus+0x56> - { - len = 0; - 2f6: 10 92 d9 01 sts 0x01D9, r1 -{ - static char buf[32]; - static uint8_t len = 0; - - int c; - while((c = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface)) > 0) - 2fa: 80 ec ldi r24, 0xC0 ; 192 - 2fc: 91 e0 ldi r25, 0x01 ; 1 - 2fe: fc d3 rcall .+2040 ; 0xaf8 <CDC_Device_ReceiveByte> - 300: ec 01 movw r28, r24 - 302: 18 16 cp r1, r24 - 304: 19 06 cpc r1, r25 - 306: 8c f2 brlt .-94 ; 0x2aa <CheckACMStatus+0x6> - { - len = 0; - continue; - } - } -} - 308: df 91 pop r29 - 30a: cf 91 pop r28 - 30c: 08 95 ret - -0000030e <main>: - -/** Main program entry point. This routine contains the overall program flow, including initial - * setup of all components and the main program loop. - */ -int main(void) -{ - 30e: cf 93 push r28 - 310: df 93 push r29 - DDRB = 1 << PB0 | 1 << PB4 | 0 << PB5; - 312: 81 e1 ldi r24, 0x11 ; 17 - 314: 84 b9 out 0x04, r24 ; 4 - PORTB = 0 << PB0; - 316: 15 b8 out 0x05, r1 ; 5 - - SetupHardware(); - 318: 49 df rcall .-366 ; 0x1ac <SetupHardware> - - lock_timer_setup(); - 31a: 10 df rcall .-480 ; 0x13c <lock_timer_setup> - - /* Create a regular character stream for the interface so that it can be used with the stdio.h functions */ - CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream); - 31c: 80 ec ldi r24, 0xC0 ; 192 - 31e: 91 e0 ldi r25, 0x01 ; 1 - 320: 6a ef ldi r22, 0xFA ; 250 - 322: 71 e0 ldi r23, 0x01 ; 1 - 324: 16 d4 rcall .+2092 ; 0xb52 <CDC_Device_CreateStream> - -// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - sei(); - 326: 78 94 sei - milliseconds can be achieved. - */ -void -_delay_loop_2(uint16_t __count) -{ - __asm__ volatile ( - 328: c0 e9 ldi r28, 0x90 ; 144 - 32a: d1 e0 ldi r29, 0x01 ; 1 - 32c: 0d c0 rjmp .+26 ; 0x348 <main+0x3a> - - while(running) - { - wdt_reset(); - 32e: a8 95 wdr - 330: 84 ec ldi r24, 0xC4 ; 196 - 332: 99 e0 ldi r25, 0x09 ; 9 - 334: fe 01 movw r30, r28 - 336: 31 97 sbiw r30, 0x01 ; 1 - 338: f1 f7 brne .-4 ; 0x336 <main+0x28> - __ticks = (uint16_t) (__ms * 10.0); - while(__ticks) - { - // wait 1/10 ms - _delay_loop_2(((F_CPU) / 4e3) / 10); - __ticks --; - 33a: 01 97 sbiw r24, 0x01 ; 1 - __ticks = 1; - else if (__tmp > 65535) - { - // __ticks = requested delay in 1/10 ms - __ticks = (uint16_t) (__ms * 10.0); - while(__ticks) - 33c: d9 f7 brne .-10 ; 0x334 <main+0x26> - _delay_ms(250); -// PORTB ^= 1 << PB0; // Toggle external LED - -// CheckPinStatus(); - - CheckACMStatus(); - 33e: b2 df rcall .-156 ; 0x2a4 <CheckACMStatus> - - CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - 340: 80 ec ldi r24, 0xC0 ; 192 - 342: 91 e0 ldi r25, 0x01 ; 1 - 344: 50 d4 rcall .+2208 ; 0xbe6 <CDC_Device_USBTask> - USB_USBTask(); - 346: c4 d3 rcall .+1928 ; 0xad0 <USB_USBTask> - CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream); - -// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - sei(); - - while(running) - 348: 80 91 d6 01 lds r24, 0x01D6 - 34c: 90 91 d7 01 lds r25, 0x01D7 - 350: 89 2b or r24, r25 - 352: 69 f7 brne .-38 ; 0x32e <main+0x20> - * enumerating the device once attached until \ref USB_Attach() is called. - */ - static inline void USB_Detach(void) ATTR_ALWAYS_INLINE; - static inline void USB_Detach(void) - { - UDCON |= (1 << DETACH); - 354: 80 91 e0 00 lds r24, 0x00E0 - 358: 81 60 ori r24, 0x01 ; 1 - 35a: 80 93 e0 00 sts 0x00E0, r24 - } - - USB_Detach(); - - /* Enable the watchdog and force a timeout to reset the AVR */ - wdt_enable(WDTO_250MS); - 35e: 2c e0 ldi r18, 0x0C ; 12 - 360: 88 e1 ldi r24, 0x18 ; 24 - 362: 90 e0 ldi r25, 0x00 ; 0 - 364: 0f b6 in r0, 0x3f ; 63 - 366: f8 94 cli - 368: a8 95 wdr - 36a: 80 93 60 00 sts 0x0060, r24 - 36e: 0f be out 0x3f, r0 ; 63 - 370: 20 93 60 00 sts 0x0060, r18 - 374: ff cf rjmp .-2 ; 0x374 <main+0x66> - -00000376 <CALLBACK_USB_GetDescriptor>: - * USB host. - */ -uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, - const uint8_t wIndex, - const void** const DescriptorAddress) -{ - 376: da 01 movw r26, r20 - const uint8_t DescriptorNumber = (wValue & 0xFF); - - const void* Address = NULL; - uint16_t Size = NO_DESCRIPTOR; - - switch (DescriptorType) - 378: 92 30 cpi r25, 0x02 ; 2 - 37a: 49 f0 breq .+18 ; 0x38e <CALLBACK_USB_GetDescriptor+0x18> - 37c: 93 30 cpi r25, 0x03 ; 3 - 37e: 61 f0 breq .+24 ; 0x398 <CALLBACK_USB_GetDescriptor+0x22> - 380: 91 30 cpi r25, 0x01 ; 1 - 382: f9 f4 brne .+62 ; 0x3c2 <CALLBACK_USB_GetDescriptor+0x4c> - 384: e4 e7 ldi r30, 0x74 ; 116 - 386: f0 e0 ldi r31, 0x00 ; 0 - 388: 22 e1 ldi r18, 0x12 ; 18 - 38a: 30 e0 ldi r19, 0x00 ; 0 - 38c: 1e c0 rjmp .+60 ; 0x3ca <CALLBACK_USB_GetDescriptor+0x54> - 38e: e6 e8 ldi r30, 0x86 ; 134 - 390: f0 e0 ldi r31, 0x00 ; 0 - 392: 2e e3 ldi r18, 0x3E ; 62 - 394: 30 e0 ldi r19, 0x00 ; 0 - 396: 19 c0 rjmp .+50 ; 0x3ca <CALLBACK_USB_GetDescriptor+0x54> - case DTYPE_Configuration: - Address = &ConfigurationDescriptor; - Size = sizeof(USB_Descriptor_Configuration_t); - break; - case DTYPE_String: - switch (DescriptorNumber) - 398: 81 30 cpi r24, 0x01 ; 1 - 39a: 49 f0 breq .+18 ; 0x3ae <CALLBACK_USB_GetDescriptor+0x38> - 39c: 81 30 cpi r24, 0x01 ; 1 - 39e: 18 f0 brcs .+6 ; 0x3a6 <CALLBACK_USB_GetDescriptor+0x30> - 3a0: 82 30 cpi r24, 0x02 ; 2 - 3a2: 79 f4 brne .+30 ; 0x3c2 <CALLBACK_USB_GetDescriptor+0x4c> - 3a4: 08 c0 rjmp .+16 ; 0x3b6 <CALLBACK_USB_GetDescriptor+0x40> - { - case 0x00: - Address = &LanguageString; - Size = pgm_read_byte(&LanguageString.Header.Size); - 3a6: e4 ec ldi r30, 0xC4 ; 196 - 3a8: f0 e0 ldi r31, 0x00 ; 0 - 3aa: 84 91 lpm r24, Z+ - 3ac: 07 c0 rjmp .+14 ; 0x3bc <CALLBACK_USB_GetDescriptor+0x46> - break; - case 0x01: - Address = &ManufacturerString; - Size = pgm_read_byte(&ManufacturerString.Header.Size); - 3ae: e8 ec ldi r30, 0xC8 ; 200 - 3b0: f0 e0 ldi r31, 0x00 ; 0 - 3b2: 84 91 lpm r24, Z+ - 3b4: 03 c0 rjmp .+6 ; 0x3bc <CALLBACK_USB_GetDescriptor+0x46> - break; - case 0x02: - Address = &ProductString; - Size = pgm_read_byte(&ProductString.Header.Size); - 3b6: ee ed ldi r30, 0xDE ; 222 - 3b8: f0 e0 ldi r31, 0x00 ; 0 - 3ba: 84 91 lpm r24, Z+ - 3bc: 28 2f mov r18, r24 - 3be: 30 e0 ldi r19, 0x00 ; 0 - 3c0: 04 c0 rjmp .+8 ; 0x3ca <CALLBACK_USB_GetDescriptor+0x54> - 3c2: e0 e0 ldi r30, 0x00 ; 0 - 3c4: f0 e0 ldi r31, 0x00 ; 0 - 3c6: 20 e0 ldi r18, 0x00 ; 0 - 3c8: 30 e0 ldi r19, 0x00 ; 0 - } - - break; - } - - *DescriptorAddress = Address; - 3ca: ed 93 st X+, r30 - 3cc: fc 93 st X, r31 - return Size; -} - 3ce: c9 01 movw r24, r18 - 3d0: 08 95 ret - -000003d2 <Endpoint_ConfigureEndpoint_Prv>: - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - 3d2: 80 93 e9 00 sts 0x00E9, r24 - * \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); - 3d6: 80 91 eb 00 lds r24, 0x00EB - 3da: 81 60 ori r24, 0x01 ; 1 - 3dc: 80 93 eb 00 sts 0x00EB, r24 - const uint8_t UECFG1XData) -{ - Endpoint_SelectEndpoint(Number); - Endpoint_EnableEndpoint(); - - UECFG1X = 0; - 3e0: 10 92 ed 00 sts 0x00ED, r1 - UECFG0X = UECFG0XData; - 3e4: 60 93 ec 00 sts 0x00EC, r22 - UECFG1X = UECFG1XData; - 3e8: 40 93 ed 00 sts 0x00ED, r20 - * \return Boolean true if the currently selected endpoint has been configured, 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); - 3ec: 80 91 ee 00 lds r24, 0x00EE - - return Endpoint_IsConfigured(); -} - 3f0: 88 1f adc r24, r24 - 3f2: 88 27 eor r24, r24 - 3f4: 88 1f adc r24, r24 - 3f6: 08 95 ret - -000003f8 <Endpoint_ClearStatusStage>: - } -} - -void Endpoint_ClearStatusStage(void) -{ - if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) - 3f8: 80 91 0e 02 lds r24, 0x020E - 3fc: 88 23 and r24, r24 - 3fe: 9c f4 brge .+38 ; 0x426 <Endpoint_ClearStatusStage+0x2e> - 400: 04 c0 rjmp .+8 ; 0x40a <Endpoint_ClearStatusStage+0x12> - { - while (!(Endpoint_IsOUTReceived())) - { - if (USB_DeviceState == DEVICE_STATE_Unattached) - 402: 80 91 0d 02 lds r24, 0x020D - 406: 88 23 and r24, r24 - 408: b9 f0 breq .+46 ; 0x438 <Endpoint_ClearStatusStage+0x40> - * \return Boolean true if current endpoint is has received an OUT packet, 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); - 40a: 80 91 e8 00 lds r24, 0x00E8 - -void Endpoint_ClearStatusStage(void) -{ - if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) - { - while (!(Endpoint_IsOUTReceived())) - 40e: 82 ff sbrs r24, 2 - 410: f8 cf rjmp .-16 ; 0x402 <Endpoint_ClearStatusStage+0xa> - */ - 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)); - 412: 80 91 e8 00 lds r24, 0x00E8 - 416: 8b 77 andi r24, 0x7B ; 123 - 418: 80 93 e8 00 sts 0x00E8, r24 - 41c: 08 95 ret - } - else - { - while (!(Endpoint_IsINReady())) - { - if (USB_DeviceState == DEVICE_STATE_Unattached) - 41e: 80 91 0d 02 lds r24, 0x020D - 422: 88 23 and r24, r24 - 424: 49 f0 breq .+18 ; 0x438 <Endpoint_ClearStatusStage+0x40> - * \return Boolean true if the current endpoint is ready for an IN packet, 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); - 426: 80 91 e8 00 lds r24, 0x00E8 - - Endpoint_ClearOUT(); - } - else - { - while (!(Endpoint_IsINReady())) - 42a: 80 ff sbrs r24, 0 - 42c: f8 cf rjmp .-16 ; 0x41e <Endpoint_ClearStatusStage+0x26> - */ - 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)); - 42e: 80 91 e8 00 lds r24, 0x00E8 - 432: 8e 77 andi r24, 0x7E ; 126 - 434: 80 93 e8 00 sts 0x00E8, r24 - 438: 08 95 ret - -0000043a <Endpoint_WaitUntilReady>: - /** Returns the current USB frame number, when in device mode. Every millisecond the USB bus is active (i.e. enumerated to a host) - * the frame number is incremented by one. - */ - static inline uint16_t USB_Device_GetFrameNumber(void) - { - return UDFNUM; - 43a: 40 91 e4 00 lds r20, 0x00E4 - 43e: 50 91 e5 00 lds r21, 0x00E5 - 442: 24 e6 ldi r18, 0x64 ; 100 - * \return The currently selected endpoint's direction, as a 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 & ENDPOINT_DIR_IN); - 444: 80 91 ec 00 lds r24, 0x00EC - - uint16_t PreviousFrameNumber = USB_Device_GetFrameNumber(); - - for (;;) - { - if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) - 448: 80 ff sbrs r24, 0 - 44a: 05 c0 rjmp .+10 ; 0x456 <Endpoint_WaitUntilReady+0x1c> - * \return Boolean true if the current endpoint is ready for an IN packet, 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); - 44c: 80 91 e8 00 lds r24, 0x00E8 - { - if (Endpoint_IsINReady()) - 450: 80 ff sbrs r24, 0 - 452: 05 c0 rjmp .+10 ; 0x45e <Endpoint_WaitUntilReady+0x24> - 454: 22 c0 rjmp .+68 ; 0x49a <Endpoint_WaitUntilReady+0x60> - * \return Boolean true if current endpoint is has received an OUT packet, 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); - 456: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_READYWAIT_NoError; - } - else - { - if (Endpoint_IsOUTReceived()) - 45a: 82 fd sbrc r24, 2 - 45c: 1e c0 rjmp .+60 ; 0x49a <Endpoint_WaitUntilReady+0x60> - return ENDPOINT_READYWAIT_NoError; - } - - uint8_t USB_DeviceState_LCL = USB_DeviceState; - 45e: 80 91 0d 02 lds r24, 0x020D - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 462: 88 23 and r24, r24 - 464: 11 f4 brne .+4 ; 0x46a <Endpoint_WaitUntilReady+0x30> - 466: 82 e0 ldi r24, 0x02 ; 2 - 468: 08 95 ret - return ENDPOINT_READYWAIT_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 46a: 85 30 cpi r24, 0x05 ; 5 - 46c: 11 f4 brne .+4 ; 0x472 <Endpoint_WaitUntilReady+0x38> - 46e: 83 e0 ldi r24, 0x03 ; 3 - 470: 08 95 ret - * \return Boolean true if the currently selected endpoint is stalled, 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); - 472: 80 91 eb 00 lds r24, 0x00EB - return ENDPOINT_READYWAIT_BusSuspended; - else if (Endpoint_IsStalled()) - 476: 85 ff sbrs r24, 5 - 478: 02 c0 rjmp .+4 ; 0x47e <Endpoint_WaitUntilReady+0x44> - 47a: 81 e0 ldi r24, 0x01 ; 1 - 47c: 08 95 ret - 47e: 80 91 e4 00 lds r24, 0x00E4 - 482: 90 91 e5 00 lds r25, 0x00E5 - return ENDPOINT_READYWAIT_EndpointStalled; - - uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber(); - - if (CurrentFrameNumber != PreviousFrameNumber) - 486: 84 17 cp r24, r20 - 488: 95 07 cpc r25, r21 - 48a: e1 f2 breq .-72 ; 0x444 <Endpoint_WaitUntilReady+0xa> - { - PreviousFrameNumber = CurrentFrameNumber; - - if (!(TimeoutMSRem--)) - 48c: 22 23 and r18, r18 - 48e: 11 f4 brne .+4 ; 0x494 <Endpoint_WaitUntilReady+0x5a> - 490: 84 e0 ldi r24, 0x04 ; 4 - 492: 08 95 ret - 494: 21 50 subi r18, 0x01 ; 1 - 496: ac 01 movw r20, r24 - 498: d5 cf rjmp .-86 ; 0x444 <Endpoint_WaitUntilReady+0xa> - 49a: 80 e0 ldi r24, 0x00 ; 0 - return ENDPOINT_READYWAIT_Timeout; - } - } -} - 49c: 08 95 ret - -0000049e <USB_ResetInterface>: -{ - #if defined(USB_CAN_BE_BOTH) - bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0); - #endif - - USB_INT_DisableAllInterrupts(); - 49e: 41 d0 rcall .+130 ; 0x522 <USB_INT_DisableAllInterrupts> - USB_INT_ClearAllInterrupts(); - 4a0: 43 d0 rcall .+134 ; 0x528 <USB_INT_ClearAllInterrupts> - } - - static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE; - static inline void USB_Controller_Reset(void) - { - const uint8_t Temp = USBCON; - 4a2: 80 91 d8 00 lds r24, 0x00D8 - - USBCON = (Temp & ~(1 << USBE)); - 4a6: 98 2f mov r25, r24 - 4a8: 9f 77 andi r25, 0x7F ; 127 - 4aa: 90 93 d8 00 sts 0x00D8, r25 - USBCON = (Temp | (1 << USBE)); - 4ae: 80 68 ori r24, 0x80 ; 128 - 4b0: 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; - 4b4: 84 e0 ldi r24, 0x04 ; 4 - 4b6: 89 bd out 0x29, r24 ; 41 - PLLCSR |= (1 << PLLE); - 4b8: 89 b5 in r24, 0x29 ; 41 - 4ba: 82 60 ori r24, 0x02 ; 2 - 4bc: 89 bd out 0x29, r24 ; 41 - #if defined(USB_SERIES_4_AVR) - PLLFRQ = ((1 << PLLUSB) | (1 << PDIV3) | (1 << PDIV1)); - #endif - - USB_PLL_On(); - while (!(USB_PLL_IsReady())); - 4be: 09 b4 in r0, 0x29 ; 41 - 4c0: 00 fe sbrs r0, 0 - 4c2: fd cf rjmp .-6 ; 0x4be <USB_ResetInterface+0x20> - } - - static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; - static inline void USB_CLK_Unfreeze(void) - { - USBCON &= ~(1 << FRZCLK); - 4c4: 80 91 d8 00 lds r24, 0x00D8 - 4c8: 8f 7d andi r24, 0xDF ; 223 - 4ca: 80 93 d8 00 sts 0x00D8, r24 -} - -#if defined(USB_CAN_BE_DEVICE) -static void USB_Init_Device(void) -{ - USB_DeviceState = DEVICE_STATE_Unattached; - 4ce: 10 92 0d 02 sts 0x020D, r1 - USB_ConfigurationNumber = 0; - 4d2: 10 92 0b 02 sts 0x020B, r1 - - #if !defined(NO_DEVICE_REMOTE_WAKEUP) - USB_RemoteWakeupEnabled = false; - 4d6: 10 92 0a 02 sts 0x020A, r1 - #endif - - #if !defined(NO_DEVICE_SELF_POWER) - USB_CurrentlySelfPowered = false; - 4da: 10 92 09 02 sts 0x0209, r1 - const uint8_t Type, - const uint8_t Direction, - const uint16_t Size, - const uint8_t Banks) - { - return Endpoint_ConfigureEndpoint_Prv(Number, (((Type) << EPTYPE0) | (Direction)), - 4de: 80 e0 ldi r24, 0x00 ; 0 - 4e0: 60 e0 ldi r22, 0x00 ; 0 - 4e2: 42 e0 ldi r20, 0x02 ; 2 - 4e4: 76 df rcall .-276 ; 0x3d2 <Endpoint_ConfigureEndpoint_Prv> - - Endpoint_ConfigureEndpoint(ENDPOINT_CONTROLEP, EP_TYPE_CONTROL, - ENDPOINT_DIR_OUT, USB_ControlEndpointSize, - ENDPOINT_BANK_SINGLE); - - USB_INT_Clear(USB_INT_SUSPI); - 4e6: 80 91 e1 00 lds r24, 0x00E1 - 4ea: 8e 7f andi r24, 0xFE ; 254 - 4ec: 80 93 e1 00 sts 0x00E1, r24 - USB_INT_Enable(USB_INT_SUSPI); - 4f0: 80 91 e2 00 lds r24, 0x00E2 - 4f4: 81 60 ori r24, 0x01 ; 1 - 4f6: 80 93 e2 00 sts 0x00E2, r24 - USB_INT_Enable(USB_INT_EORSTI); - 4fa: 80 91 e2 00 lds r24, 0x00E2 - 4fe: 88 60 ori r24, 0x08 ; 8 - 500: 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); - 504: 80 91 e0 00 lds r24, 0x00E0 - 508: 8e 7f andi r24, 0xFE ; 254 - 50a: 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 -} - 50e: 08 95 ret - -00000510 <USB_Init>: - 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); - 510: e3 e6 ldi r30, 0x63 ; 99 - 512: f0 e0 ldi r31, 0x00 ; 0 - 514: 80 81 ld r24, Z - 516: 8e 7f andi r24, 0xFE ; 254 - 518: 80 83 st Z, r24 - { - USB_CurrentMode = Mode; - } - #endif - - USB_IsInitialized = true; - 51a: 81 e0 ldi r24, 0x01 ; 1 - 51c: 80 93 0c 02 sts 0x020C, r24 - - USB_ResetInterface(); -} - 520: be cf rjmp .-132 ; 0x49e <USB_ResetInterface> - -00000522 <USB_INT_DisableAllInterrupts>: - #if defined(USB_CAN_BE_HOST) - UHIEN = 0; - #endif - - #if defined(USB_CAN_BE_DEVICE) - UDIEN = 0; - 522: 10 92 e2 00 sts 0x00E2, r1 - #endif -} - 526: 08 95 ret - -00000528 <USB_INT_ClearAllInterrupts>: - #if defined(USB_CAN_BE_HOST) - UHINT = 0; - #endif - - #if defined(USB_CAN_BE_DEVICE) - UDINT = 0; - 528: 10 92 e1 00 sts 0x00E1, r1 - #endif -} - 52c: 08 95 ret - -0000052e <__vector_11>: - -ISR(USB_GEN_vect, ISR_BLOCK) -{ - 52e: 1f 92 push r1 - 530: 0f 92 push r0 - 532: 0f b6 in r0, 0x3f ; 63 - 534: 0f 92 push r0 - 536: 11 24 eor r1, r1 - 538: 2f 93 push r18 - 53a: 3f 93 push r19 - 53c: 4f 93 push r20 - 53e: 5f 93 push r21 - 540: 6f 93 push r22 - 542: 7f 93 push r23 - 544: 8f 93 push r24 - 546: 9f 93 push r25 - 548: af 93 push r26 - 54a: bf 93 push r27 - 54c: ef 93 push r30 - 54e: ff 93 push r31 - EVENT_USB_Device_Disconnect(); - } - } - #endif - - if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI)) - 550: 80 91 e1 00 lds r24, 0x00E1 - 554: 80 ff sbrs r24, 0 - 556: 1c c0 rjmp .+56 ; 0x590 <__vector_11+0x62> - 558: 80 91 e2 00 lds r24, 0x00E2 - 55c: 80 ff sbrs r24, 0 - 55e: 18 c0 rjmp .+48 ; 0x590 <__vector_11+0x62> - { - USB_INT_Clear(USB_INT_SUSPI); - 560: 80 91 e1 00 lds r24, 0x00E1 - 564: 8e 7f andi r24, 0xFE ; 254 - 566: 80 93 e1 00 sts 0x00E1, r24 - - USB_INT_Disable(USB_INT_SUSPI); - 56a: 80 91 e2 00 lds r24, 0x00E2 - 56e: 8e 7f andi r24, 0xFE ; 254 - 570: 80 93 e2 00 sts 0x00E2, r24 - USB_INT_Enable(USB_INT_WAKEUPI); - 574: 80 91 e2 00 lds r24, 0x00E2 - 578: 80 61 ori r24, 0x10 ; 16 - 57a: 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); - 57e: 80 91 d8 00 lds r24, 0x00D8 - 582: 80 62 ori r24, 0x20 ; 32 - 584: 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; - 588: 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; - 58a: 10 92 0d 02 sts 0x020D, r1 - EVENT_USB_Device_Disconnect(); - 58e: e9 dd rcall .-1070 ; 0x162 <EVENT_USB_Device_Disconnect> - USB_DeviceState = DEVICE_STATE_Suspended; - EVENT_USB_Device_Suspend(); - #endif - } - - if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI)) - 590: 80 91 e1 00 lds r24, 0x00E1 - 594: 84 ff sbrs r24, 4 - 596: 2e c0 rjmp .+92 ; 0x5f4 <__vector_11+0xc6> - 598: 80 91 e2 00 lds r24, 0x00E2 - 59c: 84 ff sbrs r24, 4 - 59e: 2a c0 rjmp .+84 ; 0x5f4 <__vector_11+0xc6> - - /* Inline Functions: */ - static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; - static inline void USB_PLL_On(void) - { - PLLCSR = USB_PLL_PSC; - 5a0: 84 e0 ldi r24, 0x04 ; 4 - 5a2: 89 bd out 0x29, r24 ; 41 - PLLCSR |= (1 << PLLE); - 5a4: 89 b5 in r24, 0x29 ; 41 - 5a6: 82 60 ori r24, 0x02 ; 2 - 5a8: 89 bd out 0x29, r24 ; 41 - { - if (!(USB_Options & USB_OPT_MANUAL_PLL)) - { - USB_PLL_On(); - while (!(USB_PLL_IsReady())); - 5aa: 09 b4 in r0, 0x29 ; 41 - 5ac: 00 fe sbrs r0, 0 - 5ae: fd cf rjmp .-6 ; 0x5aa <__vector_11+0x7c> - } - - static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; - static inline void USB_CLK_Unfreeze(void) - { - USBCON &= ~(1 << FRZCLK); - 5b0: 80 91 d8 00 lds r24, 0x00D8 - 5b4: 8f 7d andi r24, 0xDF ; 223 - 5b6: 80 93 d8 00 sts 0x00D8, r24 - } - - USB_CLK_Unfreeze(); - - USB_INT_Clear(USB_INT_WAKEUPI); - 5ba: 80 91 e1 00 lds r24, 0x00E1 - 5be: 8f 7e andi r24, 0xEF ; 239 - 5c0: 80 93 e1 00 sts 0x00E1, r24 - - USB_INT_Disable(USB_INT_WAKEUPI); - 5c4: 80 91 e2 00 lds r24, 0x00E2 - 5c8: 8f 7e andi r24, 0xEF ; 239 - 5ca: 80 93 e2 00 sts 0x00E2, r24 - USB_INT_Enable(USB_INT_SUSPI); - 5ce: 80 91 e2 00 lds r24, 0x00E2 - 5d2: 81 60 ori r24, 0x01 ; 1 - 5d4: 80 93 e2 00 sts 0x00E2, r24 - - if (USB_ConfigurationNumber) - 5d8: 80 91 0b 02 lds r24, 0x020B - 5dc: 88 23 and r24, r24 - 5de: 31 f4 brne .+12 ; 0x5ec <__vector_11+0xbe> - } - - static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE; - static inline bool USB_Device_IsAddressSet(void) - { - return (UDADDR & (1 << ADDEN)); - 5e0: 80 91 e3 00 lds r24, 0x00E3 - USB_DeviceState = DEVICE_STATE_Configured; - else - USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 5e4: 87 fd sbrc r24, 7 - 5e6: 02 c0 rjmp .+4 ; 0x5ec <__vector_11+0xbe> - 5e8: 81 e0 ldi r24, 0x01 ; 1 - 5ea: 01 c0 rjmp .+2 ; 0x5ee <__vector_11+0xc0> - 5ec: 84 e0 ldi r24, 0x04 ; 4 - 5ee: 80 93 0d 02 sts 0x020D, r24 - - #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) - EVENT_USB_Device_Connect(); - 5f2: b6 dd rcall .-1172 ; 0x160 <EVENT_USB_Device_Connect> - #else - EVENT_USB_Device_WakeUp(); - #endif - } - - if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) - 5f4: 80 91 e1 00 lds r24, 0x00E1 - 5f8: 83 ff sbrs r24, 3 - 5fa: 22 c0 rjmp .+68 ; 0x640 <__vector_11+0x112> - 5fc: 80 91 e2 00 lds r24, 0x00E2 - 600: 83 ff sbrs r24, 3 - 602: 1e c0 rjmp .+60 ; 0x640 <__vector_11+0x112> - { - USB_INT_Clear(USB_INT_EORSTI); - 604: 80 91 e1 00 lds r24, 0x00E1 - 608: 87 7f andi r24, 0xF7 ; 247 - 60a: 80 93 e1 00 sts 0x00E1, r24 - - USB_DeviceState = DEVICE_STATE_Default; - 60e: 82 e0 ldi r24, 0x02 ; 2 - 610: 80 93 0d 02 sts 0x020D, r24 - USB_ConfigurationNumber = 0; - 614: 10 92 0b 02 sts 0x020B, r1 - - USB_INT_Clear(USB_INT_SUSPI); - 618: 80 91 e1 00 lds r24, 0x00E1 - 61c: 8e 7f andi r24, 0xFE ; 254 - 61e: 80 93 e1 00 sts 0x00E1, r24 - USB_INT_Disable(USB_INT_SUSPI); - 622: 80 91 e2 00 lds r24, 0x00E2 - 626: 8e 7f andi r24, 0xFE ; 254 - 628: 80 93 e2 00 sts 0x00E2, r24 - USB_INT_Enable(USB_INT_WAKEUPI); - 62c: 80 91 e2 00 lds r24, 0x00E2 - 630: 80 61 ori r24, 0x10 ; 16 - 632: 80 93 e2 00 sts 0x00E2, r24 - 636: 80 e0 ldi r24, 0x00 ; 0 - 638: 60 e0 ldi r22, 0x00 ; 0 - 63a: 42 e0 ldi r20, 0x02 ; 2 - 63c: ca de rcall .-620 ; 0x3d2 <Endpoint_ConfigureEndpoint_Prv> - - #if defined(INTERRUPT_CONTROL_ENDPOINT) - USB_INT_Enable(USB_INT_RXSTPI); - #endif - - EVENT_USB_Device_Reset(); - 63e: 4b d1 rcall .+662 ; 0x8d6 <USB_Event_Stub> - } - - #if !defined(NO_SOF_EVENTS) - if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI)) - 640: 80 91 e1 00 lds r24, 0x00E1 - 644: 82 ff sbrs r24, 2 - 646: 0a c0 rjmp .+20 ; 0x65c <__vector_11+0x12e> - 648: 80 91 e2 00 lds r24, 0x00E2 - 64c: 82 ff sbrs r24, 2 - 64e: 06 c0 rjmp .+12 ; 0x65c <__vector_11+0x12e> - { - USB_INT_Clear(USB_INT_SOFI); - 650: 80 91 e1 00 lds r24, 0x00E1 - 654: 8b 7f andi r24, 0xFB ; 251 - 656: 80 93 e1 00 sts 0x00E1, r24 - - EVENT_USB_Device_StartOfFrame(); - 65a: 3d d1 rcall .+634 ; 0x8d6 <USB_Event_Stub> - USB_ResetInterface(); - - EVENT_USB_UIDChange(); - } - #endif -} - 65c: ff 91 pop r31 - 65e: ef 91 pop r30 - 660: bf 91 pop r27 - 662: af 91 pop r26 - 664: 9f 91 pop r25 - 666: 8f 91 pop r24 - 668: 7f 91 pop r23 - 66a: 6f 91 pop r22 - 66c: 5f 91 pop r21 - 66e: 4f 91 pop r20 - 670: 3f 91 pop r19 - 672: 2f 91 pop r18 - 674: 0f 90 pop r0 - 676: 0f be out 0x3f, r0 ; 63 - 678: 0f 90 pop r0 - 67a: 1f 90 pop r1 - 67c: 18 95 reti - -0000067e <USB_Device_ProcessControlRequest>: -#if !defined(NO_DEVICE_REMOTE_WAKEUP) -bool USB_RemoteWakeupEnabled; -#endif - -void USB_Device_ProcessControlRequest(void) -{ - 67e: 0f 93 push r16 - 680: 1f 93 push r17 - 682: df 93 push r29 - 684: cf 93 push r28 - 686: 00 d0 rcall .+0 ; 0x688 <USB_Device_ProcessControlRequest+0xa> - 688: cd b7 in r28, 0x3d ; 61 - 68a: de b7 in r29, 0x3e ; 62 - 68c: ee e0 ldi r30, 0x0E ; 14 - 68e: f2 e0 ldi r31, 0x02 ; 2 - * \return Next byte in the currently selected endpoint's FIFO buffer. - */ - static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_Read_Byte(void) - { - return UEDATX; - 690: 80 91 f1 00 lds r24, 0x00F1 - uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; - - for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) - *(RequestHeader++) = Endpoint_Read_Byte(); - 694: 81 93 st Z+, r24 - -void USB_Device_ProcessControlRequest(void) -{ - uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; - - for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) - 696: 82 e0 ldi r24, 0x02 ; 2 - 698: e6 31 cpi r30, 0x16 ; 22 - 69a: f8 07 cpc r31, r24 - 69c: c9 f7 brne .-14 ; 0x690 <USB_Device_ProcessControlRequest+0x12> - *(RequestHeader++) = Endpoint_Read_Byte(); - - EVENT_USB_Device_ControlRequest(); - 69e: 80 dd rcall .-1280 ; 0x1a0 <EVENT_USB_Device_ControlRequest> - * \return Boolean true if the selected endpoint has received a SETUP packet, 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); - 6a0: 80 91 e8 00 lds r24, 0x00E8 - - if (Endpoint_IsSETUPReceived()) - 6a4: 83 ff sbrs r24, 3 - 6a6: 02 c1 rjmp .+516 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - { - uint8_t bmRequestType = USB_ControlRequest.bmRequestType; - 6a8: 80 91 0e 02 lds r24, 0x020E - - switch (USB_ControlRequest.bRequest) - 6ac: 30 91 0f 02 lds r19, 0x020F - 6b0: 35 30 cpi r19, 0x05 ; 5 - 6b2: 09 f4 brne .+2 ; 0x6b6 <USB_Device_ProcessControlRequest+0x38> - 6b4: 87 c0 rjmp .+270 ; 0x7c4 <USB_Device_ProcessControlRequest+0x146> - 6b6: 36 30 cpi r19, 0x06 ; 6 - 6b8: 40 f4 brcc .+16 ; 0x6ca <USB_Device_ProcessControlRequest+0x4c> - 6ba: 31 30 cpi r19, 0x01 ; 1 - 6bc: c9 f1 breq .+114 ; 0x730 <USB_Device_ProcessControlRequest+0xb2> - 6be: 31 30 cpi r19, 0x01 ; 1 - 6c0: 70 f0 brcs .+28 ; 0x6de <USB_Device_ProcessControlRequest+0x60> - 6c2: 33 30 cpi r19, 0x03 ; 3 - 6c4: 09 f0 breq .+2 ; 0x6c8 <USB_Device_ProcessControlRequest+0x4a> - 6c6: f2 c0 rjmp .+484 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - 6c8: 33 c0 rjmp .+102 ; 0x730 <USB_Device_ProcessControlRequest+0xb2> - 6ca: 38 30 cpi r19, 0x08 ; 8 - 6cc: 09 f4 brne .+2 ; 0x6d0 <USB_Device_ProcessControlRequest+0x52> - 6ce: c0 c0 rjmp .+384 ; 0x850 <USB_Device_ProcessControlRequest+0x1d2> - 6d0: 39 30 cpi r19, 0x09 ; 9 - 6d2: 09 f4 brne .+2 ; 0x6d6 <USB_Device_ProcessControlRequest+0x58> - 6d4: cf c0 rjmp .+414 ; 0x874 <USB_Device_ProcessControlRequest+0x1f6> - 6d6: 36 30 cpi r19, 0x06 ; 6 - 6d8: 09 f0 breq .+2 ; 0x6dc <USB_Device_ProcessControlRequest+0x5e> - 6da: e8 c0 rjmp .+464 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - 6dc: 99 c0 rjmp .+306 ; 0x810 <USB_Device_ProcessControlRequest+0x192> - { - case REQ_GetStatus: - if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - 6de: 80 38 cpi r24, 0x80 ; 128 - 6e0: 21 f0 breq .+8 ; 0x6ea <USB_Device_ProcessControlRequest+0x6c> - 6e2: 82 38 cpi r24, 0x82 ; 130 - 6e4: 09 f0 breq .+2 ; 0x6e8 <USB_Device_ProcessControlRequest+0x6a> - 6e6: e2 c0 rjmp .+452 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - 6e8: 08 c0 rjmp .+16 ; 0x6fa <USB_Device_ProcessControlRequest+0x7c> - 6ea: 90 91 09 02 lds r25, 0x0209 - if (USB_CurrentlySelfPowered) - CurrentStatus |= FEATURE_SELFPOWERED_ENABLED; - #endif - - #if !defined(NO_DEVICE_REMOTE_WAKEUP) - if (USB_RemoteWakeupEnabled) - 6ee: 80 91 0a 02 lds r24, 0x020A - 6f2: 88 23 and r24, r24 - 6f4: 99 f0 breq .+38 ; 0x71c <USB_Device_ProcessControlRequest+0x9e> - CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED; - 6f6: 92 60 ori r25, 0x02 ; 2 - 6f8: 11 c0 rjmp .+34 ; 0x71c <USB_Device_ProcessControlRequest+0x9e> - #endif - break; - #endif - #if !defined(CONTROL_ONLY_DEVICE) - case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT): - Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); - 6fa: 80 91 12 02 lds r24, 0x0212 - 6fe: 87 70 andi r24, 0x07 ; 7 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - 700: 80 93 e9 00 sts 0x00E9, r24 - * \return Boolean true if the currently selected endpoint is stalled, 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); - 704: 80 91 eb 00 lds r24, 0x00EB - - CurrentStatus = Endpoint_IsStalled(); - 708: 90 e0 ldi r25, 0x00 ; 0 - 70a: 25 e0 ldi r18, 0x05 ; 5 - 70c: 96 95 lsr r25 - 70e: 87 95 ror r24 - 710: 2a 95 dec r18 - 712: e1 f7 brne .-8 ; 0x70c <USB_Device_ProcessControlRequest+0x8e> - 714: 98 2f mov r25, r24 - 716: 91 70 andi r25, 0x01 ; 1 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - 718: 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); - 71c: 80 91 e8 00 lds r24, 0x00E8 - 720: 87 7f andi r24, 0xF7 ; 247 - 722: 80 93 e8 00 sts 0x00E8, r24 - * \param[in] Word Next word to write to the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_Word_LE(const uint16_t Word) - { - UEDATX = (Word & 0xFF); - 726: 90 93 f1 00 sts 0x00F1, r25 - UEDATX = (Word >> 8); - 72a: 10 92 f1 00 sts 0x00F1, r1 - 72e: 9b c0 rjmp .+310 ; 0x866 <USB_Device_ProcessControlRequest+0x1e8> - } - - break; - case REQ_ClearFeature: - case REQ_SetFeature: - if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) || - 730: 88 23 and r24, r24 - 732: 19 f0 breq .+6 ; 0x73a <USB_Device_ProcessControlRequest+0xbc> - 734: 82 30 cpi r24, 0x02 ; 2 - 736: 09 f0 breq .+2 ; 0x73a <USB_Device_ProcessControlRequest+0xbc> - 738: b9 c0 rjmp .+370 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - Endpoint_ClearStatusStage(); -} - -static void USB_Device_ClearSetFeature(void) -{ - switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT) - 73a: 90 e0 ldi r25, 0x00 ; 0 - 73c: 8f 71 andi r24, 0x1F ; 31 - 73e: 90 70 andi r25, 0x00 ; 0 - 740: 00 97 sbiw r24, 0x00 ; 0 - 742: 21 f0 breq .+8 ; 0x74c <USB_Device_ProcessControlRequest+0xce> - 744: 02 97 sbiw r24, 0x02 ; 2 - 746: 09 f0 breq .+2 ; 0x74a <USB_Device_ProcessControlRequest+0xcc> - 748: b1 c0 rjmp .+354 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - 74a: 0c c0 rjmp .+24 ; 0x764 <USB_Device_ProcessControlRequest+0xe6> - { - #if !defined(NO_DEVICE_REMOTE_WAKEUP) - case REQREC_DEVICE: - if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup) - 74c: 80 91 10 02 lds r24, 0x0210 - 750: 81 30 cpi r24, 0x01 ; 1 - 752: 09 f0 breq .+2 ; 0x756 <USB_Device_ProcessControlRequest+0xd8> - 754: ab c0 rjmp .+342 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - USB_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature); - 756: 10 92 0a 02 sts 0x020A, r1 - 75a: 33 30 cpi r19, 0x03 ; 3 - 75c: 69 f5 brne .+90 ; 0x7b8 <USB_Device_ProcessControlRequest+0x13a> - 75e: 80 93 0a 02 sts 0x020A, r24 - 762: 2a c0 rjmp .+84 ; 0x7b8 <USB_Device_ProcessControlRequest+0x13a> - - break; - #endif - #if !defined(CONTROL_ONLY_DEVICE) - case REQREC_ENDPOINT: - if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt) - 764: 80 91 10 02 lds r24, 0x0210 - 768: 88 23 and r24, r24 - 76a: 31 f5 brne .+76 ; 0x7b8 <USB_Device_ProcessControlRequest+0x13a> - { - uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); - 76c: 20 91 12 02 lds r18, 0x0212 - 770: 27 70 andi r18, 0x07 ; 7 - - if (EndpointIndex == ENDPOINT_CONTROLEP) - 772: 09 f4 brne .+2 ; 0x776 <USB_Device_ProcessControlRequest+0xf8> - 774: 9b c0 rjmp .+310 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - 776: 20 93 e9 00 sts 0x00E9, r18 - * \return Boolean True if the currently selected endpoint is enabled, 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); - 77a: 80 91 eb 00 lds r24, 0x00EB - return; - - Endpoint_SelectEndpoint(EndpointIndex); - - if (Endpoint_IsEnabled()) - 77e: 80 ff sbrs r24, 0 - 780: 1b c0 rjmp .+54 ; 0x7b8 <USB_Device_ProcessControlRequest+0x13a> - { - if (USB_ControlRequest.bRequest == REQ_SetFeature) - 782: 33 30 cpi r19, 0x03 ; 3 - 784: 21 f4 brne .+8 ; 0x78e <USB_Device_ProcessControlRequest+0x110> - * \ingroup Group_EndpointPacketManagement - */ - static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_StallTransaction(void) - { - UECONX |= (1 << STALLRQ); - 786: 80 91 eb 00 lds r24, 0x00EB - 78a: 80 62 ori r24, 0x20 ; 32 - 78c: 13 c0 rjmp .+38 ; 0x7b4 <USB_Device_ProcessControlRequest+0x136> - * \ingroup Group_EndpointPacketManagement - */ - static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ClearStall(void) - { - UECONX |= (1 << STALLRQC); - 78e: 80 91 eb 00 lds r24, 0x00EB - 792: 80 61 ori r24, 0x10 ; 16 - 794: 80 93 eb 00 sts 0x00EB, r24 - * \param[in] EndpointNumber Endpoint number whose FIFO buffers are to be reset. - */ - static inline void Endpoint_ResetFIFO(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_ResetFIFO(const uint8_t EndpointNumber) - { - UERST = (1 << EndpointNumber); - 798: 81 e0 ldi r24, 0x01 ; 1 - 79a: 90 e0 ldi r25, 0x00 ; 0 - 79c: 02 c0 rjmp .+4 ; 0x7a2 <USB_Device_ProcessControlRequest+0x124> - 79e: 88 0f add r24, r24 - 7a0: 99 1f adc r25, r25 - 7a2: 2a 95 dec r18 - 7a4: e2 f7 brpl .-8 ; 0x79e <USB_Device_ProcessControlRequest+0x120> - 7a6: 80 93 ea 00 sts 0x00EA, r24 - UERST = 0; - 7aa: 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); - 7ae: 80 91 eb 00 lds r24, 0x00EB - 7b2: 88 60 ori r24, 0x08 ; 8 - 7b4: 80 93 eb 00 sts 0x00EB, r24 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - 7b8: 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); - 7bc: 80 91 e8 00 lds r24, 0x00E8 - 7c0: 87 7f andi r24, 0xF7 ; 247 - 7c2: 54 c0 rjmp .+168 ; 0x86c <USB_Device_ProcessControlRequest+0x1ee> - USB_Device_ClearSetFeature(); - } - - break; - case REQ_SetAddress: - if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 7c4: 88 23 and r24, r24 - 7c6: 09 f0 breq .+2 ; 0x7ca <USB_Device_ProcessControlRequest+0x14c> - 7c8: 71 c0 rjmp .+226 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - } -} - -static void USB_Device_SetAddress(void) -{ - uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F); - 7ca: 10 91 10 02 lds r17, 0x0210 - 7ce: 1f 77 andi r17, 0x7F ; 127 - - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - 7d0: 0f b7 in r16, 0x3f ; 63 - return 1; -} - -static __inline__ uint8_t __iCliRetVal(void) -{ - cli(); - 7d2: f8 94 cli - 7d4: 80 91 e8 00 lds r24, 0x00E8 - 7d8: 87 7f andi r24, 0xF7 ; 247 - 7da: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearSETUP(); - - Endpoint_ClearStatusStage(); - 7de: 0c de rcall .-1000 ; 0x3f8 <Endpoint_ClearStatusStage> - * \return Boolean true if the current endpoint is ready for an IN packet, 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); - 7e0: 80 91 e8 00 lds r24, 0x00E8 - - while (!(Endpoint_IsINReady())); - 7e4: 80 ff sbrs r24, 0 - 7e6: fc cf rjmp .-8 ; 0x7e0 <USB_Device_ProcessControlRequest+0x162> - - USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default; - 7e8: 11 23 and r17, r17 - 7ea: 11 f4 brne .+4 ; 0x7f0 <USB_Device_ProcessControlRequest+0x172> - 7ec: 82 e0 ldi r24, 0x02 ; 2 - 7ee: 01 c0 rjmp .+2 ; 0x7f2 <USB_Device_ProcessControlRequest+0x174> - 7f0: 83 e0 ldi r24, 0x03 ; 3 - 7f2: 80 93 0d 02 sts 0x020D, r24 - #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)); - 7f6: 80 91 e3 00 lds r24, 0x00E3 - 7fa: 80 78 andi r24, 0x80 ; 128 - 7fc: 18 2b or r17, r24 - 7fe: 10 93 e3 00 sts 0x00E3, r17 - UDADDR |= (1 << ADDEN); - 802: 80 91 e3 00 lds r24, 0x00E3 - 806: 80 68 ori r24, 0x80 ; 128 - 808: 80 93 e3 00 sts 0x00E3, r24 - (void)__s; -} - -static __inline__ void __iRestore(const uint8_t *__s) -{ - SREG = *__s; - 80c: 0f bf out 0x3f, r16 ; 63 - __asm__ volatile ("" ::: "memory"); - 80e: 4e c0 rjmp .+156 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - USB_Device_SetAddress(); - - break; - case REQ_GetDescriptor: - if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - 810: 80 58 subi r24, 0x80 ; 128 - 812: 82 30 cpi r24, 0x02 ; 2 - 814: 08 f0 brcs .+2 ; 0x818 <USB_Device_ProcessControlRequest+0x19a> - 816: 4a c0 rjmp .+148 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - USB_Device_GetInternalSerialDescriptor(); - return; - } - #endif - - if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex, - 818: 80 91 10 02 lds r24, 0x0210 - 81c: 90 91 11 02 lds r25, 0x0211 - 820: 60 91 12 02 lds r22, 0x0212 - 824: ae 01 movw r20, r28 - 826: 4f 5f subi r20, 0xFF ; 255 - 828: 5f 4f sbci r21, 0xFF ; 255 - 82a: a5 dd rcall .-1206 ; 0x376 <CALLBACK_USB_GetDescriptor> - 82c: bc 01 movw r22, r24 - 82e: 00 97 sbiw r24, 0x00 ; 0 - 830: 09 f4 brne .+2 ; 0x834 <USB_Device_ProcessControlRequest+0x1b6> - 832: 3c c0 rjmp .+120 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - * \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); - 834: 80 91 e8 00 lds r24, 0x00E8 - 838: 87 7f andi r24, 0xF7 ; 247 - 83a: 80 93 e8 00 sts 0x00E8, r24 - #if defined(USE_RAM_DESCRIPTORS) - 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); - 83e: 89 81 ldd r24, Y+1 ; 0x01 - 840: 9a 81 ldd r25, Y+2 ; 0x02 - 842: a8 d0 rcall .+336 ; 0x994 <Endpoint_Write_Control_PStream_LE> - */ - 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)); - 844: 80 91 e8 00 lds r24, 0x00E8 - 848: 8b 77 andi r24, 0x7B ; 123 - 84a: 80 93 e8 00 sts 0x00E8, r24 - 84e: 2e c0 rjmp .+92 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - USB_Device_GetDescriptor(); - } - - break; - case REQ_GetConfiguration: - if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) - 850: 80 38 cpi r24, 0x80 ; 128 - 852: 61 f5 brne .+88 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - * \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); - 854: 80 91 e8 00 lds r24, 0x00E8 - 858: 87 7f andi r24, 0xF7 ; 247 - 85a: 80 93 e8 00 sts 0x00E8, r24 - -static void USB_Device_GetConfiguration(void) -{ - Endpoint_ClearSETUP(); - - Endpoint_Write_Byte(USB_ConfigurationNumber); - 85e: 80 91 0b 02 lds r24, 0x020B - * \param[in] Byte Next byte to write into the the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_Byte(const uint8_t Byte) - { - UEDATX = Byte; - 862: 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)); - 866: 80 91 e8 00 lds r24, 0x00E8 - 86a: 8e 77 andi r24, 0x7E ; 126 - 86c: 80 93 e8 00 sts 0x00E8, r24 - Endpoint_ClearIN(); - - Endpoint_ClearStatusStage(); - 870: c3 dd rcall .-1146 ; 0x3f8 <Endpoint_ClearStatusStage> - 872: 1c c0 rjmp .+56 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) - USB_Device_GetConfiguration(); - - break; - case REQ_SetConfiguration: - if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 874: 88 23 and r24, r24 - 876: d1 f4 brne .+52 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> -} - -static void USB_Device_SetConfiguration(void) -{ - #if defined(FIXED_NUM_CONFIGURATIONS) - if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS) - 878: 90 91 10 02 lds r25, 0x0210 - 87c: 92 30 cpi r25, 0x02 ; 2 - 87e: b0 f4 brcc .+44 ; 0x8ac <USB_Device_ProcessControlRequest+0x22e> - * \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); - 880: 80 91 e8 00 lds r24, 0x00E8 - 884: 87 7f andi r24, 0xF7 ; 247 - 886: 80 93 e8 00 sts 0x00E8, r24 - } - #endif - - Endpoint_ClearSETUP(); - - USB_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue; - 88a: 90 93 0b 02 sts 0x020B, r25 - - Endpoint_ClearStatusStage(); - 88e: b4 dd rcall .-1176 ; 0x3f8 <Endpoint_ClearStatusStage> - - if (USB_ConfigurationNumber) - 890: 80 91 0b 02 lds r24, 0x020B - 894: 88 23 and r24, r24 - 896: 31 f4 brne .+12 ; 0x8a4 <USB_Device_ProcessControlRequest+0x226> - } - - static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE; - static inline bool USB_Device_IsAddressSet(void) - { - return (UDADDR & (1 << ADDEN)); - 898: 80 91 e3 00 lds r24, 0x00E3 - USB_DeviceState = DEVICE_STATE_Configured; - else - USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 89c: 87 fd sbrc r24, 7 - 89e: 02 c0 rjmp .+4 ; 0x8a4 <USB_Device_ProcessControlRequest+0x226> - 8a0: 81 e0 ldi r24, 0x01 ; 1 - 8a2: 01 c0 rjmp .+2 ; 0x8a6 <USB_Device_ProcessControlRequest+0x228> - 8a4: 84 e0 ldi r24, 0x04 ; 4 - 8a6: 80 93 0d 02 sts 0x020D, r24 - - EVENT_USB_Device_ConfigurationChanged(); - 8aa: 7d dc rcall .-1798 ; 0x1a6 <EVENT_USB_Device_ConfigurationChanged> - * \return Boolean true if the selected endpoint has received a SETUP packet, 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); - 8ac: 80 91 e8 00 lds r24, 0x00E8 - - break; - } - } - - if (Endpoint_IsSETUPReceived()) - 8b0: 83 ff sbrs r24, 3 - 8b2: 0a c0 rjmp .+20 ; 0x8c8 <USB_Device_ProcessControlRequest+0x24a> - * \ingroup Group_EndpointPacketManagement - */ - static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; - static inline void Endpoint_StallTransaction(void) - { - UECONX |= (1 << STALLRQ); - 8b4: 80 91 eb 00 lds r24, 0x00EB - 8b8: 80 62 ori r24, 0x20 ; 32 - 8ba: 80 93 eb 00 sts 0x00EB, r24 - * \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); - 8be: 80 91 e8 00 lds r24, 0x00E8 - 8c2: 87 7f andi r24, 0xF7 ; 247 - 8c4: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_StallTransaction(); - Endpoint_ClearSETUP(); - } -} - 8c8: 0f 90 pop r0 - 8ca: 0f 90 pop r0 - 8cc: cf 91 pop r28 - 8ce: df 91 pop r29 - 8d0: 1f 91 pop r17 - 8d2: 0f 91 pop r16 - 8d4: 08 95 ret - -000008d6 <USB_Event_Stub>: -#include "Events.h" - -void USB_Event_Stub(void) -{ - -} - 8d6: 08 95 ret - -000008d8 <Endpoint_Write_Control_Stream_LE>: - 8d8: 9c 01 movw r18, r24 - uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - bool LastPacketFull = false; - - if (Length > USB_ControlRequest.wLength) - 8da: 40 91 14 02 lds r20, 0x0214 - 8de: 50 91 15 02 lds r21, 0x0215 - 8e2: 46 17 cp r20, r22 - 8e4: 57 07 cpc r21, r23 - 8e6: 18 f4 brcc .+6 ; 0x8ee <Endpoint_Write_Control_Stream_LE+0x16> -uint8_t TEMPLATE_FUNC_NAME (const void* Buffer, - uint16_t Length) -{ - uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - 8e8: f9 01 movw r30, r18 - 8ea: 90 e0 ldi r25, 0x00 ; 0 - 8ec: 3d c0 rjmp .+122 ; 0x968 <Endpoint_Write_Control_Stream_LE+0x90> - bool LastPacketFull = false; - - if (Length > USB_ControlRequest.wLength) - Length = USB_ControlRequest.wLength; - else if (!(Length)) - 8ee: 61 15 cp r22, r1 - 8f0: 71 05 cpc r23, r1 - 8f2: 11 f0 breq .+4 ; 0x8f8 <Endpoint_Write_Control_Stream_LE+0x20> - 8f4: ab 01 movw r20, r22 - 8f6: f8 cf rjmp .-16 ; 0x8e8 <Endpoint_Write_Control_Stream_LE+0x10> - */ - 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)); - 8f8: 80 91 e8 00 lds r24, 0x00E8 - 8fc: 8e 77 andi r24, 0x7E ; 126 - 8fe: 80 93 e8 00 sts 0x00E8, r24 - 902: 40 e0 ldi r20, 0x00 ; 0 - 904: 50 e0 ldi r21, 0x00 ; 0 - 906: f0 cf rjmp .-32 ; 0x8e8 <Endpoint_Write_Control_Stream_LE+0x10> - Endpoint_ClearIN(); - - while (Length || LastPacketFull) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - 908: 80 91 0d 02 lds r24, 0x020D - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 90c: 88 23 and r24, r24 - 90e: f1 f1 breq .+124 ; 0x98c <Endpoint_Write_Control_Stream_LE+0xb4> - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 910: 85 30 cpi r24, 0x05 ; 5 - 912: f1 f1 breq .+124 ; 0x990 <Endpoint_Write_Control_Stream_LE+0xb8> - * \return Boolean true if the selected endpoint has received a SETUP packet, 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); - 914: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_BusSuspended; - else if (Endpoint_IsSETUPReceived()) - 918: 83 ff sbrs r24, 3 - 91a: 02 c0 rjmp .+4 ; 0x920 <Endpoint_Write_Control_Stream_LE+0x48> - 91c: 81 e0 ldi r24, 0x01 ; 1 - 91e: 08 95 ret - * \return Boolean true if current endpoint is has received an OUT packet, 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); - 920: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_HostAborted; - else if (Endpoint_IsOUTReceived()) - 924: 82 fd sbrc r24, 2 - 926: 2c c0 rjmp .+88 ; 0x980 <Endpoint_Write_Control_Stream_LE+0xa8> - * \return Boolean true if the current endpoint is ready for an IN packet, 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); - 928: 80 91 e8 00 lds r24, 0x00E8 - break; - - if (Endpoint_IsINReady()) - 92c: 80 ff sbrs r24, 0 - 92e: 1c c0 rjmp .+56 ; 0x968 <Endpoint_Write_Control_Stream_LE+0x90> - #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; - 930: 80 91 f2 00 lds r24, 0x00F2 - 934: 28 2f mov r18, r24 - 936: 30 e0 ldi r19, 0x00 ; 0 - 938: 07 c0 rjmp .+14 ; 0x948 <Endpoint_Write_Control_Stream_LE+0x70> - { - uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); - - while (Length && (BytesInEndpoint < USB_ControlEndpointSize)) - { - TEMPLATE_TRANSFER_BYTE(DataStream); - 93a: 81 91 ld r24, Z+ - * \param[in] Byte Next byte to write into the the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_Byte(const uint8_t Byte) - { - UEDATX = Byte; - 93c: 80 93 f1 00 sts 0x00F1, r24 - Length--; - 940: 41 50 subi r20, 0x01 ; 1 - 942: 50 40 sbci r21, 0x00 ; 0 - BytesInEndpoint++; - 944: 2f 5f subi r18, 0xFF ; 255 - 946: 3f 4f sbci r19, 0xFF ; 255 - - if (Endpoint_IsINReady()) - { - uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); - - while (Length && (BytesInEndpoint < USB_ControlEndpointSize)) - 948: 41 15 cp r20, r1 - 94a: 51 05 cpc r21, r1 - 94c: 19 f0 breq .+6 ; 0x954 <Endpoint_Write_Control_Stream_LE+0x7c> - 94e: 28 30 cpi r18, 0x08 ; 8 - 950: 31 05 cpc r19, r1 - 952: 98 f3 brcs .-26 ; 0x93a <Endpoint_Write_Control_Stream_LE+0x62> - TEMPLATE_TRANSFER_BYTE(DataStream); - Length--; - BytesInEndpoint++; - } - - LastPacketFull = (BytesInEndpoint == USB_ControlEndpointSize); - 954: 90 e0 ldi r25, 0x00 ; 0 - 956: 28 30 cpi r18, 0x08 ; 8 - 958: 31 05 cpc r19, r1 - 95a: 09 f4 brne .+2 ; 0x95e <Endpoint_Write_Control_Stream_LE+0x86> - 95c: 91 e0 ldi r25, 0x01 ; 1 - */ - 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)); - 95e: 80 91 e8 00 lds r24, 0x00E8 - 962: 8e 77 andi r24, 0x7E ; 126 - 964: 80 93 e8 00 sts 0x00E8, r24 - if (Length > USB_ControlRequest.wLength) - Length = USB_ControlRequest.wLength; - else if (!(Length)) - Endpoint_ClearIN(); - - while (Length || LastPacketFull) - 968: 41 15 cp r20, r1 - 96a: 51 05 cpc r21, r1 - 96c: 69 f6 brne .-102 ; 0x908 <Endpoint_Write_Control_Stream_LE+0x30> - 96e: 99 23 and r25, r25 - 970: 59 f6 brne .-106 ; 0x908 <Endpoint_Write_Control_Stream_LE+0x30> - 972: 06 c0 rjmp .+12 ; 0x980 <Endpoint_Write_Control_Stream_LE+0xa8> - } - } - - while (!(Endpoint_IsOUTReceived())) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - 974: 80 91 0d 02 lds r24, 0x020D - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 978: 88 23 and r24, r24 - 97a: 41 f0 breq .+16 ; 0x98c <Endpoint_Write_Control_Stream_LE+0xb4> - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 97c: 85 30 cpi r24, 0x05 ; 5 - 97e: 41 f0 breq .+16 ; 0x990 <Endpoint_Write_Control_Stream_LE+0xb8> - * \return Boolean true if current endpoint is has received an OUT packet, 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); - 980: 80 91 e8 00 lds r24, 0x00E8 - LastPacketFull = (BytesInEndpoint == USB_ControlEndpointSize); - Endpoint_ClearIN(); - } - } - - while (!(Endpoint_IsOUTReceived())) - 984: 82 ff sbrs r24, 2 - 986: f6 cf rjmp .-20 ; 0x974 <Endpoint_Write_Control_Stream_LE+0x9c> - 988: 80 e0 ldi r24, 0x00 ; 0 - 98a: 08 95 ret - 98c: 82 e0 ldi r24, 0x02 ; 2 - 98e: 08 95 ret - 990: 83 e0 ldi r24, 0x03 ; 3 - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_RWCSTREAM_BusSuspended; - } - - return ENDPOINT_RWCSTREAM_NoError; -} - 992: 08 95 ret - -00000994 <Endpoint_Write_Control_PStream_LE>: -uint8_t TEMPLATE_FUNC_NAME (const void* Buffer, - uint16_t Length) -{ - 994: 9c 01 movw r18, r24 - uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - bool LastPacketFull = false; - - if (Length > USB_ControlRequest.wLength) - 996: 40 91 14 02 lds r20, 0x0214 - 99a: 50 91 15 02 lds r21, 0x0215 - 99e: 46 17 cp r20, r22 - 9a0: 57 07 cpc r21, r23 - 9a2: 10 f4 brcc .+4 ; 0x9a8 <Endpoint_Write_Control_PStream_LE+0x14> -uint8_t TEMPLATE_FUNC_NAME (const void* Buffer, - uint16_t Length) -{ - uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - 9a4: 60 e0 ldi r22, 0x00 ; 0 - 9a6: 3f c0 rjmp .+126 ; 0xa26 <Endpoint_Write_Control_PStream_LE+0x92> - bool LastPacketFull = false; - - if (Length > USB_ControlRequest.wLength) - Length = USB_ControlRequest.wLength; - else if (!(Length)) - 9a8: 61 15 cp r22, r1 - 9aa: 71 05 cpc r23, r1 - 9ac: 11 f0 breq .+4 ; 0x9b2 <Endpoint_Write_Control_PStream_LE+0x1e> - 9ae: ab 01 movw r20, r22 - 9b0: f9 cf rjmp .-14 ; 0x9a4 <Endpoint_Write_Control_PStream_LE+0x10> - */ - 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)); - 9b2: 80 91 e8 00 lds r24, 0x00E8 - 9b6: 8e 77 andi r24, 0x7E ; 126 - 9b8: 80 93 e8 00 sts 0x00E8, r24 - 9bc: 40 e0 ldi r20, 0x00 ; 0 - 9be: 50 e0 ldi r21, 0x00 ; 0 - 9c0: f1 cf rjmp .-30 ; 0x9a4 <Endpoint_Write_Control_PStream_LE+0x10> - Endpoint_ClearIN(); - - while (Length || LastPacketFull) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - 9c2: 80 91 0d 02 lds r24, 0x020D - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 9c6: 88 23 and r24, r24 - 9c8: 09 f4 brne .+2 ; 0x9cc <Endpoint_Write_Control_PStream_LE+0x38> - 9ca: 3f c0 rjmp .+126 ; 0xa4a <Endpoint_Write_Control_PStream_LE+0xb6> - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 9cc: 85 30 cpi r24, 0x05 ; 5 - 9ce: 09 f4 brne .+2 ; 0x9d2 <Endpoint_Write_Control_PStream_LE+0x3e> - 9d0: 3e c0 rjmp .+124 ; 0xa4e <Endpoint_Write_Control_PStream_LE+0xba> - * \return Boolean true if the selected endpoint has received a SETUP packet, 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); - 9d2: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_BusSuspended; - else if (Endpoint_IsSETUPReceived()) - 9d6: 83 ff sbrs r24, 3 - 9d8: 02 c0 rjmp .+4 ; 0x9de <Endpoint_Write_Control_PStream_LE+0x4a> - 9da: 81 e0 ldi r24, 0x01 ; 1 - 9dc: 08 95 ret - * \return Boolean true if current endpoint is has received an OUT packet, 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); - 9de: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_HostAborted; - else if (Endpoint_IsOUTReceived()) - 9e2: 82 fd sbrc r24, 2 - 9e4: 2c c0 rjmp .+88 ; 0xa3e <Endpoint_Write_Control_PStream_LE+0xaa> - * \return Boolean true if the current endpoint is ready for an IN packet, 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); - 9e6: 80 91 e8 00 lds r24, 0x00E8 - break; - - if (Endpoint_IsINReady()) - 9ea: 80 ff sbrs r24, 0 - 9ec: 1c c0 rjmp .+56 ; 0xa26 <Endpoint_Write_Control_PStream_LE+0x92> - #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; - 9ee: 80 91 f2 00 lds r24, 0x00F2 - 9f2: 90 e0 ldi r25, 0x00 ; 0 - 9f4: 09 c0 rjmp .+18 ; 0xa08 <Endpoint_Write_Control_PStream_LE+0x74> - { - uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); - - while (Length && (BytesInEndpoint < USB_ControlEndpointSize)) - 9f6: f9 01 movw r30, r18 - { - TEMPLATE_TRANSFER_BYTE(DataStream); - 9f8: 2f 5f subi r18, 0xFF ; 255 - 9fa: 3f 4f sbci r19, 0xFF ; 255 - 9fc: e4 91 lpm r30, Z+ - * \param[in] Byte Next byte to write into the the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_Byte(const uint8_t Byte) - { - UEDATX = Byte; - 9fe: e0 93 f1 00 sts 0x00F1, r30 - Length--; - a02: 41 50 subi r20, 0x01 ; 1 - a04: 50 40 sbci r21, 0x00 ; 0 - BytesInEndpoint++; - a06: 01 96 adiw r24, 0x01 ; 1 - - if (Endpoint_IsINReady()) - { - uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); - - while (Length && (BytesInEndpoint < USB_ControlEndpointSize)) - a08: 41 15 cp r20, r1 - a0a: 51 05 cpc r21, r1 - a0c: 19 f0 breq .+6 ; 0xa14 <Endpoint_Write_Control_PStream_LE+0x80> - a0e: 88 30 cpi r24, 0x08 ; 8 - a10: 91 05 cpc r25, r1 - a12: 88 f3 brcs .-30 ; 0x9f6 <Endpoint_Write_Control_PStream_LE+0x62> - TEMPLATE_TRANSFER_BYTE(DataStream); - Length--; - BytesInEndpoint++; - } - - LastPacketFull = (BytesInEndpoint == USB_ControlEndpointSize); - a14: 60 e0 ldi r22, 0x00 ; 0 - a16: 08 97 sbiw r24, 0x08 ; 8 - a18: 09 f4 brne .+2 ; 0xa1c <Endpoint_Write_Control_PStream_LE+0x88> - a1a: 61 e0 ldi r22, 0x01 ; 1 - */ - 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)); - a1c: 80 91 e8 00 lds r24, 0x00E8 - a20: 8e 77 andi r24, 0x7E ; 126 - a22: 80 93 e8 00 sts 0x00E8, r24 - if (Length > USB_ControlRequest.wLength) - Length = USB_ControlRequest.wLength; - else if (!(Length)) - Endpoint_ClearIN(); - - while (Length || LastPacketFull) - a26: 41 15 cp r20, r1 - a28: 51 05 cpc r21, r1 - a2a: 59 f6 brne .-106 ; 0x9c2 <Endpoint_Write_Control_PStream_LE+0x2e> - a2c: 66 23 and r22, r22 - a2e: 49 f6 brne .-110 ; 0x9c2 <Endpoint_Write_Control_PStream_LE+0x2e> - a30: 06 c0 rjmp .+12 ; 0xa3e <Endpoint_Write_Control_PStream_LE+0xaa> - } - } - - while (!(Endpoint_IsOUTReceived())) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - a32: 80 91 0d 02 lds r24, 0x020D - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - a36: 88 23 and r24, r24 - a38: 41 f0 breq .+16 ; 0xa4a <Endpoint_Write_Control_PStream_LE+0xb6> - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - a3a: 85 30 cpi r24, 0x05 ; 5 - a3c: 41 f0 breq .+16 ; 0xa4e <Endpoint_Write_Control_PStream_LE+0xba> - * \return Boolean true if current endpoint is has received an OUT packet, 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); - a3e: 80 91 e8 00 lds r24, 0x00E8 - LastPacketFull = (BytesInEndpoint == USB_ControlEndpointSize); - Endpoint_ClearIN(); - } - } - - while (!(Endpoint_IsOUTReceived())) - a42: 82 ff sbrs r24, 2 - a44: f6 cf rjmp .-20 ; 0xa32 <Endpoint_Write_Control_PStream_LE+0x9e> - a46: 80 e0 ldi r24, 0x00 ; 0 - a48: 08 95 ret - a4a: 82 e0 ldi r24, 0x02 ; 2 - a4c: 08 95 ret - a4e: 83 e0 ldi r24, 0x03 ; 3 - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_RWCSTREAM_BusSuspended; - } - - return ENDPOINT_RWCSTREAM_NoError; -} - a50: 08 95 ret - -00000a52 <Endpoint_Read_Control_Stream_LE>: -uint8_t TEMPLATE_FUNC_NAME (void* Buffer, - uint16_t Length) -{ - a52: 9c 01 movw r18, r24 - uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - - if (!(Length)) - a54: 61 15 cp r22, r1 - a56: 71 05 cpc r23, r1 - a58: 29 f4 brne .+10 ; 0xa64 <Endpoint_Read_Control_Stream_LE+0x12> - */ - 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)); - a5a: 80 91 e8 00 lds r24, 0x00E8 - a5e: 8b 77 andi r24, 0x7B ; 123 - a60: 80 93 e8 00 sts 0x00E8, r24 -uint8_t TEMPLATE_FUNC_NAME (void* Buffer, - uint16_t Length) -{ - uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - a64: f9 01 movw r30, r18 - a66: 20 c0 rjmp .+64 ; 0xaa8 <Endpoint_Read_Control_Stream_LE+0x56> - if (!(Length)) - Endpoint_ClearOUT(); - - while (Length) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - a68: 80 91 0d 02 lds r24, 0x020D - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - a6c: 88 23 and r24, r24 - a6e: 61 f1 breq .+88 ; 0xac8 <Endpoint_Read_Control_Stream_LE+0x76> - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - a70: 85 30 cpi r24, 0x05 ; 5 - a72: 61 f1 breq .+88 ; 0xacc <Endpoint_Read_Control_Stream_LE+0x7a> - * \return Boolean true if the selected endpoint has received a SETUP packet, 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); - a74: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_BusSuspended; - else if (Endpoint_IsSETUPReceived()) - a78: 83 ff sbrs r24, 3 - a7a: 02 c0 rjmp .+4 ; 0xa80 <Endpoint_Read_Control_Stream_LE+0x2e> - a7c: 81 e0 ldi r24, 0x01 ; 1 - a7e: 08 95 ret - * \return Boolean true if current endpoint is has received an OUT packet, 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); - a80: 80 91 e8 00 lds r24, 0x00E8 - return ENDPOINT_RWCSTREAM_HostAborted; - - if (Endpoint_IsOUTReceived()) - a84: 82 ff sbrs r24, 2 - a86: f0 cf rjmp .-32 ; 0xa68 <Endpoint_Read_Control_Stream_LE+0x16> - a88: 06 c0 rjmp .+12 ; 0xa96 <Endpoint_Read_Control_Stream_LE+0x44> - * \return Next byte in the currently selected endpoint's FIFO buffer. - */ - static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_Read_Byte(void) - { - return UEDATX; - a8a: 80 91 f1 00 lds r24, 0x00F1 - { - while (Length && Endpoint_BytesInEndpoint()) - { - TEMPLATE_TRANSFER_BYTE(DataStream); - a8e: 81 93 st Z+, r24 - Length--; - a90: 61 50 subi r22, 0x01 ; 1 - a92: 70 40 sbci r23, 0x00 ; 0 - else if (Endpoint_IsSETUPReceived()) - return ENDPOINT_RWCSTREAM_HostAborted; - - if (Endpoint_IsOUTReceived()) - { - while (Length && Endpoint_BytesInEndpoint()) - a94: 21 f0 breq .+8 ; 0xa9e <Endpoint_Read_Control_Stream_LE+0x4c> - #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; - a96: 80 91 f2 00 lds r24, 0x00F2 - a9a: 88 23 and r24, r24 - a9c: b1 f7 brne .-20 ; 0xa8a <Endpoint_Read_Control_Stream_LE+0x38> - */ - 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)); - a9e: 80 91 e8 00 lds r24, 0x00E8 - aa2: 8b 77 andi r24, 0x7B ; 123 - aa4: 80 93 e8 00 sts 0x00E8, r24 - uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - - if (!(Length)) - Endpoint_ClearOUT(); - - while (Length) - aa8: 61 15 cp r22, r1 - aaa: 71 05 cpc r23, r1 - aac: e9 f6 brne .-70 ; 0xa68 <Endpoint_Read_Control_Stream_LE+0x16> - aae: 06 c0 rjmp .+12 ; 0xabc <Endpoint_Read_Control_Stream_LE+0x6a> - } - } - - while (!(Endpoint_IsINReady())) - { - uint8_t USB_DeviceState_LCL = USB_DeviceState; - ab0: 80 91 0d 02 lds r24, 0x020D - - if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - ab4: 88 23 and r24, r24 - ab6: 41 f0 breq .+16 ; 0xac8 <Endpoint_Read_Control_Stream_LE+0x76> - return ENDPOINT_RWCSTREAM_DeviceDisconnected; - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - ab8: 85 30 cpi r24, 0x05 ; 5 - aba: 41 f0 breq .+16 ; 0xacc <Endpoint_Read_Control_Stream_LE+0x7a> - * \return Boolean true if the current endpoint is ready for an IN packet, 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); - abc: 80 91 e8 00 lds r24, 0x00E8 - - Endpoint_ClearOUT(); - } - } - - while (!(Endpoint_IsINReady())) - ac0: 80 ff sbrs r24, 0 - ac2: f6 cf rjmp .-20 ; 0xab0 <Endpoint_Read_Control_Stream_LE+0x5e> - ac4: 80 e0 ldi r24, 0x00 ; 0 - ac6: 08 95 ret - ac8: 82 e0 ldi r24, 0x02 ; 2 - aca: 08 95 ret - acc: 83 e0 ldi r24, 0x03 ; 3 - else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - return ENDPOINT_RWCSTREAM_BusSuspended; - } - - return ENDPOINT_RWCSTREAM_NoError; -} - ace: 08 95 ret - -00000ad0 <USB_USBTask>: -#if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR) -volatile uint8_t USB_DeviceState; -#endif - -void USB_USBTask(void) -{ - ad0: 1f 93 push r17 -} - -#if defined(USB_CAN_BE_DEVICE) -static void USB_DeviceTask(void) -{ - if (USB_DeviceState != DEVICE_STATE_Unattached) - ad2: 80 91 0d 02 lds r24, 0x020D - ad6: 88 23 and r24, r24 - ad8: 61 f0 breq .+24 ; 0xaf2 <USB_USBTask+0x22> - */ - 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); - ada: 10 91 e9 00 lds r17, 0x00E9 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - ade: 10 92 e9 00 sts 0x00E9, r1 - * \return Boolean true if the selected endpoint has received a SETUP packet, 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); - ae2: 80 91 e8 00 lds r24, 0x00E8 - { - uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); - - Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); - - if (Endpoint_IsSETUPReceived()) - ae6: 83 ff sbrs r24, 3 - ae8: 01 c0 rjmp .+2 ; 0xaec <USB_USBTask+0x1c> - USB_Device_ProcessControlRequest(); - aea: c9 dd rcall .-1134 ; 0x67e <USB_Device_ProcessControlRequest> - */ - 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); - aec: 17 70 andi r17, 0x07 ; 7 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - aee: 10 93 e9 00 sts 0x00E9, r17 - if (USB_CurrentMode == USB_MODE_Device) - USB_DeviceTask(); - else if (USB_CurrentMode == USB_MODE_Host) - USB_HostTask(); - #endif -} - af2: 1f 91 pop r17 - af4: 08 95 ret - -00000af6 <CDC_Device_Event_Stub>: -#include "CDC.h" - -void CDC_Device_Event_Stub(void) -{ - -} - af6: 08 95 ret - -00000af8 <CDC_Device_ReceiveByte>: - return 0; - } -} - -int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - af8: fc 01 movw r30, r24 - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - afa: 80 91 0d 02 lds r24, 0x020D - afe: 84 30 cpi r24, 0x04 ; 4 - b00: 21 f5 brne .+72 ; 0xb4a <CDC_Device_ReceiveByte+0x52> - b02: 87 85 ldd r24, Z+15 ; 0x0f - b04: 90 89 ldd r25, Z+16 ; 0x10 - b06: a1 89 ldd r26, Z+17 ; 0x11 - b08: b2 89 ldd r27, Z+18 ; 0x12 - b0a: 00 97 sbiw r24, 0x00 ; 0 - b0c: a1 05 cpc r26, r1 - b0e: b1 05 cpc r27, r1 - b10: e1 f0 breq .+56 ; 0xb4a <CDC_Device_ReceiveByte+0x52> - return -1; - - int16_t ReceivedByte = -1; - - Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpointNumber); - b12: 85 81 ldd r24, Z+5 ; 0x05 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - b14: 80 93 e9 00 sts 0x00E9, r24 - * \return Boolean true if current endpoint is has received an OUT packet, 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); - b18: 80 91 e8 00 lds r24, 0x00E8 - - if (Endpoint_IsOUTReceived()) - b1c: 82 ff sbrs r24, 2 - b1e: 15 c0 rjmp .+42 ; 0xb4a <CDC_Device_ReceiveByte+0x52> - #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; - b20: 80 91 f2 00 lds r24, 0x00F2 - { - if (Endpoint_BytesInEndpoint()) - b24: 88 23 and r24, r24 - b26: 19 f4 brne .+6 ; 0xb2e <CDC_Device_ReceiveByte+0x36> - b28: 2f ef ldi r18, 0xFF ; 255 - b2a: 3f ef ldi r19, 0xFF ; 255 - b2c: 04 c0 rjmp .+8 ; 0xb36 <CDC_Device_ReceiveByte+0x3e> - * \return Next byte in the currently selected endpoint's FIFO buffer. - */ - static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; - static inline uint8_t Endpoint_Read_Byte(void) - { - return UEDATX; - b2e: 80 91 f1 00 lds r24, 0x00F1 - ReceivedByte = Endpoint_Read_Byte(); - b32: 28 2f mov r18, r24 - b34: 30 e0 ldi r19, 0x00 ; 0 - #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; - b36: 80 91 f2 00 lds r24, 0x00F2 - - if (!(Endpoint_BytesInEndpoint())) - b3a: 88 23 and r24, r24 - b3c: 41 f4 brne .+16 ; 0xb4e <CDC_Device_ReceiveByte+0x56> - */ - 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)); - b3e: 80 91 e8 00 lds r24, 0x00E8 - b42: 8b 77 andi r24, 0x7B ; 123 - b44: 80 93 e8 00 sts 0x00E8, r24 - b48: 02 c0 rjmp .+4 ; 0xb4e <CDC_Device_ReceiveByte+0x56> - b4a: 2f ef ldi r18, 0xFF ; 255 - b4c: 3f ef ldi r19, 0xFF ; 255 - Endpoint_ClearOUT(); - } - - return ReceivedByte; -} - b4e: c9 01 movw r24, r18 - b50: 08 95 ret - -00000b52 <CDC_Device_CreateStream>: - Endpoint_ClearIN(); -} - -void CDC_Device_CreateStream(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, - FILE* const Stream) -{ - b52: fb 01 movw r30, r22 - *Stream = (FILE)FDEV_SETUP_STREAM(CDC_Device_putchar, CDC_Device_getchar, _FDEV_SETUP_RW); - b54: 2e e0 ldi r18, 0x0E ; 14 - b56: db 01 movw r26, r22 - b58: 1d 92 st X+, r1 - b5a: 2a 95 dec r18 - b5c: e9 f7 brne .-6 ; 0xb58 <CDC_Device_CreateStream+0x6> - b5e: 23 e0 ldi r18, 0x03 ; 3 - b60: 23 83 std Z+3, r18 ; 0x03 - b62: 28 e2 ldi r18, 0x28 ; 40 - b64: 36 e0 ldi r19, 0x06 ; 6 - b66: 31 87 std Z+9, r19 ; 0x09 - b68: 20 87 std Z+8, r18 ; 0x08 - b6a: 2c eb ldi r18, 0xBC ; 188 - b6c: 35 e0 ldi r19, 0x05 ; 5 - b6e: 33 87 std Z+11, r19 ; 0x0b - b70: 22 87 std Z+10, r18 ; 0x0a - fdev_set_udata(Stream, CDCInterfaceInfo); - b72: 95 87 std Z+13, r25 ; 0x0d - b74: 84 87 std Z+12, r24 ; 0x0c -} - b76: 08 95 ret - -00000b78 <CDC_Device_getchar>: - return CDC_Device_SendByte((USB_ClassInfo_CDC_Device_t*)fdev_get_udata(Stream), c) ? _FDEV_ERR : 0; -} - -static int CDC_Device_getchar(FILE* Stream) -{ - int16_t ReceivedByte = CDC_Device_ReceiveByte((USB_ClassInfo_CDC_Device_t*)fdev_get_udata(Stream)); - b78: fc 01 movw r30, r24 - b7a: 84 85 ldd r24, Z+12 ; 0x0c - b7c: 95 85 ldd r25, Z+13 ; 0x0d - b7e: bc df rcall .-136 ; 0xaf8 <CDC_Device_ReceiveByte> - b80: 9c 01 movw r18, r24 - - if (ReceivedByte < 0) - b82: 97 ff sbrs r25, 7 - b84: 02 c0 rjmp .+4 ; 0xb8a <CDC_Device_getchar+0x12> - b86: 2e ef ldi r18, 0xFE ; 254 - b88: 3f ef ldi r19, 0xFF ; 255 - return _FDEV_EOF; - - return ReceivedByte; -} - b8a: c9 01 movw r24, r18 - b8c: 08 95 ret - -00000b8e <CDC_Device_Flush>: - Endpoint_Write_Byte(Data); - return ENDPOINT_READYWAIT_NoError; -} - -uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - b8e: fc 01 movw r30, r24 - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - b90: 80 91 0d 02 lds r24, 0x020D - b94: 84 30 cpi r24, 0x04 ; 4 - b96: 11 f5 brne .+68 ; 0xbdc <CDC_Device_Flush+0x4e> - b98: 87 85 ldd r24, Z+15 ; 0x0f - b9a: 90 89 ldd r25, Z+16 ; 0x10 - b9c: a1 89 ldd r26, Z+17 ; 0x11 - b9e: b2 89 ldd r27, Z+18 ; 0x12 - ba0: 00 97 sbiw r24, 0x00 ; 0 - ba2: a1 05 cpc r26, r1 - ba4: b1 05 cpc r27, r1 - ba6: d1 f0 breq .+52 ; 0xbdc <CDC_Device_Flush+0x4e> - return ENDPOINT_RWSTREAM_DeviceDisconnected; - - uint8_t ErrorCode; - - Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpointNumber); - ba8: 81 81 ldd r24, Z+1 ; 0x01 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - baa: 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; - bae: 80 91 f2 00 lds r24, 0x00F2 - - if (!(Endpoint_BytesInEndpoint())) - bb2: 88 23 and r24, r24 - bb4: a9 f0 breq .+42 ; 0xbe0 <CDC_Device_Flush+0x52> - * \return Boolean true if the currently selected endpoint may be read from or written to, depending 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); - bb6: 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)); - bba: 80 91 e8 00 lds r24, 0x00E8 - bbe: 8e 77 andi r24, 0x7E ; 126 - bc0: 80 93 e8 00 sts 0x00E8, r24 - - bool BankFull = !(Endpoint_IsReadWriteAllowed()); - - Endpoint_ClearIN(); - - if (BankFull) - bc4: 95 fd sbrc r25, 5 - bc6: 0c c0 rjmp .+24 ; 0xbe0 <CDC_Device_Flush+0x52> - { - if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - bc8: 38 dc rcall .-1936 ; 0x43a <Endpoint_WaitUntilReady> - bca: 98 2f mov r25, r24 - bcc: 88 23 and r24, r24 - bce: 49 f4 brne .+18 ; 0xbe2 <CDC_Device_Flush+0x54> - bd0: 80 91 e8 00 lds r24, 0x00E8 - bd4: 8e 77 andi r24, 0x7E ; 126 - bd6: 80 93 e8 00 sts 0x00E8, r24 - bda: 03 c0 rjmp .+6 ; 0xbe2 <CDC_Device_Flush+0x54> - bdc: 92 e0 ldi r25, 0x02 ; 2 - bde: 01 c0 rjmp .+2 ; 0xbe2 <CDC_Device_Flush+0x54> - be0: 90 e0 ldi r25, 0x00 ; 0 - - Endpoint_ClearIN(); - } - - return ENDPOINT_READYWAIT_NoError; -} - be2: 89 2f mov r24, r25 - be4: 08 95 ret - -00000be6 <CDC_Device_USBTask>: - - return true; -} - -void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - be6: fc 01 movw r30, r24 - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - be8: 80 91 0d 02 lds r24, 0x020D - bec: 84 30 cpi r24, 0x04 ; 4 - bee: 51 f4 brne .+20 ; 0xc04 <CDC_Device_USBTask+0x1e> - bf0: 87 85 ldd r24, Z+15 ; 0x0f - bf2: 90 89 ldd r25, Z+16 ; 0x10 - bf4: a1 89 ldd r26, Z+17 ; 0x11 - bf6: b2 89 ldd r27, Z+18 ; 0x12 - bf8: 00 97 sbiw r24, 0x00 ; 0 - bfa: a1 05 cpc r26, r1 - bfc: b1 05 cpc r27, r1 - bfe: 11 f0 breq .+4 ; 0xc04 <CDC_Device_USBTask+0x1e> - return; - - #if !defined(NO_CLASS_DRIVER_AUTOFLUSH) - CDC_Device_Flush(CDCInterfaceInfo); - c00: cf 01 movw r24, r30 - c02: c5 cf rjmp .-118 ; 0xb8e <CDC_Device_Flush> - c04: 08 95 ret - -00000c06 <CDC_Device_SendByte>: - return Endpoint_Write_Stream_LE(Data, Length, NO_STREAM_CALLBACK); -} - -uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, - const uint8_t Data) -{ - c06: 1f 93 push r17 - c08: fc 01 movw r30, r24 - c0a: 16 2f mov r17, r22 - if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - c0c: 80 91 0d 02 lds r24, 0x020D - c10: 84 30 cpi r24, 0x04 ; 4 - c12: d9 f4 brne .+54 ; 0xc4a <CDC_Device_SendByte+0x44> - c14: 87 85 ldd r24, Z+15 ; 0x0f - c16: 90 89 ldd r25, Z+16 ; 0x10 - c18: a1 89 ldd r26, Z+17 ; 0x11 - c1a: b2 89 ldd r27, Z+18 ; 0x12 - c1c: 00 97 sbiw r24, 0x00 ; 0 - c1e: a1 05 cpc r26, r1 - c20: b1 05 cpc r27, r1 - c22: 99 f0 breq .+38 ; 0xc4a <CDC_Device_SendByte+0x44> - return ENDPOINT_RWSTREAM_DeviceDisconnected; - - Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpointNumber); - c24: 81 81 ldd r24, Z+1 ; 0x01 - */ - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) ATTR_ALWAYS_INLINE; - static inline void Endpoint_SelectEndpoint(const uint8_t EndpointNumber) - { - #if !defined(CONTROL_ONLY_DEVICE) - UENUM = EndpointNumber; - c26: 80 93 e9 00 sts 0x00E9, r24 - * \return Boolean true if the currently selected endpoint may be read from or written to, depending 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); - c2a: 80 91 e8 00 lds r24, 0x00E8 - - if (!(Endpoint_IsReadWriteAllowed())) - c2e: 85 fd sbrc r24, 5 - c30: 08 c0 rjmp .+16 ; 0xc42 <CDC_Device_SendByte+0x3c> - */ - 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)); - c32: 80 91 e8 00 lds r24, 0x00E8 - c36: 8e 77 andi r24, 0x7E ; 126 - c38: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearIN(); - - uint8_t ErrorCode; - - if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - c3c: fe db rcall .-2052 ; 0x43a <Endpoint_WaitUntilReady> - c3e: 88 23 and r24, r24 - c40: 29 f4 brne .+10 ; 0xc4c <CDC_Device_SendByte+0x46> - * \param[in] Byte Next byte to write into the the currently selected endpoint's FIFO buffer. - */ - static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE; - static inline void Endpoint_Write_Byte(const uint8_t Byte) - { - UEDATX = Byte; - c42: 10 93 f1 00 sts 0x00F1, r17 - c46: 80 e0 ldi r24, 0x00 ; 0 - c48: 01 c0 rjmp .+2 ; 0xc4c <CDC_Device_SendByte+0x46> - return ErrorCode; - } - - Endpoint_Write_Byte(Data); - return ENDPOINT_READYWAIT_NoError; - c4a: 82 e0 ldi r24, 0x02 ; 2 -} - c4c: 1f 91 pop r17 - c4e: 08 95 ret - -00000c50 <CDC_Device_putchar>: - fdev_set_udata(Stream, CDCInterfaceInfo); -} - -static int CDC_Device_putchar(char c, - FILE* Stream) -{ - c50: 28 2f mov r18, r24 - c52: fb 01 movw r30, r22 - return CDC_Device_SendByte((USB_ClassInfo_CDC_Device_t*)fdev_get_udata(Stream), c) ? _FDEV_ERR : 0; - c54: 84 85 ldd r24, Z+12 ; 0x0c - c56: 95 85 ldd r25, Z+13 ; 0x0d - c58: 62 2f mov r22, r18 - c5a: d5 df rcall .-86 ; 0xc06 <CDC_Device_SendByte> - c5c: 88 23 and r24, r24 - c5e: 19 f4 brne .+6 ; 0xc66 <CDC_Device_putchar+0x16> - c60: 20 e0 ldi r18, 0x00 ; 0 - c62: 30 e0 ldi r19, 0x00 ; 0 - c64: 02 c0 rjmp .+4 ; 0xc6a <CDC_Device_putchar+0x1a> - c66: 2f ef ldi r18, 0xFF ; 255 - c68: 3f ef ldi r19, 0xFF ; 255 -} - c6a: c9 01 movw r24, r18 - c6c: 08 95 ret - -00000c6e <CDC_Device_ConfigureEndpoints>: - break; - } -} - -bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - c6e: 1f 93 push r17 - c70: cf 93 push r28 - c72: df 93 push r29 - c74: ec 01 movw r28, r24 - memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State)); - c76: 0d 96 adiw r24, 0x0d ; 13 - c78: fc 01 movw r30, r24 - c7a: 89 e0 ldi r24, 0x09 ; 9 - c7c: df 01 movw r26, r30 - c7e: 1d 92 st X+, r1 - c80: 8a 95 dec r24 - c82: e9 f7 brne .-6 ; 0xc7e <CDC_Device_ConfigureEndpoints+0x10> - c84: 11 e0 ldi r17, 0x01 ; 1 - uint16_t Size; - uint8_t Type; - uint8_t Direction; - bool DoubleBanked; - - if (EndpointNum == CDCInterfaceInfo->Config.DataINEndpointNumber) - c86: 89 81 ldd r24, Y+1 ; 0x01 - c88: 18 17 cp r17, r24 - c8a: 29 f4 brne .+10 ; 0xc96 <CDC_Device_ConfigureEndpoints+0x28> - { - Size = CDCInterfaceInfo->Config.DataINEndpointSize; - c8c: ea 81 ldd r30, Y+2 ; 0x02 - c8e: fb 81 ldd r31, Y+3 ; 0x03 - Direction = ENDPOINT_DIR_IN; - Type = EP_TYPE_BULK; - DoubleBanked = CDCInterfaceInfo->Config.DataINEndpointDoubleBank; - c90: 8c 81 ldd r24, Y+4 ; 0x04 - c92: 62 e0 ldi r22, 0x02 ; 2 - c94: 10 c0 rjmp .+32 ; 0xcb6 <CDC_Device_ConfigureEndpoints+0x48> - } - else if (EndpointNum == CDCInterfaceInfo->Config.DataOUTEndpointNumber) - c96: 8d 81 ldd r24, Y+5 ; 0x05 - c98: 18 17 cp r17, r24 - c9a: 31 f4 brne .+12 ; 0xca8 <CDC_Device_ConfigureEndpoints+0x3a> - { - Size = CDCInterfaceInfo->Config.DataOUTEndpointSize; - c9c: ee 81 ldd r30, Y+6 ; 0x06 - c9e: ff 81 ldd r31, Y+7 ; 0x07 - Direction = ENDPOINT_DIR_OUT; - Type = EP_TYPE_BULK; - DoubleBanked = CDCInterfaceInfo->Config.DataOUTEndpointDoubleBank; - ca0: 88 85 ldd r24, Y+8 ; 0x08 - ca2: 62 e0 ldi r22, 0x02 ; 2 - ca4: 30 e0 ldi r19, 0x00 ; 0 - ca6: 08 c0 rjmp .+16 ; 0xcb8 <CDC_Device_ConfigureEndpoints+0x4a> - } - else if (EndpointNum == CDCInterfaceInfo->Config.NotificationEndpointNumber) - ca8: 89 85 ldd r24, Y+9 ; 0x09 - caa: 18 17 cp r17, r24 - cac: 09 f5 brne .+66 ; 0xcf0 <CDC_Device_ConfigureEndpoints+0x82> - { - Size = CDCInterfaceInfo->Config.NotificationEndpointSize; - cae: ea 85 ldd r30, Y+10 ; 0x0a - cb0: fb 85 ldd r31, Y+11 ; 0x0b - Direction = ENDPOINT_DIR_IN; - Type = EP_TYPE_INTERRUPT; - DoubleBanked = CDCInterfaceInfo->Config.NotificationEndpointDoubleBank; - cb2: 8c 85 ldd r24, Y+12 ; 0x0c - cb4: 63 e0 ldi r22, 0x03 ; 3 - cb6: 31 e0 ldi r19, 0x01 ; 1 - else - { - continue; - } - - if (!(Endpoint_ConfigureEndpoint(EndpointNum, Type, Direction, Size, - cb8: 88 23 and r24, r24 - cba: 11 f4 brne .+4 ; 0xcc0 <CDC_Device_ConfigureEndpoints+0x52> - cbc: 40 e0 ldi r20, 0x00 ; 0 - cbe: 01 c0 rjmp .+2 ; 0xcc2 <CDC_Device_ConfigureEndpoints+0x54> - cc0: 44 e0 ldi r20, 0x04 ; 4 - cc2: 20 e0 ldi r18, 0x00 ; 0 - cc4: 88 e0 ldi r24, 0x08 ; 8 - cc6: 90 e0 ldi r25, 0x00 ; 0 - cc8: 03 c0 rjmp .+6 ; 0xcd0 <CDC_Device_ConfigureEndpoints+0x62> - uint8_t MaskVal = 0; - uint16_t CheckBytes = 8; - - while (CheckBytes < Bytes) - { - MaskVal++; - cca: 2f 5f subi r18, 0xFF ; 255 - CheckBytes <<= 1; - ccc: 88 0f add r24, r24 - cce: 99 1f adc r25, r25 - static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) - { - uint8_t MaskVal = 0; - uint16_t CheckBytes = 8; - - while (CheckBytes < Bytes) - cd0: 8e 17 cp r24, r30 - cd2: 9f 07 cpc r25, r31 - cd4: d0 f3 brcs .-12 ; 0xcca <CDC_Device_ConfigureEndpoints+0x5c> - const uint8_t Type, - const uint8_t Direction, - const uint16_t Size, - const uint8_t Banks) - { - return Endpoint_ConfigureEndpoint_Prv(Number, (((Type) << EPTYPE0) | (Direction)), - cd6: 62 95 swap r22 - cd8: 66 0f add r22, r22 - cda: 66 0f add r22, r22 - cdc: 60 7c andi r22, 0xC0 ; 192 - cde: 63 2b or r22, r19 - ce0: 42 60 ori r20, 0x02 ; 2 - ce2: 22 95 swap r18 - ce4: 20 7f andi r18, 0xF0 ; 240 - ce6: 42 2b or r20, r18 - ce8: 81 2f mov r24, r17 - cea: 73 db rcall .-2330 ; 0x3d2 <Endpoint_ConfigureEndpoint_Prv> - cec: 88 23 and r24, r24 - cee: 21 f0 breq .+8 ; 0xcf8 <CDC_Device_ConfigureEndpoints+0x8a> - -bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State)); - - for (uint8_t EndpointNum = 1; EndpointNum < ENDPOINT_TOTAL_ENDPOINTS; EndpointNum++) - cf0: 1f 5f subi r17, 0xFF ; 255 - cf2: 15 30 cpi r17, 0x05 ; 5 - cf4: 41 f6 brne .-112 ; 0xc86 <CDC_Device_ConfigureEndpoints+0x18> - cf6: 81 e0 ldi r24, 0x01 ; 1 - return false; - } - } - - return true; -} - cf8: df 91 pop r29 - cfa: cf 91 pop r28 - cfc: 1f 91 pop r17 - cfe: 08 95 ret - -00000d00 <CDC_Device_ProcessControlRequest>: -{ - -} - -void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) -{ - d00: cf 93 push r28 - d02: df 93 push r29 - d04: ec 01 movw r28, r24 - * \return Boolean true if the selected endpoint has received a SETUP packet, 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); - d06: 80 91 e8 00 lds r24, 0x00E8 - if (!(Endpoint_IsSETUPReceived())) - d0a: 83 ff sbrs r24, 3 - d0c: 63 c0 rjmp .+198 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - return; - - if (USB_ControlRequest.wIndex != CDCInterfaceInfo->Config.ControlInterfaceNumber) - d0e: 88 81 ld r24, Y - d10: 90 e0 ldi r25, 0x00 ; 0 - d12: 20 91 12 02 lds r18, 0x0212 - d16: 30 91 13 02 lds r19, 0x0213 - d1a: 28 17 cp r18, r24 - d1c: 39 07 cpc r19, r25 - d1e: 09 f0 breq .+2 ; 0xd22 <CDC_Device_ProcessControlRequest+0x22> - d20: 59 c0 rjmp .+178 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - return; - - switch (USB_ControlRequest.bRequest) - d22: 80 91 0f 02 lds r24, 0x020F - d26: 81 32 cpi r24, 0x21 ; 33 - d28: 61 f0 breq .+24 ; 0xd42 <CDC_Device_ProcessControlRequest+0x42> - d2a: 82 32 cpi r24, 0x22 ; 34 - d2c: 20 f4 brcc .+8 ; 0xd36 <CDC_Device_ProcessControlRequest+0x36> - d2e: 80 32 cpi r24, 0x20 ; 32 - d30: 09 f0 breq .+2 ; 0xd34 <CDC_Device_ProcessControlRequest+0x34> - d32: 50 c0 rjmp .+160 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - d34: 1b c0 rjmp .+54 ; 0xd6c <CDC_Device_ProcessControlRequest+0x6c> - d36: 82 32 cpi r24, 0x22 ; 34 - d38: 79 f1 breq .+94 ; 0xd98 <CDC_Device_ProcessControlRequest+0x98> - d3a: 83 32 cpi r24, 0x23 ; 35 - d3c: 09 f0 breq .+2 ; 0xd40 <CDC_Device_ProcessControlRequest+0x40> - d3e: 4a c0 rjmp .+148 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - d40: 3b c0 rjmp .+118 ; 0xdb8 <CDC_Device_ProcessControlRequest+0xb8> - { - case CDC_REQ_GetLineEncoding: - if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - d42: 80 91 0e 02 lds r24, 0x020E - d46: 81 3a cpi r24, 0xA1 ; 161 - d48: 09 f0 breq .+2 ; 0xd4c <CDC_Device_ProcessControlRequest+0x4c> - d4a: 44 c0 rjmp .+136 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - * \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); - d4c: 80 91 e8 00 lds r24, 0x00E8 - d50: 87 7f andi r24, 0xF7 ; 247 - d52: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearSETUP(); - Endpoint_Write_Control_Stream_LE(&CDCInterfaceInfo->State.LineEncoding, sizeof(CDCInterfaceInfo->State.LineEncoding)); - d56: ce 01 movw r24, r28 - d58: 0f 96 adiw r24, 0x0f ; 15 - d5a: 67 e0 ldi r22, 0x07 ; 7 - d5c: 70 e0 ldi r23, 0x00 ; 0 - d5e: bc dd rcall .-1160 ; 0x8d8 <Endpoint_Write_Control_Stream_LE> - */ - 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)); - d60: 80 91 e8 00 lds r24, 0x00E8 - d64: 8b 77 andi r24, 0x7B ; 123 - d66: 80 93 e8 00 sts 0x00E8, r24 - d6a: 34 c0 rjmp .+104 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - Endpoint_ClearOUT(); - } - - break; - case CDC_REQ_SetLineEncoding: - if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - d6c: 80 91 0e 02 lds r24, 0x020E - d70: 81 32 cpi r24, 0x21 ; 33 - d72: 81 f5 brne .+96 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - * \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); - d74: 80 91 e8 00 lds r24, 0x00E8 - d78: 87 7f andi r24, 0xF7 ; 247 - d7a: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearSETUP(); - Endpoint_Read_Control_Stream_LE(&CDCInterfaceInfo->State.LineEncoding, sizeof(CDCInterfaceInfo->State.LineEncoding)); - d7e: ce 01 movw r24, r28 - d80: 0f 96 adiw r24, 0x0f ; 15 - d82: 67 e0 ldi r22, 0x07 ; 7 - d84: 70 e0 ldi r23, 0x00 ; 0 - d86: 65 de rcall .-822 ; 0xa52 <Endpoint_Read_Control_Stream_LE> - */ - 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)); - d88: 80 91 e8 00 lds r24, 0x00E8 - d8c: 8e 77 andi r24, 0x7E ; 126 - d8e: 80 93 e8 00 sts 0x00E8, r24 - Endpoint_ClearIN(); - - EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo); - d92: ce 01 movw r24, r28 - d94: b0 de rcall .-672 ; 0xaf6 <CDC_Device_Event_Stub> - d96: 1e c0 rjmp .+60 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - } - - break; - case CDC_REQ_SetControlLineState: - if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - d98: 80 91 0e 02 lds r24, 0x020E - d9c: 81 32 cpi r24, 0x21 ; 33 - d9e: d1 f4 brne .+52 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - * \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); - da0: 80 91 e8 00 lds r24, 0x00E8 - da4: 87 7f andi r24, 0xF7 ; 247 - da6: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearSETUP(); - Endpoint_ClearStatusStage(); - daa: 26 db rcall .-2484 ; 0x3f8 <Endpoint_ClearStatusStage> - - CDCInterfaceInfo->State.ControlLineStates.HostToDevice = USB_ControlRequest.wValue; - dac: 80 91 10 02 lds r24, 0x0210 - db0: 8d 87 std Y+13, r24 ; 0x0d - - EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo); - db2: ce 01 movw r24, r28 - db4: a0 de rcall .-704 ; 0xaf6 <CDC_Device_Event_Stub> - db6: 0e c0 rjmp .+28 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - } - - break; - case CDC_REQ_SendBreak: - if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - db8: 80 91 0e 02 lds r24, 0x020E - dbc: 81 32 cpi r24, 0x21 ; 33 - dbe: 51 f4 brne .+20 ; 0xdd4 <CDC_Device_ProcessControlRequest+0xd4> - dc0: 80 91 e8 00 lds r24, 0x00E8 - dc4: 87 7f andi r24, 0xF7 ; 247 - dc6: 80 93 e8 00 sts 0x00E8, r24 - { - Endpoint_ClearSETUP(); - Endpoint_ClearStatusStage(); - dca: 16 db rcall .-2516 ; 0x3f8 <Endpoint_ClearStatusStage> - - EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue); - dcc: ce 01 movw r24, r28 - dce: 60 91 10 02 lds r22, 0x0210 - dd2: 91 de rcall .-734 ; 0xaf6 <CDC_Device_Event_Stub> - } - - break; - } -} - dd4: df 91 pop r29 - dd6: cf 91 pop r28 - dd8: 08 95 ret - -00000dda <strcmp>: - dda: fb 01 movw r30, r22 - ddc: dc 01 movw r26, r24 - dde: 8d 91 ld r24, X+ - de0: 01 90 ld r0, Z+ - de2: 80 19 sub r24, r0 - de4: 01 10 cpse r0, r1 - de6: d9 f3 breq .-10 ; 0xdde <strcmp+0x4> - de8: 99 0b sbc r25, r25 - dea: 08 95 ret - -00000dec <fputc>: - dec: 0f 93 push r16 - dee: 1f 93 push r17 - df0: cf 93 push r28 - df2: df 93 push r29 - df4: 8c 01 movw r16, r24 - df6: eb 01 movw r28, r22 - df8: 8b 81 ldd r24, Y+3 ; 0x03 - dfa: 81 ff sbrs r24, 1 - dfc: 1b c0 rjmp .+54 ; 0xe34 <fputc+0x48> - dfe: 82 ff sbrs r24, 2 - e00: 0d c0 rjmp .+26 ; 0xe1c <fputc+0x30> - e02: 2e 81 ldd r18, Y+6 ; 0x06 - e04: 3f 81 ldd r19, Y+7 ; 0x07 - e06: 8c 81 ldd r24, Y+4 ; 0x04 - e08: 9d 81 ldd r25, Y+5 ; 0x05 - e0a: 28 17 cp r18, r24 - e0c: 39 07 cpc r19, r25 - e0e: 64 f4 brge .+24 ; 0xe28 <fputc+0x3c> - e10: e8 81 ld r30, Y - e12: f9 81 ldd r31, Y+1 ; 0x01 - e14: 01 93 st Z+, r16 - e16: f9 83 std Y+1, r31 ; 0x01 - e18: e8 83 st Y, r30 - e1a: 06 c0 rjmp .+12 ; 0xe28 <fputc+0x3c> - e1c: e8 85 ldd r30, Y+8 ; 0x08 - e1e: f9 85 ldd r31, Y+9 ; 0x09 - e20: 80 2f mov r24, r16 - e22: 09 95 icall - e24: 89 2b or r24, r25 - e26: 31 f4 brne .+12 ; 0xe34 <fputc+0x48> - e28: 8e 81 ldd r24, Y+6 ; 0x06 - e2a: 9f 81 ldd r25, Y+7 ; 0x07 - e2c: 01 96 adiw r24, 0x01 ; 1 - e2e: 9f 83 std Y+7, r25 ; 0x07 - e30: 8e 83 std Y+6, r24 ; 0x06 - e32: 02 c0 rjmp .+4 ; 0xe38 <fputc+0x4c> - e34: 0f ef ldi r16, 0xFF ; 255 - e36: 1f ef ldi r17, 0xFF ; 255 - e38: c8 01 movw r24, r16 - e3a: df 91 pop r29 - e3c: cf 91 pop r28 - e3e: 1f 91 pop r17 - e40: 0f 91 pop r16 - e42: 08 95 ret - -00000e44 <fputs>: - e44: ef 92 push r14 - e46: ff 92 push r15 - e48: 0f 93 push r16 - e4a: 1f 93 push r17 - e4c: cf 93 push r28 - e4e: df 93 push r29 - e50: 7c 01 movw r14, r24 - e52: 8b 01 movw r16, r22 - e54: db 01 movw r26, r22 - e56: 13 96 adiw r26, 0x03 ; 3 - e58: 8c 91 ld r24, X - e5a: 81 fd sbrc r24, 1 - e5c: 03 c0 rjmp .+6 ; 0xe64 <fputs+0x20> - e5e: cf ef ldi r28, 0xFF ; 255 - e60: df ef ldi r29, 0xFF ; 255 - e62: 13 c0 rjmp .+38 ; 0xe8a <fputs+0x46> - e64: c0 e0 ldi r28, 0x00 ; 0 - e66: d0 e0 ldi r29, 0x00 ; 0 - e68: 0b c0 rjmp .+22 ; 0xe80 <fputs+0x3c> - e6a: d8 01 movw r26, r16 - e6c: 18 96 adiw r26, 0x08 ; 8 - e6e: ed 91 ld r30, X+ - e70: fc 91 ld r31, X - e72: 19 97 sbiw r26, 0x09 ; 9 - e74: b8 01 movw r22, r16 - e76: 09 95 icall - e78: 89 2b or r24, r25 - e7a: 11 f0 breq .+4 ; 0xe80 <fputs+0x3c> - e7c: cf ef ldi r28, 0xFF ; 255 - e7e: df ef ldi r29, 0xFF ; 255 - e80: f7 01 movw r30, r14 - e82: 81 91 ld r24, Z+ - e84: 7f 01 movw r14, r30 - e86: 88 23 and r24, r24 - e88: 81 f7 brne .-32 ; 0xe6a <fputs+0x26> - e8a: ce 01 movw r24, r28 - e8c: cd b7 in r28, 0x3d ; 61 - e8e: de b7 in r29, 0x3e ; 62 - e90: e6 e0 ldi r30, 0x06 ; 6 - e92: 0c c0 rjmp .+24 ; 0xeac <__epilogue_restores__+0x18> - -00000e94 <__epilogue_restores__>: - e94: 2a 88 ldd r2, Y+18 ; 0x12 - e96: 39 88 ldd r3, Y+17 ; 0x11 - e98: 48 88 ldd r4, Y+16 ; 0x10 - e9a: 5f 84 ldd r5, Y+15 ; 0x0f - e9c: 6e 84 ldd r6, Y+14 ; 0x0e - e9e: 7d 84 ldd r7, Y+13 ; 0x0d - ea0: 8c 84 ldd r8, Y+12 ; 0x0c - ea2: 9b 84 ldd r9, Y+11 ; 0x0b - ea4: aa 84 ldd r10, Y+10 ; 0x0a - ea6: b9 84 ldd r11, Y+9 ; 0x09 - ea8: c8 84 ldd r12, Y+8 ; 0x08 - eaa: df 80 ldd r13, Y+7 ; 0x07 - eac: ee 80 ldd r14, Y+6 ; 0x06 - eae: fd 80 ldd r15, Y+5 ; 0x05 - eb0: 0c 81 ldd r16, Y+4 ; 0x04 - eb2: 1b 81 ldd r17, Y+3 ; 0x03 - eb4: aa 81 ldd r26, Y+2 ; 0x02 - eb6: b9 81 ldd r27, Y+1 ; 0x01 - eb8: ce 0f add r28, r30 - eba: d1 1d adc r29, r1 - ebc: 0f b6 in r0, 0x3f ; 63 - ebe: f8 94 cli - ec0: de bf out 0x3e, r29 ; 62 - ec2: 0f be out 0x3f, r0 ; 63 - ec4: cd bf out 0x3d, r28 ; 61 - ec6: ed 01 movw r28, r26 - ec8: 08 95 ret - -00000eca <_exit>: - eca: f8 94 cli - -00000ecc <__stop_program>: - ecc: ff cf rjmp .-2 ; 0xecc <__stop_program> |