core: Update console startup for hid_listen
This commit is contained in:
parent
1efd16e7c8
commit
00f5ed3210
1 changed files with 24 additions and 18 deletions
|
|
@ -50,6 +50,7 @@
|
||||||
#endif
|
#endif
|
||||||
#include "suspend.h"
|
#include "suspend.h"
|
||||||
#include "hook.h"
|
#include "hook.h"
|
||||||
|
#include "timer.h"
|
||||||
|
|
||||||
#ifdef LUFA_DEBUG_SUART
|
#ifdef LUFA_DEBUG_SUART
|
||||||
#include "avr/suart.h"
|
#include "avr/suart.h"
|
||||||
|
|
@ -99,14 +100,31 @@ static ringbuf_t sendbuf = {
|
||||||
.size_mask = SENDBUF_SIZE - 1
|
.size_mask = SENDBUF_SIZE - 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: Around 2500ms delay often works anyhoo but proper startup would be better
|
||||||
|
// 1000ms delay of hid_listen affects this probably
|
||||||
|
/* wait for Console startup */
|
||||||
|
static bool console_is_ready(void)
|
||||||
|
{
|
||||||
|
static bool hid_listen_ready = false;
|
||||||
|
if (!hid_listen_ready) {
|
||||||
|
if (timer_read32() < 2500)
|
||||||
|
return false;
|
||||||
|
hid_listen_ready = true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool console_putc(uint8_t c)
|
static bool console_putc(uint8_t c)
|
||||||
{
|
{
|
||||||
|
if (!console_is_ready())
|
||||||
|
goto EXIT;
|
||||||
|
|
||||||
// return immediately if called while interrupt
|
// return immediately if called while interrupt
|
||||||
if (!(SREG & (1<<SREG_I)))
|
if (!(SREG & (1<<SREG_I)))
|
||||||
goto EXIT;;
|
goto EXIT;
|
||||||
|
|
||||||
if (USB_DeviceState != DEVICE_STATE_Configured)
|
if (USB_DeviceState != DEVICE_STATE_Configured)
|
||||||
goto EXIT;;
|
goto EXIT;
|
||||||
|
|
||||||
uint8_t ep = Endpoint_GetCurrentEndpoint();
|
uint8_t ep = Endpoint_GetCurrentEndpoint();
|
||||||
|
|
||||||
|
|
@ -140,6 +158,9 @@ EXIT:
|
||||||
|
|
||||||
static void console_flush(void)
|
static void console_flush(void)
|
||||||
{
|
{
|
||||||
|
if (!console_is_ready())
|
||||||
|
return;
|
||||||
|
|
||||||
if (USB_DeviceState != DEVICE_STATE_Configured)
|
if (USB_DeviceState != DEVICE_STATE_Configured)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -633,24 +654,9 @@ int main(void)
|
||||||
|
|
||||||
keyboard_init();
|
keyboard_init();
|
||||||
|
|
||||||
/* wait for Console startup */
|
|
||||||
// TODO: 2000ms delay often works anyhoo but proper startup would be better
|
|
||||||
// 1000ms delay of hid_listen affects this probably
|
|
||||||
#ifdef CONSOLE_ENABLE
|
|
||||||
if (debug_enable) {
|
|
||||||
uint16_t delay = 2000;
|
|
||||||
while (delay--) {
|
|
||||||
#ifndef INTERRUPT_CONTROL_ENDPOINT
|
|
||||||
USB_USBTask();
|
|
||||||
#endif
|
|
||||||
_delay_ms(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
hook_late_init();
|
hook_late_init();
|
||||||
|
|
||||||
print("Keyboard start.\n");
|
print("\nKeyboard start.\n");
|
||||||
while (1) {
|
while (1) {
|
||||||
while (USB_DeviceState == DEVICE_STATE_Suspended) {
|
while (USB_DeviceState == DEVICE_STATE_Suspended) {
|
||||||
#ifdef LUFA_DEBUG
|
#ifdef LUFA_DEBUG
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue