<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Updating Advertisement data in nrf52840 using SDK 16</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/59388/updating-advertisement-data-in-nrf52840-using-sdk-16</link><description>Hi, 
 I am trying to update my advertisement data as well as scan response data (i want to put some custom advertisement data and the device name in scan response data). 
 
 // Stop advertisement err_code=sd_ble_gap_adv_stop(m_advertising.adv_handle);</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 23 Mar 2020 08:17:43 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/59388/updating-advertisement-data-in-nrf52840-using-sdk-16" /><item><title>RE: Updating Advertisement data in nrf52840 using SDK 16</title><link>https://devzone.nordicsemi.com/thread/241040?ContentTypeID=1</link><pubDate>Mon, 23 Mar 2020 08:17:43 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:12e0aa26-c547-47b1-a6d0-c4655a9f682a</guid><dc:creator>BardenDK</dc:creator><description>&lt;p&gt;Hi Akshay,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It is not clear if you use new buffers for each update of the advertisement data. This is necessary. Take a look at this code snippet, taken from mesh_adv.c from the MESH SDK:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;/**
 * In the SoftDevice v6.0.0 API, the advertisement data buffers are owned by the application.
 * If we want to change the advertisement data while the advertiser is running, we need to double
 * buffer the data.
 */
static uint8_t m_advdata_raw[2][MESH_ADV_DATA_SIZE_MAX];
static uint8_t m_srdata_raw[2][MESH_ADV_DATA_SIZE_MAX];
static uint8_t m_adv_set_index;

void mesh_adv_data_set(uint16_t service_uuid, const uint8_t * p_service_data, uint8_t length)
{
    memset(&amp;amp;m_gap_adv_data, 0, sizeof(m_gap_adv_data));
    m_gap_adv_data.adv_data.p_data      = m_advdata_raw[m_adv_set_index];
    m_gap_adv_data.scan_rsp_data.p_data = m_srdata_raw[m_adv_set_index];
    m_gap_adv_data.adv_data.len         = sizeof(m_advdata_raw[0]);
    m_gap_adv_data.scan_rsp_data.len    = sizeof(m_srdata_raw[m_adv_set_index]);
    m_adv_set_index = (m_adv_set_index + 1) &amp;amp; 1;

    ble_advdata_t advdata;
    memset(&amp;amp;advdata, 0, sizeof(advdata));
    advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;

    ble_uuid_t uuids[] = {{service_uuid, BLE_UUID_TYPE_BLE}};
    advdata.uuids_complete.uuid_cnt = ARRAY_SIZE(uuids);
    advdata.uuids_complete.p_uuids = uuids;

    ble_advdata_service_data_t service_data;
    service_data.service_uuid = service_uuid;
    service_data.data.size = length;
    service_data.data.p_data = (uint8_t *) p_service_data;

    advdata.p_service_data_array = &amp;amp;service_data;
    advdata.service_data_count = 1;

    /* The application may freely set anything into the scan response data. */
    ble_advdata_t srdata;
    memset(&amp;amp;srdata, 0, sizeof(srdata));
    srdata.name_type = BLE_ADVDATA_FULL_NAME;

    APP_ERROR_CHECK(ble_advdata_encode(&amp;amp;advdata, m_gap_adv_data.adv_data.p_data, &amp;amp;m_gap_adv_data.adv_data.len));
    APP_ERROR_CHECK(ble_advdata_encode(&amp;amp;srdata, m_gap_adv_data.scan_rsp_data.p_data, &amp;amp;m_gap_adv_data.scan_rsp_data.len));

#if NRF_SD_BLE_API_VERSION &amp;gt;= 6

    uint32_t err_code = sd_ble_gap_adv_set_configure(&amp;amp;m_adv_handle, &amp;amp;m_gap_adv_data, &amp;amp;m_adv_params);
    if (err_code == NRF_ERROR_INVALID_STATE)
    {
        err_code = sd_ble_gap_adv_set_configure(&amp;amp;m_adv_handle, &amp;amp;m_gap_adv_data, NULL);
    }
#else

    uint32_t err_code = sd_ble_gap_adv_data_set(m_gap_adv_data.adv_data.p_data,
                                                m_gap_adv_data.adv_data.len,
                                                m_gap_adv_data.scan_rsp_data.p_data,
                                                m_gap_adv_data.scan_rsp_data.len);
#endif  /* NRF_SD_BLE_API_VERSION &amp;gt;= 6 */
    APP_ERROR_CHECK(err_code);
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Hope this helps.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>