Hi,
I'm developing beacon-scanner software using nrf51822 and S120 softdevice. Using softdevice v1.0.1.
I need to scan ibeacon type advertising devices and get service-specific data from them, which is broadcasted.
I cannot get some data on S120 SD. When using nRF Master Control Panel i get in advertise: flags (0x01) full iBeacon data (0xFF), Complete local name (0x09), TX Power Level (0x0A) and Service data (0x16) - screens in attachment. On S120 SD i get only flags (0x01) and manuf specific data (ibeacon, 0xFF).
I predict that's because adv_data buffer is only 32 bytes long. I get 30 bytes of data. It's possible to get all advertising data? I need access to service data (0x16) and device name.
Screens (because of privaty policy i've hidden device-specific data):
S120 code:
static void on_ble_evt(ble_evt_t * p_ble_evt)
{
uint32_t err_code;
const ble_gap_evt_t * p_gap_evt = &p_ble_evt->evt.gap_evt;
switch (p_ble_evt->header.evt_id)
{
case BLE_GAP_EVT_ADV_REPORT:
{
data_t adv_data;
data_t type_data;
const ble_gap_addr_t* addr;
// Initialize advertisement report for parsing.
adv_data.p_data = (uint8_t *)p_gap_evt->params.adv_report.data;
adv_data.data_len = p_gap_evt->params.adv_report.dlen;
addr = &p_gap_evt->params.adv_report.peer_addr;
uint8_t dev_addr[6] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX};
if(memcmp(addr->addr,dev_addr, 6))
break;
APPL_LOG("[SCAN]: Device: %X:%X:%X:%X:%X:%X RSSI: %d\r\n",addr->addr[0], addr->addr[1], addr->addr[2], addr->addr[3], addr->addr[4], addr->addr[5], p_gap_evt->params.adv_report.rssi);
APPL_LOG("Len: %d\r\n", adv_data.data_len);
APPL_LOG("Data: ");
for(int i = 0; i < adv_data.data_len; i++)
APPL_LOG("%02X ", adv_data.p_data[i]);
APPL_LOG("\r\n");
}}}
Data i get in serial port:
Tried to use S120 v.2.0 but cannot find any working example.