This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Add Ble Scan to usbd_ble_uart_freertos example

Hi I'm trying to change peripheral usbd_ble_uart_freertos example to central with nus_c
I added the scan and nuc_c module.
When I'm testing the application, before making a connection with the peripheral all USB events are working as expected.
After the connection is established new USB events stop working.

This is the code that is responsible for USB events

void usb_new_event_isr_handler(app_usbd_internal_evt_t const * const p_event, bool queued)
{
    BaseType_t xHigherPriorityTaskWoken = pdFALSE;
    UNUSED_PARAMETER(p_event);
    UNUSED_PARAMETER(queued);
    ASSERT(m_usbd_thread != NULL);
    /* Release the semaphore */
    vTaskNotifyGiveFromISR(m_usbd_thread, &xHigherPriorityTaskWoken);
    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}

static void usbd_thread(void * arg)
{
    ret_code_t ret;
    static const app_usbd_config_t usbd_config = {
        .ev_isr_handler = usb_new_event_isr_handler,
        .ev_state_proc  = usbd_user_ev_handler
    };
    UNUSED_PARAMETER(arg);

    ret = app_usbd_init(&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);
    ret = app_usbd_power_events_enable();
    APP_ERROR_CHECK(ret);

    // Set the first event to make sure that USB queue is processed after it is started
    UNUSED_RETURN_VALUE(xTaskNotifyGive(xTaskGetCurrentTaskHandle()));
    // Enter main loop.
    for (;;)
    {
        /* Waiting for event */
        UNUSED_RETURN_VALUE(ulTaskNotifyTake(pdTRUE, USB_THREAD_MAX_BLOCK_TIME));
        while (app_usbd_event_queue_process())
        {
            /* Nothing to do */
        }
    }
}

It looks that events are received in usb_new_event_isr_handler function, but usbd_thread keep waiting for the event - stuck in ulTaskNotifyTake

 

Parents Reply
  • Hi,

    I took over this case from Susheel. I did just basic testing and then I see I get USB events even when connected. See log:

    <info> app: USBD BLE UART example started.
    <info> app: Connecting to target 45C36938A3C6
    <info> app: ATT MTU exchange completed.
    <info> app: Ble NUS max data length set to 0xF4(244)
    <info> app: USB power detected
    <info> app: USB ready
    <info> app: USB power removed
    <info> app: CDC ACM port closed
    

    Can you elaborate on the procedure I should follow to reproduce the issue you are seeing, and explain it in a bit more detail?

Children
Related