summaryrefslogtreecommitdiff
path: root/tests/usb-serial-rs485/main-stm32f4-disco.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/usb-serial-rs485/main-stm32f4-disco.c')
-rw-r--r--tests/usb-serial-rs485/main-stm32f4-disco.c55
1 files changed, 20 insertions, 35 deletions
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);
}
}