From 2bb18056572e683a6cd93b733beb4af5f2c3237f Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 8 Nov 2017 01:48:33 -0500 Subject: [PATCH] Move USB CDC block to case statement + formatting --- Firmware/Src/syscalls.c | 80 ++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/Firmware/Src/syscalls.c b/Firmware/Src/syscalls.c index 183fa830..cd9d449d 100644 --- a/Firmware/Src/syscalls.c +++ b/Firmware/Src/syscalls.c @@ -5,13 +5,12 @@ ****************************************************************************** */ -#include #include -#include -#include -#include #include - +#include +#include +#include +#include //int _read(int file, char *data, int len) {} //int _close(int file) {} @@ -24,47 +23,46 @@ static uint8_t uart_tx_buf[UART_TX_BUFFER_SIZE]; extern PCD_HandleTypeDef hpcd_USB_OTG_FS; extern USBD_HandleTypeDef hUsbDeviceFS; -int _write(int file, char *data, int len) { - //number of bytes written - int written = 0; - switch (serial_printf_select) { +int _write(int file, char* data, int len) { + //number of bytes written + int written = 0; + switch (serial_printf_select) { + case SERIAL_PRINTF_IS_USB: { + // transmit over CDC + uint8_t status = CDC_Transmit_FS((uint8_t*)data, len); + written = (status == USBD_OK) ? len : 0; - case SERIAL_PRINTF_IS_USB: { - // transmit over CDC - uint8_t status = CDC_Transmit_FS((uint8_t*)data, len); - written = (status == USBD_OK) ? len : 0; - } break; + // Wait for transmission to complete + USBD_CDC_HandleTypeDef* hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData; + while (hcdc->TxState != 0) { + osSemaphoreWait(sem_usb_irq, 0); + // We have a new incoming USB transmission: handle it + HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); + // Let the irq (OTG_FS_IRQHandler) fire again. + HAL_NVIC_EnableIRQ(OTG_FS_IRQn); + } + } break; - case SERIAL_PRINTF_IS_UART: { - //Check length - if (len > UART_TX_BUFFER_SIZE) - return 0; - // Check if transfer is already ongoing - if(huart4.gState != HAL_UART_STATE_READY) - return 0; - // memcpy data into uart_tx_buf - memcpy(uart_tx_buf, data, len); - // Start DMA background trasnfer - HAL_UART_Transmit_DMA(&huart4, uart_tx_buf, len); - } break; + case SERIAL_PRINTF_IS_UART: { + //Check length + if (len > UART_TX_BUFFER_SIZE) + return 0; + // Check if transfer is already ongoing + if (huart4.gState != HAL_UART_STATE_READY) + return 0; + // memcpy data into uart_tx_buf + memcpy(uart_tx_buf, data, len); + // Start DMA background trasnfer + HAL_UART_Transmit_DMA(&huart4, uart_tx_buf, len); while (huart4.gState != HAL_UART_STATE_READY) { // Do nothing } + } break; - default: { - written = 0; - } break; - } + default: { + written = 0; + } break; + } - // Wait for transmission to complete - USBD_CDC_HandleTypeDef* hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData; - while (hcdc->TxState != 0) { - osSemaphoreWait(sem_usb_irq, 0); - // We have a new incoming USB transmission: handle it - HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); - // Let the irq (OTG_FS_IRQHandler) fire again. - HAL_NVIC_EnableIRQ(OTG_FS_IRQn); - } - - return written; + return written; }