I am trying to set up usb cdc and use the virtual COM port for logging. Please find my code below.
Issue - The LED part of the code works fine but when dongle is connected to PC the virtual com p[ort is not enumerated.
#include <stdbool.h> #include <stdint.h> #include "nrf.h" #include "nrf_delay.h" #include "nrf_gpio.h" #include "app_error.h" #include "app_usbd.h" #include "app_usbd_cdc_acm.h" #define LED_GREEN NRF_GPIO_PIN_MAP(0,6) static void cdc_acm_user_ev_handler(app_usbd_class_inst_t const * P_inst, app_usbd_cdc_acm_user_event_t event); #define CDC_ACM_COM_INTERFACE 0 #define CDC_ACM_COM_EPIN NRF_DRV_USBD_EPIN2 #define CDC_ACM_DATA_INTERFACE 1 #define CDC_ACM_DATA_EPIN NRF_DRV_USBD_EPIN1 #define CDC_ACM_DATA_EPOUT NRF_DRV_USBD_EPOUT1 APP_USBD_CDC_ACM_GLOBAL_DEF(m_app_cdc_acm, cdc_acm_user_ev_handler, CDC_ACM_COM_INTERFACE, CDC_ACM_DATA_INTERFACE, CDC_ACM_COM_EPIN, CDC_ACM_DATA_EPIN, CDC_ACM_DATA_EPOUT, APP_USBD_CDC_COMM_PROTOCOL_AT_V250 ); static char m_tx_buffer[NRF_DRV_USBD_EPSIZE]; static void cdc_acm_user_ev_handler(app_usbd_class_inst_t const * P_inst, app_usbd_cdc_acm_user_event_t event) { // app_usbd_cdc_acm_t const * p_cdc_acm = app_usbd_cdc_acm_class_get(p_inst); switch(event) { case APP_USBD_CDC_ACM_USER_EVT_PORT_OPEN: break; case APP_USBD_CDC_ACM_USER_EVT_PORT_CLOSE: break; case APP_USBD_CDC_ACM_USER_EVT_TX_DONE : break; case APP_USBD_CDC_ACM_USER_EVT_RX_DONE: break; } } static void usbd_user_ev_handler(app_usbd_event_type_t event) { switch(event) { case APP_USBD_EVT_POWER_DETECTED: if(!nrf_drv_usbd_is_enabled()) { app_usbd_enable(); } break; case APP_USBD_EVT_POWER_REMOVED: app_usbd_stop(); break; default: break; } } /** * @brief Function for application main entry. */ int main(void) { ret_code_t ret; static int frame_counter; static const app_usbd_config_t m_usbd_config = { .ev_state_proc = usbd_user_ev_handler }; ret = app_usbd_init(&m_usbd_config); APP_ERROR_CHECK(ret); app_usbd_class_inst_t const *class_cdc_acm = app_usbd_cdc_acm_class_inst_get(&m_app_cdc_acm); ret = app_usbd_class_append(class_cdc_acm); APP_ERROR_CHECK(ret); app_usbd_enable(); app_usbd_start(); nrf_gpio_cfg_output(LED_GREEN); nrf_gpio_pin_set(LED_GREEN); for (;;) { nrf_gpio_pin_toggle(LED_GREEN); nrf_delay_ms(1000); size_t size = sprintf(m_tx_buffer, "LED is toggled: %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++; } } } /** @} */