Skip to content

Commit e50d7de

Browse files
committed
V-USB remote wakeup
1 parent 958144d commit e50d7de

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

protocol/vusb/main.c

+20-13
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "timer.h"
2121
#include "uart.h"
2222
#include "debug.h"
23+
#include "suspend.h"
2324

2425

2526
#define UART_BAUD_RATE 115200
@@ -41,6 +42,23 @@ static void initForUsbConnectivity(void)
4142
sei();
4243
}
4344

45+
void usb_remote_wakeup(void) {
46+
cli();
47+
48+
int8_t ddr_orig = USBDDR;
49+
USBOUT |= (1 << USBMINUS);
50+
USBDDR = ddr_orig | USBMASK;
51+
USBOUT ^= USBMASK;
52+
53+
_delay_ms(25);
54+
55+
USBOUT ^= USBMASK;
56+
USBDDR = ddr_orig;
57+
USBOUT &= ~(1 << USBMINUS);
58+
59+
sei();
60+
}
61+
4462
int main(void)
4563
{
4664
bool suspended = false;
@@ -70,19 +88,6 @@ int main(void)
7088
// Suspend when no SOF in 3ms-10ms(7.1.7.4 Suspending of USB1.1)
7189
if (timer_elapsed(last_timer) > 5) {
7290
suspended = true;
73-
/*
74-
uart_putchar('S');
75-
_delay_ms(1);
76-
cli();
77-
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
78-
sleep_enable();
79-
sleep_bod_disable();
80-
sei();
81-
sleep_cpu();
82-
sleep_disable();
83-
_delay_ms(10);
84-
uart_putchar('W');
85-
*/
8691
}
8792
}
8893
#endif
@@ -95,6 +100,8 @@ int main(void)
95100
keyboard_task();
96101
}
97102
vusb_transfer_keyboard();
103+
} else if (suspend_wakeup_condition()) {
104+
usb_remote_wakeup();
98105
}
99106
}
100107
}

0 commit comments

Comments
 (0)