Skip to content

Commit ef67ebc

Browse files
authored
Update Adapter.c
Added support for setting transmitter power currently done during every time advertising starts as implemented in the Arduino library
1 parent 5b9084a commit ef67ebc

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

ports/nrf/common-hal/_bleio/Adapter.c

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ STATIC uint32_t ble_stack_enable(void) {
220220
}
221221

222222
err_code = sd_ble_gap_appearance_set(BLE_APPEARANCE_UNKNOWN);
223-
return err_code;
223+
224+
return err_code;
224225
}
225226

226227
STATIC bool adapter_on_ble_evt(ble_evt_t *ble_evt, void *self_in) {
@@ -327,6 +328,10 @@ STATIC void bleio_adapter_reset_name(bleio_adapter_obj_t *self) {
327328
common_hal_bleio_adapter_set_name(self, (char*) default_ble_name);
328329
}
329330

331+
332+
// The nRF SD 6.1.0 can only do one concurrent advertisement so share the advertising handle.
333+
uint8_t adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET;
334+
330335
void common_hal_bleio_adapter_set_enabled(bleio_adapter_obj_t *self, bool enabled) {
331336
const bool is_enabled = common_hal_bleio_adapter_get_enabled(self);
332337

@@ -377,6 +382,14 @@ bool common_hal_bleio_adapter_get_enabled(bleio_adapter_obj_t *self) {
377382
return is_enabled;
378383
}
379384

385+
void common_hal_bleio_adapter_set_tx_power(bleio_adapter_obj_t *self, mp_int_t tx_power) {
386+
self->tx_power = tx_power;
387+
}
388+
389+
mp_int_t common_hal_bleio_adapter_get_tx_power(bleio_adapter_obj_t *self) {
390+
return self->tx_power;
391+
}
392+
380393
bleio_address_obj_t *common_hal_bleio_adapter_get_address(bleio_adapter_obj_t *self) {
381394
common_hal_bleio_adapter_set_enabled(self, true);
382395

@@ -601,8 +614,6 @@ mp_obj_t common_hal_bleio_adapter_connect(bleio_adapter_obj_t *self, bleio_addre
601614
return mp_const_none;
602615
}
603616

604-
// The nRF SD 6.1.0 can only do one concurrent advertisement so share the advertising handle.
605-
uint8_t adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET;
606617

607618
STATIC void check_data_fit(size_t data_len, bool connectable) {
608619
if (data_len > BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_MAX_SUPPORTED ||
@@ -707,7 +718,10 @@ uint32_t _common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self,
707718
}
708719

709720
ble_drv_add_event_handler(advertising_on_ble_evt, self);
710-
721+
err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, adv_handle, self->tx_power);
722+
if (err_code != NRF_SUCCESS) {
723+
return err_code;
724+
}
711725
vm_used_ble = true;
712726
err_code = sd_ble_gap_adv_start(adv_handle, BLE_CONN_CFG_TAG_CUSTOM);
713727
if (err_code != NRF_SUCCESS) {

0 commit comments

Comments
 (0)