Hello! I'm currently using nRF52 SDK to create a BLE beacon in which I update the advertising data at runtime.
I'm using the provided ble beacon example as a base for my program, I found that if I configure the extended advertising in the advertising initialization, it actually support up 251 bytes in the advertising data, however I don't seem to be able to change the base size past 0x18.
This is how my advertising_init() function looks like:
static void advertising_init(void) { uint32_t err_code; uint8_t flags = BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED; manuf_specific_data.company_identifier = APP_COMPANY_IDENTIFIER; manuf_specific_data.data.p_data = (uint8_t *) m_beacon_info; manuf_specific_data.data.size = APP_BEACON_INFO_LENGTH; // Build and set advertising data. memset(&advdata, 0, sizeof(advdata)); advdata.name_type = BLE_ADVDATA_NO_NAME; advdata.flags = flags; advdata.p_manuf_specific_data = &manuf_specific_data; // Initialize advertising parameters (used when starting advertising). memset(&m_adv_params, 0, sizeof(m_adv_params)); m_adv_params.properties.type = BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED; m_adv_params.p_peer_addr = NULL; // Undirected advertisement. m_adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; m_adv_params.interval = NON_CONNECTABLE_ADV_INTERVAL; m_adv_params.duration = 0; // Never time out. m_adv_params.primary_phy = BLE_GAP_PHY_AUTO; m_adv_params.secondary_phy = BLE_GAP_PHY_AUTO; m_adv_params.set_id = 4; m_adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; err_code = ble_advdata_encode(&advdata, 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, &m_adv_params); APP_ERROR_CHECK(err_code); }
The beacon doesn't let me change its max size however because the following setting doesn't go above 0x18 (24 bytes) or it will output an error:
#define APP_BEACON_INFO_LENGTH 0x17
What am I missing to be able to advertise the 251 bytes?
Thank you and best regards.
Gabriel