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

manufacturer specific advertisement data vs service specific data

What is difference between service specific data and manufacturer specific data in beacon nrf52840?

I have written like

//LG_SPECIFIC_DEVELOPMENT_START


service_specific_data.service_uuid=0x4C47;
service_specific_data.data.p_data="123456";
What should be the length of service_specific_data.data.size=??;
advdata.p_service_data_array.data= &service_specific_data;

static void advertising_init(void)
{
    uint32_t      err_code;
    ble_advdata_t advdata;
    uint8_t       flags = BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED;

    ble_advdata_manuf_data_t manuf_specific_data;

//LG_SPECIFIC_DEVELOPMENT_START
    ble_advdata_service_data_t service_specific_data;
//LG_SPECIFIC_DEVELOPMENT_END

    manuf_specific_data.company_identifier = APP_COMPANY_IDENTIFIER;

#if defined(USE_UICR_FOR_MAJ_MIN_VALUES)
    // If USE_UICR_FOR_MAJ_MIN_VALUES is defined, the major and minor values will be read from the
    // UICR instead of using the default values. The major and minor values obtained from the UICR
    // are encoded into advertising data in big endian order (MSB First).
    // To set the UICR used by this example to a desired value, write to the address 0x10001080
    // using the nrfjprog tool. The command to be used is as follows.
    // nrfjprog --snr <Segger-chip-Serial-Number> --memwr 0x10001080 --val <your major/minor value>
    // For example, for a major value and minor value of 0xabcd and 0x0102 respectively, the
    // the following command should be used.
    // nrfjprog --snr <Segger-chip-Serial-Number> --memwr 0x10001080 --val 0xabcd0102
    uint16_t major_value = ((*(uint32_t *)UICR_ADDRESS) & 0xFFFF0000) >> 16;
    uint16_t minor_value = ((*(uint32_t *)UICR_ADDRESS) & 0x0000FFFF);

    uint8_t index = MAJ_VAL_OFFSET_IN_BEACON_INFO;

    m_beacon_info[index++] = MSB_16(major_value);
    m_beacon_info[index++] = LSB_16(major_value);

    m_beacon_info[index++] = MSB_16(minor_value);
    m_beacon_info[index++] = LSB_16(minor_value);
#endif

    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;
    //LG_SPECIFIC_DEVELOPMENT_START
    service_specific_data.service_uuid=0x4C47;
    service_specific_data.data.p_data=;
    service_specific_data.data.size=;
    advdata.p_service_data_array.data= &service_specific_data;
    //LG_SPECIFIC_DEVELOPMENT_END

    // 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_NONCONNECTABLE_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.

    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);
}

//LG_SPECIFIC_DEVELOPMENT_END

Parents
  • Hi,

    The manufacturer data is a field in the advertising data where two first hexadecimal numbers are your company ID while the latter are what you set them to be, in your case it would be m_beacon_info.

    service_specific_data is an instance of the ble_advdata_service_data_t struct which as the name suggests can be used to set service for advertising. The size of service_specific_data.data.size, should be the size of service_specific_data.data.p_data.

    regards

    Jared

Reply
  • Hi,

    The manufacturer data is a field in the advertising data where two first hexadecimal numbers are your company ID while the latter are what you set them to be, in your case it would be m_beacon_info.

    service_specific_data is an instance of the ble_advdata_service_data_t struct which as the name suggests can be used to set service for advertising. The size of service_specific_data.data.size, should be the size of service_specific_data.data.p_data.

    regards

    Jared

Children
No Data
Related