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

Configure nRF52840 Dongle working parameters for "heart_rate_collector" example in windows 10

Hi,

We are using nRF52840 Dongle to receive BLE peripheral Device 240 Bytes notifications for Win10 program. And we used "pc-ble-driver-4.1.1\examples\heart_rate_collector"(win10) as starting point.

"Bluetooth Low Energy" APP in "nRF Connect" can configure several parameters, such as data length, mtu and phy data rate:

Is there any API to configure these parameters for "heart_rate_collector" in win10?

Best regards

Parents Reply Children
  • Hi,

    The first time,

    static uint32_t ble_cfg_set(uint8_t conn_cfg_tag)

    {

    ...

        ble_gap_data_length_params_t const dlp =
        {
            .max_rx_octets = 251,
            .max_tx_octets = 251,
            .max_rx_time_us = 2120,
            .max_tx_time_us = 2120,
        };
        error_code = sd_ble_gap_data_length_update(m_adapter, m_connection_handle, &dlp, NULL);//error_code==0x3001

    ...

    }

    But "0x3001' is not defined  in "Global Error". What does "0x3001" mean?

    The second time,

    static uint32_t ble_cfg_set(uint8_t conn_cfg_tag)
    {
        const uint32_t ram_start = 0; // Value is not used by ble-driver
        uint32_t error_code;
        ble_cfg_t ble_cfg;

        memset(&ble_cfg, 0x00, sizeof(ble_cfg));
        ble_cfg.conn_cfg.conn_cfg_tag = conn_cfg_tag;
        ble_cfg.conn_cfg.params.gap_conn_cfg.event_length = 24;
        error_code = sd_ble_cfg_set(m_adapter, BLE_CONN_CFG_GATTC, &ble_cfg, ram_start);//error_code == NRF_SUCCESS

    ...

    }

    static void ble_evt_dispatch(adapter_t* adapter, ble_evt_t* p_ble_evt)

    {

    ...

    switch (p_ble_evt->header.evt_id)
    {

        case BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST:

        uint16_t i1 = p_ble_evt->evt.gap_evt.params.data_length_update.effective_params.max_rx_octets;
        uint16_t i2 = p_ble_evt->evt.gap_evt.params.data_length_update.effective_params.max_tx_octets;
        uint16_t i3 = p_ble_evt->evt.gap_evt.params.data_length_update.effective_params.max_rx_time_us;
        uint16_t i4 = p_ble_evt->evt.gap_evt.params.data_length_update.effective_params.max_tx_time_us;
        printf("i1=%d, i2=%d, i3=%d, i4=%d\n", i1, i2, i3,i4);//i1==251, i2==251, i3==2120, i4==2120

        ble_gap_data_length_params_t const dlp =
        {
            .max_rx_octets = 251,
            .max_tx_octets = 251,
            .max_rx_time_us = 2120,
            .max_tx_time_us = 2120,
        };

        ble_gap_data_length_limitation_t dll;
        uint32_t error_code = sd_ble_gap_data_length_update(m_adapter, m_connection_handle, &dlp, &dll);//error_code ==NRF_ERROR_RESOURCES

        i1 = dll.rx_payload_limited_octets;//i1==52428
        i2 = dll.tx_payload_limited_octets;//i2==52428
        i3 = dll.tx_rx_time_limited_us; //i3==52428

    }

    ...

    }

    "event_length" has been configured successfully in In ble_cfg_set() , but when I called sd_ble_gap_data_length_update() in "case BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST", it returned NRF_ERROR_RESOURCES.

    Best regards

  • Hi,

    0x3001 means BLE_ERROR_NOT_ENABLED. Did you enable the softdevice first?

    Did you try increasing the event_length parameter? The API documentation say this for the NRF_ERROR_RESOURCES error:

    NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the requested parameters. Use sd_ble_cfg_set with BLE_CONN_CFG_GAP to increase the connection event length. Inspect p_dl_limitation to see where the limitation is.

    Best regards,
    Jørgen

  • Hi,

    Thank you for you reply.

    Check my program, please. At the second time, I configured event_length in ble_cfg_set(). And sd_ble_cfg_set() returned NRF_SUCCESS.

    But in ble_evt_dispatch(), sd_ble_gap_data_length_update still returned NRF_ERROR_RESOURCES error.

    Best regards.

  • I did look at your code. I can only see that you tried setting it to 24. Try increasing it, for instance to 320.

  • I tried 320, 620, 1280..., still NRF_ERROR_RESOURCES error.

    Furthermore, I added:

    ble_opt_t opt;
    memset(&opt, 0x00, sizeof(opt));
    opt.common_opt.conn_evt_ext.enable = 1;
    error_code = sd_ble_opt_set(m_adapter, BLE_COMMON_OPT_CONN_EVT_EXT, &opt);//NRF_SUCCESS

    still NRF_ERROR_RESOURCES error.

    My GOD! What' wrong!

Related