diff --git a/meson.build b/meson.build index 8330093c..9e376526 100644 --- a/meson.build +++ b/meson.build @@ -128,7 +128,7 @@ mk22fn512_src = ['platform/mcu/MK22FN512xxx12/boot/startup.c', 'platform/mcu/MK22FN512xxx12/drivers/usb/usb_device_descriptor.c', 'platform/mcu/MK22FN512xxx12/drivers/usb/usb_device_khci.c', 'platform/mcu/MK22FN512xxx12/drivers/usb/usb_osa_bm.c', - 'platform/mcu/MK22FN512xxx12/drivers/virtual_com.c', + 'platform/mcu/MK22FN512xxx12/drivers/usb_vcom.c', 'platform/mcu/CMSIS/Device/NXP/MK22FN512xxx12/Source/system_MK22F51212.c', 'rtos/uC-OS3/Ports/ARM-Cortex-M/ARMv7-M/os_cpu_c.c', 'rtos/uC-OS3/Ports/ARM-Cortex-M/ARMv7-M/os_cpu_a.s', diff --git a/platform/mcu/MK22FN512xxx12/boot/libc_integration.c b/platform/mcu/MK22FN512xxx12/boot/libc_integration.c index d3ba287c..c79b5751 100644 --- a/platform/mcu/MK22FN512xxx12/boot/libc_integration.c +++ b/platform/mcu/MK22FN512xxx12/boot/libc_integration.c @@ -24,6 +24,7 @@ #include #include #include +#include void pthread_mutex_unlock(){} @@ -198,11 +199,7 @@ int _write_r(struct _reent *ptr, int fd, const void *buf, size_t cnt) { if(fd == STDOUT_FILENO || fd == STDERR_FILENO) { - //vcom_writeBlock(buf, cnt); - //return cnt; - (void) buf; - (void) cnt; - return -1; + return vcom_writeBlock(buf, cnt); } /* If fd is not stdout or stderr */ @@ -220,11 +217,8 @@ int _read_r(struct _reent *ptr, int fd, void *buf, size_t cnt) { for(;;) { - //ssize_t r = vcom_readBlock(buf, cnt); - //if((r < 0) || (r == (ssize_t)(cnt))) return r; - (void) buf; - (void) cnt; - return -1; + ssize_t r = vcom_readBlock(buf, cnt); + if((r < 0) || (r == (ssize_t)(cnt))) return r; } } else diff --git a/platform/mcu/MK22FN512xxx12/boot/startup.c b/platform/mcu/MK22FN512xxx12/boot/startup.c index e8cf6650..4b9cc43a 100644 --- a/platform/mcu/MK22FN512xxx12/boot/startup.c +++ b/platform/mcu/MK22FN512xxx12/boot/startup.c @@ -17,10 +17,11 @@ ***************************************************************************/ -#include #include -#include "MK22F51212.h" -#include "system_MK22F51212.h" +#include +#include +#include +#include ///< Entry point for system bootstrap after initial configurations. void systemBootstrap(); @@ -83,8 +84,8 @@ void Reset_Handler() SIM->SCGC5 |= 0x3E00; // Enable GPIO clock -// // Enable virtual com port (for stdin, stdout and stderr redirection) -// vcom_init(); + // Enable virtual com port (for stdin, stdout and stderr redirection) + vcom_init(); // Set no buffer for stdin, required to make scanf, getchar, ... working // correctly diff --git a/platform/mcu/MK22FN512xxx12/drivers/virtual_com.c b/platform/mcu/MK22FN512xxx12/drivers/usb_vcom.c similarity index 97% rename from platform/mcu/MK22FN512xxx12/drivers/virtual_com.c rename to platform/mcu/MK22FN512xxx12/drivers/usb_vcom.c index 4e5dbc5b..125f1ca8 100644 --- a/platform/mcu/MK22FN512xxx12/drivers/virtual_com.c +++ b/platform/mcu/MK22FN512xxx12/drivers/usb_vcom.c @@ -34,8 +34,8 @@ #include #include -#include "virtual_com.h" #include "usb/usb.h" +#include "usb_vcom.h" #include "usb/fsl_common.h" #include "usb/usb_device.h" #include "usb/usb_device_ch9.h" @@ -627,13 +627,21 @@ void vcom_init() ssize_t vcom_writeBlock(const void *buf, size_t len) { - memcpy(sendBuf, buf, len); if((cdcVcom.attach == 1) && (cdcVcom.startTransactions == 1)) { - usb_status_t st = USB_DeviceSendRequest(cdcVcom.deviceHandle, - USB_CDC_VCOM_BULK_IN_ENDPOINT, - sendBuf, len); - if(st != kStatus_USB_Success) return -1; + uint32_t bytesToSend = len; + while(bytesToSend > 0) + { + uint32_t xFerLen = (bytesToSend > FS_CDC_VCOM_BULK_OUT_PACKET_SIZE) + ? FS_CDC_VCOM_BULK_OUT_PACKET_SIZE : bytesToSend; + + memcpy(sendBuf, buf, xFerLen); + usb_status_t st = USB_DeviceSendRequest(cdcVcom.deviceHandle, + USB_CDC_VCOM_BULK_IN_ENDPOINT, + sendBuf, xFerLen); + if(st != kStatus_USB_Success) return -1; + bytesToSend -= xFerLen; + } } return len; diff --git a/platform/mcu/MK22FN512xxx12/drivers/virtual_com.h b/platform/mcu/MK22FN512xxx12/drivers/usb_vcom.h similarity index 100% rename from platform/mcu/MK22FN512xxx12/drivers/virtual_com.h rename to platform/mcu/MK22FN512xxx12/drivers/usb_vcom.h