summaryrefslogtreecommitdiffstats
path: root/app/atkbd.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/atkbd.c')
-rw-r--r--app/atkbd.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/app/atkbd.c b/app/atkbd.c
index 9091636..1ba599a 100644
--- a/app/atkbd.c
+++ b/app/atkbd.c
@@ -67,6 +67,8 @@ typedef enum
+static int ready;
+static uint8_t saved_leds;
static int atkbd_ack;
static int atkbd_nack;
@@ -396,7 +398,14 @@ atkbd_request_echo (void)
int
atkbd_set_leds (uint8_t leds)
{
- uint32_t then = ticks;
+ uint32_t then;
+
+ saved_leds = leds;
+
+ if (!ready)
+ return 0;
+
+ then = ticks;
atkbd_ack = 0;
atkbd_send (ATKBD_CMD_SETLEDS);
while (!atkbd_ack)
@@ -462,10 +471,22 @@ atkbd_set_mbr (void)
void
+atkbd_start (void)
+{
+
+ atkbd_reset ();
+ atkbd_request_echo ();
+ atkbd_set_mbr ();
+ atkbd_set_scanset (2);
+ atkbd_set_leds (saved_leds);
+
+ ready++;
+}
+
+void
atkbd_init (void)
{
atkbd_set (1, 1);
- delay_ms (200);
nvic_enable_irq (NVIC_EXTI0_IRQ);
@@ -478,11 +499,5 @@ atkbd_init (void)
nvic_enable_irq (KBCLK_IRQ);
- atkbd_reset ();
- atkbd_request_echo ();
- atkbd_set_mbr ();
- atkbd_set_scanset (2);
- atkbd_set_leds (0);
-
}