diff --git a/nimble/host/include/host/ble_gap.h b/nimble/host/include/host/ble_gap.h index af0defa9fc..88bdaf1cd0 100644 --- a/nimble/host/include/host/ble_gap.h +++ b/nimble/host/include/host/ble_gap.h @@ -2682,6 +2682,17 @@ int ble_gap_set_path_loss_reporting_param(uint16_t conn_handle, uint8_t high_thr uint8_t high_hysteresis, uint8_t low_threshold, uint8_t low_hysteresis, uint16_t min_time_spent); #endif + +/** + * Set Data Related Address Changes Param + * + * @param adv_handle Advertising handle + * @param change_reason Reasons for refreshing addresses + * + * @return 0 on success; nonzero on failure. + */ +int ble_gap_set_data_related_addr_change_param(uint8_t adv_handle, uint8_t change_reason); + #ifdef __cplusplus } #endif diff --git a/nimble/host/src/ble_gap.c b/nimble/host/src/ble_gap.c index 4736415a37..d2a0c84fb9 100644 --- a/nimble/host/src/ble_gap.c +++ b/nimble/host/src/ble_gap.c @@ -6756,3 +6756,9 @@ ble_gap_set_transmit_power_reporting_enable(uint16_t conn_handle, return BLE_HS_ENOTSUP; #endif } + +int +ble_gap_set_data_related_addr_change_param(uint8_t adv_handle, uint8_t change_reason) +{ + return ble_hs_hci_util_set_data_addr_change(adv_handle, change_reason); +} diff --git a/nimble/host/src/ble_hs_hci_priv.h b/nimble/host/src/ble_hs_hci_priv.h index 356f3a538d..eeba8af34e 100644 --- a/nimble/host/src/ble_hs_hci_priv.h +++ b/nimble/host/src/ble_hs_hci_priv.h @@ -123,6 +123,7 @@ int ble_hs_hci_acl_tx(struct ble_hs_conn *conn, struct os_mbuf **om); int ble_hs_hci_frag_num_mbufs(void); int ble_hs_hci_frag_num_mbufs_free(void); +int ble_hs_hci_util_set_data_addr_change(uint8_t adv_handle, uint8_t change_reason); #ifdef __cplusplus } #endif diff --git a/nimble/host/src/ble_hs_hci_util.c b/nimble/host/src/ble_hs_hci_util.c index 7803252696..b84f36cc1b 100644 --- a/nimble/host/src/ble_hs_hci_util.c +++ b/nimble/host/src/ble_hs_hci_util.c @@ -277,3 +277,17 @@ ble_hs_hci_set_chan_class(const uint8_t *chan_map) BLE_HCI_OCF_LE_SET_HOST_CHAN_CLASS), &cmd, sizeof(cmd), NULL, 0); } + +int +ble_hs_hci_util_set_data_addr_change(uint8_t adv_handle, uint8_t change_reason) +{ + struct ble_hci_le_set_data_addr_change_cp cmd; + uint16_t opcode; + + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_DATA_ADDR_CHANGE); + + cmd.adv_handle = adv_handle; + cmd.change_reason = change_reason; + + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); +} diff --git a/nimble/include/nimble/hci_common.h b/nimble/include/nimble/hci_common.h index 742824d877..6af0e469e5 100644 --- a/nimble/include/nimble/hci_common.h +++ b/nimble/include/nimble/hci_common.h @@ -1130,6 +1130,12 @@ struct ble_hci_le_set_transmit_power_report_enable_cp { uint8_t remote_enable; } __attribute__((packed)); +#define BLE_HCI_OCF_LE_SET_DATA_ADDR_CHANGE (0x007C) +struct ble_hci_le_set_data_addr_change_cp { + uint8_t adv_handle; + uint8_t change_reason; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_DEFAULT_SUBRATE (0x007D) struct ble_hci_le_set_default_subrate_cp { uint16_t subrate_min;