Hello,
I am using nRF52840, SDK_16.0.0, S140 SoftDevice and Segger 4.16 for flashing the image. I am using ‘ble_app_blinky’.
As per below mail I changed settings for long range.
//adv_params.primary_phy = BLE_GAP_PHY_1MBPS; // 1Mbps PHY layer
adv_params.primary_phy = BLE_GAP_PHY_CODED; // For long range
adv_params.secondary_phy = BLE_GAP_PHY_CODED;
Even I have gone through ble_app_att_mtu_throughput. It says below changes to be done in advertising_data_set() for long range.
.primary_phy = BLE_GAP_PHY_1MBPS, // Must be changed to connect in long range. (BLE_GAP_PHY_CODED)
.secondary_phy = BLE_GAP_PHY_1MBPS,
But still I am getting fatal error as 7 at sd_ble_gap_adv_set_configure() within advertising_init()
My queries are:
1) Any settings to be enabled further on top of ble_app_blinky.
2) I need only long range but not Extended Advertisement. So I used BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED. Will this cause any issue.
3) As per uart example code below, do I need to comment case BLE_GAP_EVT_PHY_UPDATE_REQUEST under ble_evt_handler() ?
https://github.com/NordicPlayground/nRF52-ble-long-range-demo
4) As per standards there are two LE Codes (S=2 with 500 Kb/s and the other one is S=8 with 125 Kb/s). Whether both are supported, if so how to set the same in nRF52840. For long range we want S=8. How to set this ?
5) If BLE_GAP_PHY_CODED is enabled, whether can I connect with my Mobile which is not BLE 5.0 compatible.
Below is my code snapshot.
static void advertising_init(void) { ret_code_t err_code; ble_advdata_t advdata; // Advertisement Data ble_advdata_t srdata; // Scan Response Data ble_advdata_manuf_data_t manufData; // Build and set Advertising data. memset(&advdata, 0, sizeof(advdata)); advdata.name_type = BLE_ADVDATA_FULL_NAME; advdata.include_appearance = false; // GAP apperance 0x19 advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; // Build and set Scan response data. memset(&srdata, 0, sizeof(srdata)); srdata.name_type = BLE_ADVDATA_FULL_NAME; // BLE_ADVDATA_NO_NAME; srdata.include_appearance = false; // GAP apperance 0x19 manufData.company_identifier = 0xFFFF; manufData.data.p_data = &u8TadUID[0]; manufData.data.size = sizeof(u8TadUID); srdata.p_manuf_specific_data = &manufData; advdata.p_manuf_specific_data = &manufData; 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 = ble_advdata_encode(&srdata, m_adv_data.scan_rsp_data.p_data, &m_adv_data.scan_rsp_data.len); APP_ERROR_CHECK(err_code); ble_gap_adv_params_t adv_params; // Set advertising parameters. memset(&adv_params, 0, sizeof(adv_params)); #if 0 adv_params.primary_phy = BLE_GAP_PHY_1MBPS; // 1Mbps PHY layer #else adv_params.primary_phy = BLE_GAP_PHY_CODED; // For long range adv_params.secondary_phy = BLE_GAP_PHY_CODED; #endif adv_params.duration = APP_ADV_DURATION; adv_params.properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED; //adv_params.properties.type = BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED; adv_params.p_peer_addr = NULL; adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; // Filter policy as part of 'White list' adv_params.interval = APP_ADV_INTERVAL; err_code = sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, &adv_params); APP_ERROR_CHECK(err_code); }
Thanks & Regards
Vishnu Beema