diff options
Diffstat (limited to 'tmk_core/protocol/vusb')
-rw-r--r-- | tmk_core/protocol/vusb/protocol.c (renamed from tmk_core/protocol/vusb/main.c) | 89 |
1 files changed, 44 insertions, 45 deletions
diff --git a/tmk_core/protocol/vusb/main.c b/tmk_core/protocol/vusb/protocol.c index 53926a749..89dc795b2 100644 --- a/tmk_core/protocol/vusb/main.c +++ b/tmk_core/protocol/vusb/protocol.c | |||
@@ -99,14 +99,11 @@ static void vusb_wakeup(void) { | |||
99 | */ | 99 | */ |
100 | static void setup_usb(void) { initForUsbConnectivity(); } | 100 | static void setup_usb(void) { initForUsbConnectivity(); } |
101 | 101 | ||
102 | /** \brief Main | 102 | uint16_t sof_timer = 0; |
103 | * | 103 | |
104 | * FIXME: Needs doc | 104 | void protocol_setup(void) { |
105 | */ | ||
106 | int main(void) __attribute__((weak)); | ||
107 | int main(void) { | ||
108 | #if USB_COUNT_SOF | 105 | #if USB_COUNT_SOF |
109 | uint16_t sof_timer = timer_read(); | 106 | sof_timer = timer_read(); |
110 | #endif | 107 | #endif |
111 | 108 | ||
112 | #ifdef CLKPR | 109 | #ifdef CLKPR |
@@ -115,9 +112,14 @@ int main(void) { | |||
115 | clock_prescale_set(clock_div_1); | 112 | clock_prescale_set(clock_div_1); |
116 | #endif | 113 | #endif |
117 | keyboard_setup(); | 114 | keyboard_setup(); |
115 | } | ||
116 | |||
117 | void protocol_init(void) { | ||
118 | setup_usb(); | 118 | setup_usb(); |
119 | sei(); | 119 | sei(); |
120 | |||
120 | keyboard_init(); | 121 | keyboard_init(); |
122 | |||
121 | host_set_driver(vusb_driver()); | 123 | host_set_driver(vusb_driver()); |
122 | 124 | ||
123 | wait_ms(50); | 125 | wait_ms(50); |
@@ -125,55 +127,52 @@ int main(void) { | |||
125 | #ifdef SLEEP_LED_ENABLE | 127 | #ifdef SLEEP_LED_ENABLE |
126 | sleep_led_init(); | 128 | sleep_led_init(); |
127 | #endif | 129 | #endif |
130 | } | ||
128 | 131 | ||
129 | while (1) { | 132 | void protocol_task(void) { |
130 | #if USB_COUNT_SOF | 133 | #if USB_COUNT_SOF |
131 | if (usbSofCount != 0) { | 134 | if (usbSofCount != 0) { |
132 | usbSofCount = 0; | 135 | usbSofCount = 0; |
133 | sof_timer = timer_read(); | 136 | sof_timer = timer_read(); |
134 | if (vusb_suspended) { | ||
135 | vusb_wakeup(); | ||
136 | } | ||
137 | } else { | ||
138 | // Suspend when no SOF in 3ms-10ms(7.1.7.4 Suspending of USB1.1) | ||
139 | if (!vusb_suspended && timer_elapsed(sof_timer) > 5) { | ||
140 | vusb_suspend(); | ||
141 | } | ||
142 | } | ||
143 | #endif | ||
144 | if (vusb_suspended) { | 137 | if (vusb_suspended) { |
138 | vusb_wakeup(); | ||
139 | } | ||
140 | } else { | ||
141 | // Suspend when no SOF in 3ms-10ms(7.1.7.4 Suspending of USB1.1) | ||
142 | if (!vusb_suspended && timer_elapsed(sof_timer) > 5) { | ||
145 | vusb_suspend(); | 143 | vusb_suspend(); |
146 | if (suspend_wakeup_condition()) { | 144 | } |
147 | vusb_send_remote_wakeup(); | 145 | } |
148 | } | 146 | #endif |
149 | } else { | 147 | if (vusb_suspended) { |
150 | usbPoll(); | 148 | vusb_suspend(); |
151 | 149 | if (suspend_wakeup_condition()) { | |
152 | // TODO: configuration process is inconsistent. it sometime fails. | 150 | vusb_send_remote_wakeup(); |
153 | // To prevent failing to configure NOT scan keyboard during configuration | 151 | } |
154 | if (usbConfiguration && usbInterruptIsReady()) { | 152 | } else { |
155 | keyboard_task(); | 153 | usbPoll(); |
156 | } | 154 | |
157 | vusb_transfer_keyboard(); | 155 | // TODO: configuration process is inconsistent. it sometime fails. |
156 | // To prevent failing to configure NOT scan keyboard during configuration | ||
157 | if (usbConfiguration && usbInterruptIsReady()) { | ||
158 | keyboard_task(); | ||
159 | } | ||
160 | vusb_transfer_keyboard(); | ||
158 | 161 | ||
159 | #ifdef RAW_ENABLE | 162 | #ifdef RAW_ENABLE |
160 | usbPoll(); | 163 | usbPoll(); |
161 | 164 | ||
162 | if (usbConfiguration && usbInterruptIsReady3()) { | 165 | if (usbConfiguration && usbInterruptIsReady3()) { |
163 | raw_hid_task(); | 166 | raw_hid_task(); |
164 | } | 167 | } |
165 | #endif | 168 | #endif |
166 | 169 | ||
167 | #ifdef CONSOLE_ENABLE | 170 | #ifdef CONSOLE_ENABLE |
168 | usbPoll(); | 171 | usbPoll(); |
169 | 172 | ||
170 | if (usbConfiguration && usbInterruptIsReady3()) { | 173 | if (usbConfiguration && usbInterruptIsReady3()) { |
171 | console_task(); | 174 | console_task(); |
172 | } | ||
173 | #endif | ||
174 | |||
175 | // Run housekeeping | ||
176 | housekeeping_task(); | ||
177 | } | 175 | } |
176 | #endif | ||
178 | } | 177 | } |
179 | } | 178 | } |