I'm using the USB CDC ACM example to write a message to a com port. I can receive messages fine except there is one problem. I am receiving the characters one character at a time. For example, I am sending: "This is a welcome message!\r\n" to the terminal. The message I receive is as follows:
T
h
i
... and so on.
This is the code I am using in the while loop:
while (true)
{
while (app_usbd_event_queue_process())
{
/* Nothing to do */
}
if(welcome_flag)
{
size_t size = sprintf(m_tx_buffer, "This is a welcome message!\r\n");
//nrf_delay_ms(20);
ret = app_usbd_cdc_acm_write(&m_app_cdc_acm, m_tx_buffer, size);
if (ret == NRF_SUCCESS)
{
welcome_flag = 0;
}
}
if(m_send_flag)
{
static int frame_counter;
size_t size = sprintf(m_tx_buffer, "Hello USB CDC FA demo: %u\r\n", frame_counter);
ret = app_usbd_cdc_acm_write(&m_app_cdc_acm, m_tx_buffer, size);
if (ret == NRF_SUCCESS)
{
++frame_counter;
}
}
UNUSED_RETURN_VALUE(NRF_LOG_PROCESS());
/* Sleep CPU only if there was no interrupt since last loop processing */
__WFE();
}
}
Interestingly if I delay between sprintf() and app_usbd_cdc_acm_write() I receive the message correctly. The button also sends the message correctly. Removing check if(ret == NRF_SUCCES) has no effects.
Lastly I am using Linux Mint 19.3 and SES V4.52.