Hello, I'm trying to get manufacturer specific data from peripheral, but I don't know how to do this when the peripheral is using extended advertisement with LE Coded PHY.
I'm using long_range_demo examples [ https://github.com/NordicPlayground/nRF52-ble-long-range-demo ] with some modifications as below
peripheral_long_range_demo_kit/main.c:
/* Add these code near the top of the source code */
/* add these lines */
#define MANUF_DATA 0x54, 0x00
static uint8_t manuf_data_block[] = {
MANUF_DATA,
};
static uint8_array_t const manuf_data_array = {
.size = sizeof(manuf_data_block),
.p_data = manuf_data_block,
};
static ble_advdata_manuf_data_t manuf_data;
/* add these lines */
/* set non-connectable as default */
static adv_scan_type_seclection_t m_adv_scan_type_selected = SELECTION_NON_CONNECTABLE; /**< Global variable holding the current scan selection mode. */
/* edit static ble_gap_adv_data_t m_adv_data */
/**@brief Struct that contains pointers to the encoded advertising data. */
static ble_gap_adv_data_t m_adv_data =
{
.adv_data =
{
.p_data = NULL,
.len = 0
},
.scan_rsp_data =
{
.p_data = m_enc_scandata,
.len = BLE_GAP_SCAN_BUFFER_EXTENDED_MIN
}
};
/* edit static ble_gap_adv_data_t m_adv_data */
/* In static void advertising_data_set(void), add/modify code as below */
/* add */
// initialize manufacturer specific data
manuf_data.company_identifier = 0x0059;
manuf_data.data = manuf_data_array;
/* add */
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,
.p_manuf_specific_data = &manuf_data, /* add this line */
};
else if(m_adv_scan_type_selected == SELECTION_NON_CONNECTABLE)
{
NRF_LOG_INFO("Advertising type set to EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED ");
adv_params.properties.type = BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED;
/* uncomment these two lines */
ret = ble_advdata_encode(&adv_data, m_adv_data_ext.scan_rsp_data.p_data, &m_adv_data_ext.scan_rsp_data.len);
APP_ERROR_CHECK(ret);
/* uncomment these two lines */
ret = sd_ble_gap_adv_set_configure(&m_adv_handle, NULL, &adv_params);
APP_ERROR_CHECK(ret);
}
central_long_range_demo_kit/main.c:
/* in function static void on_adv_report(ble_gap_evt_adv_report_t const * p_adv_report)
edit these lines */
}else if (p_adv_report->primary_phy == BLE_GAP_PHY_CODED )
{
NRF_LOG_INFO("Received ADV report, RSSI %d, phy: coded",rssi_value);
// Dump BLE data
uint16_t len = p_adv_report->data.len;
if(p_adv_report->peer_addr.addr[5] == 0xD8) { // change here to show data from specific MAC address
NRF_LOG_DEBUG("type::status=%d", p_adv_report->type.status);
NRF_LOG_DEBUG("%d", p_adv_report->data.len);
NRF_LOG_HEXDUMP_DEBUG(p_adv_report->data.p_data, p_adv_report->data.len);
}
}
If I debug peripheral_long_range_demo_kit, the encoded advertising data has manufacturer specific data. However the data is not showing up in the serial console of the central board.
I suppose the auxiliary advertising packet contains the manufacturer specific data and the device name, but I could not find helpful information about how to achieve this. Is there any ways to receive the manufacturer specific data when using the LE Coded PHY?