Hello Kevin,
Problem here is that Maximum packet size for Bulk endpoint in Full speed is set to 64 (wMaxPacketSize in endpoint descriptor), so, in order to send more than 64 bytes, multiple transactions must be done.
I modified default example and could send more than 64 bytes, and the difference between your example and mine is that buffer that will be sent is not a LOCAL VARIABLE (as far as I know, USB CDC does not uses internal buffer and does not copy the information that you want to send in internal buffer, so it shouldn't be saved in local variables):
Here is what I made:
uint8_t buffer[] = {"This is a buffer larger than 64 bytes: 0123456789ABCDEF... Test for sending more than 64 bytes\n"};
Then, In Virtual_Com_App i modified to send this buffer everytime that i received any data from Host:
void Virtual_Com_App(void)
{
/* User Code */
if ((0 != g_recv_size) && (0xFFFFFFFF != g_recv_size))
{
int32_t i;
/* Copy Buffer to Send Buff */
for (i = 0; i < g_recv_size; i++)
{
USB_PRINTF("Copied: %c\n\r", g_curr_recv_buf[i]);
g_curr_send_buf[g_send_size++] = g_curr_recv_buf[i];
}
g_recv_size = 0;
}
if (g_send_size)
{
uint8_t error;
uint32_t size = sizeof(buffer);
g_send_size = 0;
error = USB_Class_CDC_Send_Data(g_app_handle, DIC_BULK_IN_ENDPOINT,
buffer, size);
if (error != USB_OK)
{
USB_PRINTF("Error on USB_Class_CDC_Send_Data\n");
/* Failure to send Data Handling code here */
}
}
After that, I could see that message was sent correctly (First, 64 bytes were sent then, missing 32 bytes are sent):

Have you tried to declare this buffer as global?
Regards,
Isaac