I can not seem to figure out why when I init the advertising and then issue a start to the advertising the advertising beacon shows up as a connectable when viewing under nRFConnect app.
I have put the defines, and the two functions that I am using for advertising init and start. I have included main as well. All the other functions that have been omitted are the same as the ble_beacon_app example from SDK v17.1
#define APP_BLE_CONN_CFG_TAG 1 /**< A tag identifying the SoftDevice BLE configuration. */
#define NON_CONNECTABLE_ADV_INTERVAL MSEC_TO_UNITS(5000, UNIT_0_625_MS) /**< The advertising interval for non-connectable advertisement (100 ms). This value can vary between 100ms to 10.24s). */
#define APP_BEACON_INFO_LENGTH 0x18 /**< Total length of information advertised by the Beacon. */
#define APP_ADV_DATA_LENGTH 0x16 /**< Length of manufacturer specific data in the advertisement. */
#define APP_DEVICE_TYPE 0x02 /**< 0x02 refers to Beacon. */
#define APP_MEASURED_RSSI 0xC3 /**< The Beacon's measured RSSI at 1 meter distance in dBm. */
#define APP_BATT_PCNT_LVL 80 /**< The percentage amount of battery left. */
#define APP_COMPANY_IDENTIFIER 0x0059 /**< Company identifier for Nordic Semiconductor ASA. as per www.bluetooth.org. */
#define APP_PRD_ID_OFS 0x00 /**< Product ID Offset. */
#define APP_PCB_REV 0x00 /**< PCB Revision Level. */
#define APP_FW_MAJ_VERS 0x00 /**< Firmware Major Version. */
#define APP_FW_MIN_VERS 0x80 /**< Firmware Minor Version. */
#define APP_BEACON_UUID 0x01, 0x12, 0x23, 0x34, \
0x45, 0x56, 0x67, 0x78, \
0x89, 0x9a, 0xab, 0xbc, \
0xcd, 0xde, 0xef, 0xf0 /**< Proprietary UUID for Beacon. */
//-----------------------------------------------------------------------------
// data structure intialization
BLE_ADVERTISING_DEF(f_advertising); //< Advertising module instance.
typedef struct{
ble_advdata_manuf_data_t f_manuf_specific_data;
ble_advertising_init_t f_init;
}f_ble_adv_data_t;
static f_ble_adv_data_t f_ble_data;
static ble_advdata_manuf_data_t f_manuf_data; // This is where the advertising beacon data will be updated.
//-----------------------------------------------------------------------------
static uint8_t m_beacon_info[APP_BEACON_INFO_LENGTH] = /**< Information advertised by the Beacon. */
{
APP_DEVICE_TYPE, // Manufacturer specific information. Specifies the device type in this
// implementation.
APP_ADV_DATA_LENGTH, // Manufacturer specific information. Specifies the length of the
// manufacturer specific data in this implementation.
APP_BEACON_UUID, // 128 bit UUID value.
APP_PRD_ID_OFS, // Manufacturer specific information. Product ID offset value.
APP_PCB_REV, // Manufacturer specific information. PCB Revision Level.
APP_FW_MAJ_VERS, // Manufacturer specific information. Firmware Major Version
APP_FW_MIN_VERS, // Manufacturer specific information. Firmware Minor Version
APP_MEASURED_RSSI, // Manufacturer specific information. The Beacon's measured TX power in this implementation.
APP_BATT_PCNT_LVL // Manufacturer specific information. The Beacon's measured Battery power in percent
};
//-----------------------------------------------------------------------------
static uint8_array_t ary_beacon_info =
{
.size = 0x0001, // Number of array entries
.p_data = m_beacon_info // pointer to the data
};
//-----------------------------------------------------------------------------
static void advertising_init(void)
{
uint32_t err_code;
NRF_LOG_INFO("advertising_init");
memset(&f_manuf_data, 0, sizeof(f_manuf_data));
f_manuf_data.company_identifier = APP_COMPANY_IDENTIFIER;
f_manuf_data.data = ary_beacon_info;
memset(&f_ble_data, 0, sizeof(f_ble_data));
f_ble_data.f_init.advdata.name_type = BLE_ADVDATA_NO_NAME;
f_ble_data.f_init.advdata.include_appearance = false;
f_ble_data.f_init.advdata.flags = BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED;
f_ble_data.f_init.advdata.p_manuf_specific_data = &f_manuf_data;
f_ble_data.f_init.evt_handler = on_adv_evt;
f_ble_data.f_init.config.ble_adv_fast_enabled = true;
f_ble_data.f_init.config.ble_adv_fast_interval = NON_CONNECTABLE_ADV_INTERVAL;
f_ble_data.f_init.config.ble_adv_fast_timeout = 0; // Never timeout
err_code = ble_advertising_init(&f_advertising, &f_ble_data.f_init);
APP_ERROR_CHECK(err_code);
ble_advertising_conn_cfg_tag_set(&f_advertising, APP_BLE_CONN_CFG_TAG);
}
//-----------------------------------------------------------------------------
static void advertising_start(void)
{
ret_code_t err_code;
NRF_LOG_INFO("advertising_start");
err_code = ble_advertising_start(&f_advertising, BLE_ADV_MODE_FAST);
APP_ERROR_CHECK(err_code);
}
//-----------------------------------------------------------------------------
int main(void)
{
// Initialize.
log_init();
timers_init();
leds_init();
power_management_init();
ble_stack_init();
advertising_init();
// Start execution.
NRF_LOG_INFO("Beacon example started.");
advertising_start();
// Enter main loop.
for (;;)
{
idle_state_handle();
}
}
I am running in Release mode and have tried Debug mode and get the same results. The nRF_Log output is as below:
<info> app_timer: RTC: initialized.
<info> app: advertising_init
<info> app: Beacon example started.
<info> app: advertising_start
<info> app: Fast advertising.
On the nRF Connect app I am seeing under Raw:
0x02010404FF590002
I am seeing a five second advertisement so I know that parameter is being respected in the init sequence.
Any help or suggestions would be greatly appreciated.