summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/prototypes.h75
-rw-r--r--app/ticker.c2
-rw-r--r--app/usb.c30
-rw-r--r--id.h2
4 files changed, 69 insertions, 40 deletions
diff --git a/app/prototypes.h b/app/prototypes.h
index afc4f6d..c73b3de 100644
--- a/app/prototypes.h
+++ b/app/prototypes.h
@@ -1,72 +1,69 @@
/* dfu.c */
extern const struct usb_dfu_descriptor dfu_function;
extern const struct usb_interface_descriptor dfu_iface;
-extern int dfu_control_request (usbd_device * usbd_dev,
- struct usb_setup_data *req, uint8_t ** buf,
- uint16_t * len,
- void (**complete) (usbd_device * usbd_dev,
- struct usb_setup_data *
- req));
+extern int dfu_control_request(usbd_device *usbd_dev, struct usb_setup_data *req, uint8_t **buf, uint16_t *len, void (**complete)(usbd_device *usbd_dev, struct usb_setup_data *req));
/* mouse.c */
extern const struct usb_endpoint_descriptor mouse_endpoint;
extern const struct usb_interface_descriptor mouse_iface;
-extern void mouse_get_descriptor (uint8_t ** buf, uint16_t * len);
-extern void mouse_test (void);
+extern void mouse_get_descriptor(uint8_t **buf, uint16_t *len);
+extern void mouse_test(void);
/* keyboard.c */
extern const struct usb_endpoint_descriptor keyboard_endpoint;
extern const struct usb_interface_descriptor keyboard_iface;
-extern void keyboard_get_descriptor (uint8_t ** buf, uint16_t * len);
-extern void keyboard_test (void);
+extern void keyboard_get_descriptor(uint8_t **buf, uint16_t *len);
+extern void keyboard_test(void);
/* main.c */
-extern int main (void);
+extern int main(void);
/* usb.c */
extern const struct usb_device_descriptor dev;
extern const struct usb_interface ifaces[];
extern const struct usb_config_descriptor config;
extern usbd_device *usbd_dev;
+extern int usb_time_since_sof;
extern int usb_is_suspended;
-extern int usb_wakeup_host (void);
-extern void usb_set_config (usbd_device * usbd_dev, uint16_t wValue);
-extern void usb_init (void);
-extern void usb_run (void);
+extern int usb_wakeup_host(void);
+extern void usb_set_config(usbd_device *usbd_dev, uint16_t wValue);
+extern void usb_tick(void);
+extern void usb_init(void);
+extern void usb_run(void);
/* tablet.c */
extern const struct usb_endpoint_descriptor tablet_endpoint;
extern const struct usb_interface_descriptor tablet_iface;
-extern void tablet_get_descriptor (uint8_t ** buf, uint16_t * len);
-extern void tablet_test (void);
+extern void tablet_get_descriptor(uint8_t **buf, uint16_t *len);
+extern void tablet_test(void);
/* usart.c */
extern ring_t rx1_ring;
extern ring_t tx1_ring;
extern ring_t rx2_ring;
extern ring_t tx2_ring;
extern ring_t tx3_ring;
-extern void usart1_isr (void);
-extern void usart2_isr (void);
-extern void usart3_isr (void);
-extern int _write (int file, char *ptr, int len);
-extern void usart2_queue (uint8_t d);
-extern void usart3_queue (uint8_t d);
-extern void usart_init (void);
+extern void usart1_isr(void);
+extern void usart2_isr(void);
+extern void usart3_isr(void);
+extern int _write(int file, char *ptr, int len);
+extern void usart2_queue(uint8_t d);
+extern void usart3_queue(uint8_t d);
+extern void usart_init(void);
/* kvm.c */
-extern void kvm_dispatch (void);
-extern void kvm_recv (uint8_t d);
+extern void kvm_dispatch(void);
+extern void kvm_recv(uint8_t d);
/* ring.c */
-extern void ring_init (ring_t * r, uint8_t * buf, size_t len);
-extern int ring_write_byte (ring_t * r, uint8_t c);
-extern int ring_read_byte (ring_t * r, uint8_t * c);
-extern int ring_write (ring_t * r, uint8_t * buf, size_t len);
+extern void ring_init(ring_t *r, uint8_t *buf, size_t len);
+extern int ring_write_byte(ring_t *r, uint8_t c);
+extern int ring_read_byte(ring_t *r, uint8_t *c);
+extern int ring_write(ring_t *r, uint8_t *buf, size_t len);
/* led.c */
-extern void led_init (void);
-extern void led_set (uint32_t v);
-extern void led_tick (void);
+extern void led_init(void);
+extern void led_set(uint32_t v);
+extern void led_tick(void);
/* consumer.c */
extern const struct usb_endpoint_descriptor consumer_endpoint;
extern const struct usb_interface_descriptor consumer_iface;
-extern void consumer_get_descriptor (uint8_t ** buf, uint16_t * len);
+extern void consumer_get_descriptor(uint8_t **buf, uint16_t *len);
/* ticker.c */
extern volatile uint32_t ticks;
-extern void delay_us (uint32_t d);
-extern void sys_tick_handler (void);
-extern void delay_ms (uint32_t d);
-extern int timed_out (uint32_t then, unsigned int ms);
-extern void ticker_init (void);
+extern void delay_us(uint32_t d);
+extern void sys_tick_handler(void);
+extern void delay_ms(uint32_t d);
+extern int timed_out(uint32_t then, unsigned int ms);
+extern void ticker_init(void);
diff --git a/app/ticker.c b/app/ticker.c
index efcbda6..f8f68ba 100644
--- a/app/ticker.c
+++ b/app/ticker.c
@@ -33,6 +33,8 @@ sys_tick_handler (void)
kvm_recv (d);
led_tick ();
+
+ usb_tick();
}
diff --git a/app/usb.c b/app/usb.c
index 5845427..8c088dc 100644
--- a/app/usb.c
+++ b/app/usb.c
@@ -75,6 +75,7 @@ static const char *usb_strings[] = {
usbd_device *usbd_dev;
+int usb_time_since_sof = 0;
int usb_is_suspended = 0;
@@ -153,6 +154,7 @@ usb_control_request (usbd_device * usbd_dev, struct usb_setup_data *req,
}
+
void
usb_set_config (usbd_device * usbd_dev, uint16_t wValue)
{
@@ -180,6 +182,33 @@ usb_set_config (usbd_device * usbd_dev, uint16_t wValue)
}
+static void
+usb_sof (void)
+{
+ usb_time_since_sof = 0;
+}
+
+void
+usb_tick (void)
+{
+ if (usb_is_suspended)
+ {
+ usb_time_since_sof = 0;
+ return;
+ }
+
+ usb_time_since_sof++;
+
+ if (usb_time_since_sof > 1000)
+ {
+ usb_time_since_sof = 0;
+ _usbd_reset (usbd_dev);
+ }
+
+
+}
+
+
/* Buffer to be used for control requests. */
static uint8_t usbd_control_buffer[128];
@@ -194,6 +223,7 @@ usb_init (void)
usbd_register_set_config_callback (usbd_dev, usb_set_config);
usbd_register_suspend_callback (usbd_dev, usb_suspended);
usbd_register_resume_callback (usbd_dev, usb_resumed);
+ usbd_register_sof_callback (usbd_dev, usb_sof);
}
diff --git a/id.h b/id.h
index a7bea99..468957d 100644
--- a/id.h
+++ b/id.h
@@ -1,5 +1,5 @@
-#define ID_PRODUCT 0xee0
+#define ID_PRODUCT 0xee3
#define BUS_ID 0x0