From 003c9d202aeeb428640cecfece1c20f9bcd7ddbd Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Tue, 27 Sep 2016 23:05:26 +0000 Subject: usb-serial: functional on f1. --- tests/usb-serial-rs485/main-stm32f4-disco.c | 55 +++++++++++------------------ 1 file changed, 20 insertions(+), 35 deletions(-) (limited to 'tests/usb-serial-rs485/main-stm32f4-disco.c') diff --git a/tests/usb-serial-rs485/main-stm32f4-disco.c b/tests/usb-serial-rs485/main-stm32f4-disco.c index f024e46..f5c21bf 100644 --- a/tests/usb-serial-rs485/main-stm32f4-disco.c +++ b/tests/usb-serial-rs485/main-stm32f4-disco.c @@ -38,13 +38,7 @@ #endif -static usbd_device *usbd_dev; -static struct ringb rx_ring; -static uint8_t rx_ring_data[64]; -struct ringb tx_ring; -static uint8_t tx_ring_data[128]; -bool nakked = false; - +extern struct ringb rx_ring, tx_ring; static void usart_setup(void) { /* Enable the USART2 interrupt. */ @@ -115,22 +109,22 @@ void usart2_isr(void) // } } -/* Y0, moron, nothing's stopping rx irqs from happening, have fun when you overflow temp buffer! */ -static void task_drain_rx(struct ringb *r) { - uint8_t zero_copy_is_for_losers[sizeof(rx_ring_data)]; - int zci = 0; - int c = ringb_get(r); - while (c >= 0) { - zero_copy_is_for_losers[zci++] = c; - c = ringb_get(r); - } - if (zci) { - trace_send16(STIMULUS_RING_DRAIN, zci); - glue_data_received_cb(zero_copy_is_for_losers, zci); - } +void usb_cdcacm_setup_pre_arch(void) +{ + rcc_periph_clock_enable(RCC_GPIOA); + rcc_periph_clock_enable(RCC_OTGFS); + gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, + GPIO9 | GPIO11 | GPIO12); + gpio_set_af(GPIOA, GPIO_AF10, GPIO9 | GPIO11 | GPIO12); + } +void usb_cdcacm_setup_post_arch(usbd_device *dev) +{ +} + + int main(void) { rcc_clock_setup_hse_3v3(&rcc_hse_8mhz_3v3[RCC_CLOCK_3V3_168MHZ]); @@ -142,27 +136,18 @@ int main(void) gpio_mode_setup(RS485DE_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RS485DE_PIN); - usart_setup(); - ringb_init(&rx_ring, rx_ring_data, sizeof(rx_ring_data)); - ringb_init(&tx_ring, tx_ring_data, sizeof(tx_ring_data)); + - usb_cdcacm_init(&usbd_dev); + usart_setup(); + usb_cdcacm_setup_pre_arch(); + usbd_device *usbd_dev = usb_cdcacm_init(&otgfs_usb_driver, "stm32f4-disco"); + usb_cdcacm_setup_post_arch(usbd_dev); ER_DPRINTF("Looping...\n"); volatile int i = 0; while (1) { usbd_poll(usbd_dev); - if (i++ > 500) { - // hacktastic - if (ringb_depth(&tx_ring) < 64 && nakked) { - usbd_ep_nak_set(usbd_dev, 1, 0); - nakked = false; - } - - task_drain_rx(&rx_ring); - i = 0; - } - + usb_cdcacm_poll(usbd_dev); } } -- cgit