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

Can't use extended advertising flags

I'm using SDK 16.0 with SD340 6.1.1 on nRF52840

I'm working through alternating advertising on coded phy and non-coded phy. I have two scenarios where I don't want connections to be possible. In those scenarios, when I try to use:

BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED

BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED

I get back an error 10 from the soft device. Both exist in the ble_gap.h for the SD.

When I use:

BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED

It succeeds, but I am actually still able to connect using nRF Connect.

I have previously send questions to Garmin (thisisant), but they state that it supports everything that S140 v6.1.1 supports. I have not asked about this specifically, but I can.

Relevant code snippet:

void advertising_start(bool erase_bonds) {

	// Last advertising mode. If true, then the switch is to normal
	static uint8_t isCoded = 0;
	/*
	 * 1. check if we have connections. This sets connectable
	 * 2. if connectable, check start count. 0-18: le coded. 19: 1m non-coded
	 * coded: 1ms duration. 100ms interval. le coded.
	 * standard: 250ms duration. 50ms interval. 1m
	 */

	// Get number of current connections. We want 1 connection only. If we have one
	// Then switch to non-connectable advertising.
	uint32_t count = ble_conn_state_peripheral_conn_count();

	if (count) {
		// We have a connection. No more.
		advData.flags = BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED;
		// We know that we want to be coded at this point. B2V data
		advModes.ble_adv_primary_phy = BLE_GAP_PHY_CODED;
		advModes.ble_adv_secondary_phy = BLE_GAP_PHY_CODED;
		advModes.ble_adv_extended_enabled = true;
		// Do not expire advertising until a disconnect
		advModes.ble_adv_fast_timeout = 0;
		advModes.ble_adv_fast_interval = 160; /* 100ms */
		// set manuf data
		advData.p_manuf_specific_data = &manData;
	} else {
		// No connection. Alternate coded and non-coded
		if (isCoded) {
			isCoded = false;
			// only allow connections on standard phy
			//advData.flags = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED;
			advData.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;
			// send standard adv packet
			advModes.ble_adv_primary_phy = BLE_GAP_PHY_1MBPS;
			advModes.ble_adv_secondary_phy = BLE_GAP_PHY_1MBPS;
			advModes.ble_adv_extended_enabled = false;
			// Set duration to 250ms, interval to 50ms
			advModes.ble_adv_fast_timeout = 25; // units of 10ms (250ms)
			advModes.ble_adv_fast_interval = 80; // units of .625ms (50ms)
			// turn off manuf data for smaller packets
			advData.p_manuf_specific_data = 0;
		} else {
			isCoded = true;
			// Don't allow connections on coded phy
			advData.flags = BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED;
			// Send coded packet
			advModes.ble_adv_primary_phy = BLE_GAP_PHY_CODED;
			advModes.ble_adv_secondary_phy = BLE_GAP_PHY_CODED;
			advModes.ble_adv_extended_enabled = true;
			// set duration to 1s, interval to 100ms
			advModes.ble_adv_fast_timeout = 100; // units of 10ms (1s)
			advModes.ble_adv_fast_interval = 160; // units of .625ms (100ms)
			// set manuf data
			advData.p_manuf_specific_data = &manData;
		}
	}

	ble_advertising_modes_config_set(&m_advertising, &advModes);
	ble_advertising_advdata_update(&m_advertising, &advData, &srData);

	// Currently we don't use bonds, but leave this in for when we do. deleting bonds is part of reset.
	if (erase_bonds == true) {
		delete_bonds();
		// Advertising is started by PM_EVT_PEERS_DELETE_SUCCEEDED event.
	} else {
		ret_code_t err_code;

		err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
		APP_ERROR_CHECK(err_code);
	}
}

Parents Reply
  • It is obviously invalid flags, I explained that in the ticket. The issue is that according to the softdevice, the flags I'm using should be supported. With extended advertising turned on, I still can't use the extended advertising flags.

    Since it has been over two weeks, I have moved forward with using  BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED. I still insist that according to the documentation and the FAEs I spoke with, the extended version should have worked.

Children
No Data
Related