summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@no.no.james.local>2015-06-08 11:12:28 +0100
committerroot <root@no.no.james.local>2015-06-08 11:12:28 +0100
commitc88477f285ae9206846cf02b14337dd0837fee2e (patch)
treea68630a1fb35db8d008a854969ff38c04903d76f
parent7a64ff65d2c6c667b757cebd9997fbf89f11b143 (diff)
downloadtims_keyboard-c88477f285ae9206846cf02b14337dd0837fee2e.tar.gz
tims_keyboard-c88477f285ae9206846cf02b14337dd0837fee2e.tar.bz2
tims_keyboard-c88477f285ae9206846cf02b14337dd0837fee2e.zip
initialize the keyboard after usb comes up so we can reply to usb quickly
-rw-r--r--app/atkbd.c25
-rw-r--r--app/prototypes.h2
-rw-r--r--app/tims_keyboard.c27
-rw-r--r--app/usb.c8
4 files changed, 21 insertions, 41 deletions
diff --git a/app/atkbd.c b/app/atkbd.c
index 1ba599a..d450bc2 100644
--- a/app/atkbd.c
+++ b/app/atkbd.c
@@ -470,23 +470,16 @@ 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);
+}
+
+void atkbd_start(void)
+{
+ if (ready) return;
nvic_enable_irq (NVIC_EXTI0_IRQ);
@@ -498,6 +491,14 @@ atkbd_init (void)
exti_reset_request (KBCLK);
nvic_enable_irq (KBCLK_IRQ);
+ delay_ms(AT_KBD_INIT_TIME);
+ atkbd_reset ();
+ atkbd_request_echo ();
+ atkbd_set_mbr ();
+ atkbd_set_scanset (2);
+ atkbd_set_leds (saved_leds);
+
+ ready++;
}
diff --git a/app/prototypes.h b/app/prototypes.h
index 8849f83..16aa300 100644
--- a/app/prototypes.h
+++ b/app/prototypes.h
@@ -33,8 +33,8 @@ extern int atkbd_set_leds(uint8_t leds);
extern int atkbd_set_scanset(uint8_t scanset);
extern int atkbd_set_mb(void);
extern int atkbd_set_mbr(void);
-extern void atkbd_start(void);
extern void atkbd_init(void);
+extern void atkbd_start(void);
/* ring.c */
extern void ring_init(volatile ring_t *r, uint8_t *buf, size_t len);
extern int ring_write_byte(volatile ring_t *r, uint8_t c);
diff --git a/app/tims_keyboard.c b/app/tims_keyboard.c
index 4897c4d..b67e46a 100644
--- a/app/tims_keyboard.c
+++ b/app/tims_keyboard.c
@@ -26,33 +26,12 @@ main (void)
nvic_set_priority (NVIC_SYSTICK_IRQ, 0x80);
nvic_set_priority (NVIC_EXTI0_IRQ, 0xc0);
- usart_init ();
- ticker_init ();
-
-#ifdef DEBUG
- printf ("USART and ticker started\r\n");
-#endif
+ atkbd_init();
usb_init ();
-#ifdef DEBUG
- printf ("USB started\r\n");
-#endif
-
- atkbd_init ();
-
-#ifdef DEBUG
- printf ("ATKBD i/f started\r\n");
-#endif
-
- while (ticks < AT_KBD_INIT_TIME)
- usb_poll ();
-
- atkbd_start ();
-
-#ifdef DEBUG
- printf ("Keyboard started\r\n");
-#endif
+ usart_init ();
+ ticker_init ();
usb_run ();
return 0;
diff --git a/app/usb.c b/app/usb.c
index 83dc620..9d8c6f8 100644
--- a/app/usb.c
+++ b/app/usb.c
@@ -90,12 +90,10 @@ usb_control_request (usbd_device * usbd_dev, struct usb_setup_data *req,
return 1;
case 1:
consumer_get_descriptor (buf, len);
- return 1;
- }
- *len = 0;
- return 0;
+ return 1;
+ }
*len = 0;
return 0;
@@ -124,6 +122,8 @@ usb_set_config (usbd_device * usbd_dev, uint16_t wValue)
USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
usb_control_class_request);
+
+ atkbd_start ();
}
/* Buffer to be used for control requests. */