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

nRF52840 Coded PHY with ble_advertising

Can I use the ble_advertising module for the BLE_GAP_PHY_CODED?

Currently my Coded PHY parameters without the module are defined as:

/**@brief Struct that contains pointers to the encoded advertising data. */
static ble_gap_adv_data_t m_adv_data =
{
    .adv_data =
    {
        .p_data = m_enc_advdata,
        .len    = BLE_GAP_ADV_SET_DATA_SIZE_MAX
    },
    .scan_rsp_data =
    {
        .p_data = NULL,
        .len    = 0

    }
};

static void advertising_init(void)
{
    ret_code_t             err_code;

    ble_gap_adv_params_t adv_params =
    {
        .properties    =
        {   
        #ifdef USE_CODED_PHY
        .type = BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED,
        #else
        .type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED,
        #endif

        },
        .p_peer_addr   = NULL,
        .filter_policy = BLE_GAP_ADV_FP_ANY,
        .interval      = APP_ADV_INTERVAL,
        .duration      = 0,
        #ifdef USE_CODED_PHY
        .primary_phy   = BLE_GAP_PHY_CODED, 
        .secondary_phy = BLE_GAP_PHY_CODED,
        #else
        .primary_phy   = BLE_GAP_PHY_1MBPS, 
        .secondary_phy = BLE_GAP_PHY_1MBPS,
        #endif
        
        .scan_req_notification = 1,
    };

    ble_advdata_t const adv_data =
    {
        .name_type          = BLE_ADVDATA_FULL_NAME,
        .flags              = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE,
        .include_appearance = false,
        
    };
    
    err_code = ble_advdata_encode(&adv_data, m_adv_data.adv_data.p_data, &m_adv_data.adv_data.len);
    APP_ERROR_CHECK(err_code);

    err_code = sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, &adv_params);
    APP_ERROR_CHECK(err_code);
    }
    
/**@brief Function for starting advertising.
 */
static void advertising_start(bool erase_bonds)
{
    ret_code_t err_code;
    
//    Supported tx_power values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +2dBm, +3dBm, +4dBm, +5dBm, +6dBm, +7dBm and +8dBm.
    err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, m_adv_handle, 8); //8db
    APP_ERROR_CHECK(err_code);

    err_code = sd_ble_gap_adv_start(m_adv_handle, APP_BLE_CONN_CFG_TAG);
    APP_ERROR_CHECK(err_code);
    NRF_LOG_INFO("Advertising");

}


Following the example at NordicPlayground-nrf52-ble-app-uart-long-range

This method of advertising works for both 1Mbps and CODED PHY.

However with this I am having trouble defining the on_adv_evt callback, which would normally allow me to go to low-power mode through BLE_ADV_EVT_IDLE when the APP_ADV_DURATION is over.
Is it possible to use the coded phy with the ble_advertising module so I can use the same callbacks and functions as the 1Mbps PHY?


Any input would be appreciated,

Jeff

Related