Hi everyone,
I want to measure the strength signal of BLE of my device. I need to do this measure without connecting/paring my device to any other, just during advertising.
What I want to do is to generate extended advertising and if it's possible to be periodic too.
So my signal is as continuous as possible, trying to imitate that I'm sending a file, so this way I could measure the strength signal generated by my device.
At first I made my device be advertising and it was working but because the advertising are intervals the measure wasn't constant. I have modify my code to add the extended advertising but I did something wrong because I can't see my device when I scan for BT devices.
I'm using nRF52832 SoC, S132 6.1.1 version, SDK 15.3 version.
This is my code related to BLE:
-------------------------------------------
#define APP_BLE_CONN_CFG_TAG 1
#define DEVICE_NAME "Test FW"
#define NUS_SERVICE_UUID_TYPE BLE_UUID_TYPE_VENDOR_BEGIN
#define APP_BLE_OBSERVER_PRIO 3
#define APP_ADV_INTERVAL 32
#define APP_ADV_DURATION 18000
#define MIN_CONN_INTERVAL MSEC_TO_UNITS(20, UNIT_1_25_MS)
#define MAX_CONN_INTERVAL MSEC_TO_UNITS(75, UNIT_1_25_MS)
#define SLAVE_LATENCY 0
#define CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS)
#define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000)
#define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(30000)
#define MAX_CONN_PARAMS_UPDATE_COUNT 3
#define BLE_DIS_MANUFACTURER_NAME "NordicSemiconductor"
#define BLE_DIS_MODEL_NUMBER "NRF5X"
#define BLE_DIS_SERIAL_NUMBER "T0139836"
#define BLE_DIS_HW_REVISION "2016.42"
#define BLE_DIS_FW_REVISION "0.1.2"
#define BLE_DIS_SW_REVISION "1.2.3"
#define BLE_DIS_MANUFACTURER_ID 0x0000000059
#define BLE_DIS_OU_ID 0x123456
#define BLE_DIS_CERT_LIST {0x00, 0x01, 0x02, 0x03}
#define BLE_DIS_VENDOR_ID 0x0059
#define BLE_DIS_PRODUCT_ID 0x0001
#define BLE_DIS_PRODUCT_VERSION 0x0002
BLE_NUS_DEF(m_nus, NRF_SDH_BLE_TOTAL_LINK_COUNT);
NRF_BLE_GATT_DEF(m_gatt);
NRF_BLE_QWR_DEF(m_qwr);
BLE_ADVERTISING_DEF(m_advertising);
static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID;
static uint16_t m_ble_nus_max_data_len = BLE_GATT_ATT_MTU_DEFAULT - 3;
static ble_uuid_t m_adv_uuids[] ={
{BLE_UUID_NUS_SERVICE, NUS_SERVICE_UUID_TYPE},{BLE_UUID_DEVICE_INFORMATION_SERVICE, BLE_UUID_TYPE_BLE}
};
static void gap_params_init(void)
{
uint32_t err_code;
ble_gap_conn_params_t gap_conn_params;
ble_gap_conn_sec_mode_t sec_mode;
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);
err_code = sd_ble_gap_device_name_set(&sec_mode,
(const uint8_t *) DEVICE_NAME,
strlen(DEVICE_NAME));
APP_ERROR_CHECK(err_code);
memset(&gap_conn_params, 0, sizeof(gap_conn_params));
gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL;
gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL;
gap_conn_params.slave_latency = SLAVE_LATENCY;
gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT;
err_code = sd_ble_gap_ppcp_set(&gap_conn_params);
APP_ERROR_CHECK(err_code);
}
static void services_init(void)
{
uint32_t err_code;
ble_nus_init_t nus_init;
ble_dis_init_t dis_init;
nrf_ble_qwr_init_t qwr_init = {0};
// Initialize Queued Write Module.
qwr_init.error_handler = nrf_qwr_error_handler;
err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init);
APP_ERROR_CHECK(err_code);
// Initialize NUS.
memset(&nus_init, 0, sizeof(nus_init));
nus_init.data_handler = nus_data_handler;
err_code = ble_nus_init(&m_nus, &nus_init);
APP_ERROR_CHECK(err_code);
// Initialize Device Information Service.
ble_dis_sys_id_t sys_id;
ble_dis_pnp_id_t pnp_id;
ble_dis_reg_cert_data_list_t cert_list;
uint8_t cert_list_data[] = BLE_DIS_CERT_LIST;
memset(&dis_init, 0, sizeof(dis_init));
ble_srv_ascii_to_utf8(&dis_init.manufact_name_str, BLE_DIS_MANUFACTURER_NAME);
ble_srv_ascii_to_utf8(&dis_init.model_num_str, BLE_DIS_MODEL_NUMBER);
ble_srv_ascii_to_utf8(&dis_init.serial_num_str, BLE_DIS_SERIAL_NUMBER);
ble_srv_ascii_to_utf8(&dis_init.hw_rev_str, BLE_DIS_HW_REVISION);
ble_srv_ascii_to_utf8(&dis_init.fw_rev_str, BLE_DIS_FW_REVISION);
ble_srv_ascii_to_utf8(&dis_init.sw_rev_str, BLE_DIS_SW_REVISION);
sys_id.manufacturer_id = BLE_DIS_MANUFACTURER_ID;
sys_id.organizationally_unique_id = BLE_DIS_OU_ID;
cert_list.p_list = cert_list_data;
cert_list.list_len = sizeof(cert_list_data);
pnp_id.vendor_id_source = BLE_DIS_VENDOR_ID_SRC_BLUETOOTH_SIG;
pnp_id.vendor_id = BLE_DIS_VENDOR_ID;
pnp_id.product_id = BLE_DIS_PRODUCT_ID;
pnp_id.product_version = BLE_DIS_PRODUCT_VERSION;
dis_init.p_sys_id = &sys_id;
dis_init.p_reg_cert_data_list = &cert_list;
dis_init.p_pnp_id = &pnp_id;
dis_init.dis_char_rd_sec = SEC_OPEN;
err_code = ble_dis_init(&dis_init);
APP_ERROR_CHECK(err_code);
}
static void advertising_init(void)
{
uint32_t err_code;
ble_advertising_init_t init;
int8_t tx_power_level = 0;
memset(&init, 0, sizeof(init));
init.advdata.name_type = BLE_ADVDATA_FULL_NAME;
init.advdata.include_appearance = false;
init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE;
init.advdata.p_tx_power_level = &tx_power_level;
// init.advdata.
sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, NULL, tx_power_level);
init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);
init.srdata.uuids_complete.p_uuids = m_adv_uuids;
init.config.ble_adv_fast_enabled = true;
init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
init.config.ble_adv_fast_timeout = APP_ADV_DURATION;
init.config.ble_adv_primary_phy = BLE_GAP_PHY_1MBPS;
init.config.ble_adv_secondary_phy = BLE_GAP_PHY_2MBPS;
init.config.ble_adv_extended_enabled = true;
init.evt_handler = on_adv_evt;
err_code = ble_advertising_init(&m_advertising, &init);
APP_ERROR_CHECK(err_code);
ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}
static void advertising_start(void)
{
uint32_t err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
APP_ERROR_CHECK(err_code);
}