setting tx power

in NUS ble pheripheral example where actually tx power is set?

  • Hi, 

    For TX Power,  you can call 
    bt_hci_cmd_send_sync(BT_HCI_OP_VS_WRITE_TX_POWER_LEVEL, buf, &rsp);

    Also, have a look at this sample github.com/.../hci_pwr_ctrl for the usage. 

    You can call the function in a thread after it's connected.

    Regards,
    Amanda

  •  will nrf52840 supprots all the power levels ? -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +3dBm and +4dBm.
    * In addition, on some chips following values are supported: +2dBm, +5dBm, +6dBm, +7dBm and +8dBm. 

  • static void advertising_init(void)
    {
    int8_t tx_power_level = 4;
    uint32_t err_code;
    ble_advertising_init_t init;

    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.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;

    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_fast_timeout = 0;
    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);

    err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, m_advertising.adv_handle, tx_power_level);
    APP_ERROR_CHECK(err_code);
    }

    i have set the transmit power to 4dbm but if i see the rssi level in nrf connect app its showing -45dbm when i am near to the device will it be set to 4dbm or not? is this the way to set the transmit power?

  • int8_t tx_power_level = 4;

    err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, m_advertising.adv_handle, tx_power_level);
    APP_ERROR_CHECK(err_code);

    will this increases the transmission range?

  • Hi,

    In general, increased TX output power will give better coverage if all other parameters are kept constant. If the transmitter and receiver are very close to each others, you may not see a large difference in the received signal strength. The range will depend on many factors, including output power, receiver sensitivity, environment, noise, etc. You can have a look at the range estimator from Bluetooth SIG, where you can input your parameters to get an estimate.

    You can take look at the ble_app_proximity example, the sd_ble_gap_tx_power_set function is only set as part of advertising_start(). If you're using it as part of advertising_init() you'll have to uninit and reinitialize the advertising before you start advertising every time. You can also just set it as part of advertising_start() and not advertising_init().

    -Amanda

Related