diff --git a/subsys/bluetooth/controller/Kconfig b/subsys/bluetooth/controller/Kconfig index 5432641a264..34cc5f165a9 100644 --- a/subsys/bluetooth/controller/Kconfig +++ b/subsys/bluetooth/controller/Kconfig @@ -807,6 +807,12 @@ config BT_CTLR_CONN_RSSI help Enable connection RSSI measurement. +config BT_CTLR_CONN_RSSI_EVENT + bool "Connection RSSI event" + depends on BT_CTLR_CONN_RSSI + help + Generate events for connection RSSI measurement. + endif # BT_CONN config BT_CTLR_ADV_INDICATION diff --git a/subsys/bluetooth/controller/hci/hci.c b/subsys/bluetooth/controller/hci/hci.c index e5a4cafae89..62ed4721ede 100644 --- a/subsys/bluetooth/controller/hci/hci.c +++ b/subsys/bluetooth/controller/hci/hci.c @@ -3123,12 +3123,12 @@ static void encode_control(struct node_rx_pdu *node_rx, return; #endif /* CONFIG_BT_CTLR_PHY */ -#if defined(CONFIG_BT_CTLR_CONN_RSSI) +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) case NODE_RX_TYPE_RSSI: BT_INFO("handle: 0x%04x, rssi: -%d dB.", handle, pdu_data->rssi); return; -#endif /* CONFIG_BT_CTLR_CONN_RSSI */ +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CONN */ #if defined(CONFIG_BT_CTLR_ADV_INDICATION) @@ -3513,9 +3513,9 @@ u8_t hci_get_class(struct node_rx_pdu *node_rx) case NODE_RX_TYPE_ENC_REFRESH: #endif /* CONFIG_BT_CTLR_LE_ENC */ -#if defined(CONFIG_BT_CTLR_CONN_RSSI) +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) case NODE_RX_TYPE_RSSI: -#endif /* CONFIG_BT_CTLR_CONN_RSSI */ +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #if defined(CONFIG_BT_CTLR_LE_PING) case NODE_RX_TYPE_APTO: #endif /* CONFIG_BT_CTLR_LE_PING */ diff --git a/subsys/bluetooth/controller/ll_sw/ctrl.c b/subsys/bluetooth/controller/ll_sw/ctrl.c index 30c5652cf95..255a67385e3 100644 --- a/subsys/bluetooth/controller/ll_sw/ctrl.c +++ b/subsys/bluetooth/controller/ll_sw/ctrl.c @@ -51,10 +51,10 @@ #define LOG_MODULE_NAME bt_ctlr_ctrl #include "common/log.h" -#if defined(CONFIG_BT_CTLR_CONN_RSSI) +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) #define RADIO_RSSI_SAMPLE_COUNT 10 #define RADIO_RSSI_THRESHOLD 4 -#endif /* CONFIG_BT_CTLR_CONN_RSSI */ +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #define SILENT_CONNECTION 0 @@ -4231,6 +4231,7 @@ isr_rx_conn_exit: _radio.conn_curr->rssi_latest = rssi; +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) if (((_radio.conn_curr->rssi_reported - rssi) & 0xFF) > RADIO_RSSI_THRESHOLD) { if (_radio.conn_curr->rssi_sample_count) { @@ -4240,6 +4241,7 @@ isr_rx_conn_exit: _radio.conn_curr->rssi_sample_count = RADIO_RSSI_SAMPLE_COUNT; } +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ } #else /* !CONFIG_BT_CTLR_CONN_RSSI */ ARG_UNUSED(rssi_ready); @@ -4892,7 +4894,7 @@ static inline void isr_close_conn(void) } #endif /* CONFIG_BT_CTLR_LE_PING */ -#if defined(CONFIG_BT_CTLR_CONN_RSSI) +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) /* generate RSSI event */ if (_radio.conn_curr->rssi_sample_count == 0) { struct radio_pdu_node_rx *node_rx; @@ -4917,7 +4919,7 @@ static inline void isr_close_conn(void) packet_rx_enqueue(); } } -#endif /* CONFIG_BT_CTLR_CONN_RSSI */ +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ /* break latency based on ctrl procedure pending */ if (((_radio.conn_curr->llcp_ack != _radio.conn_curr->llcp_req) && @@ -11684,8 +11686,10 @@ u32_t radio_adv_enable(u16_t interval, u8_t chan_map, u8_t filter_policy, #if defined(CONFIG_BT_CTLR_CONN_RSSI) conn->rssi_latest = 0x7F; +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) conn->rssi_reported = 0x7F; conn->rssi_sample_count = 0U; +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CTLR_CONN_RSSI */ #if defined(CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL) @@ -12237,8 +12241,10 @@ u32_t radio_connect_enable(u8_t adv_addr_type, u8_t *adv_addr, u16_t interval, #if defined(CONFIG_BT_CTLR_CONN_RSSI) conn->rssi_latest = 0x7F; +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) conn->rssi_reported = 0x7F; conn->rssi_sample_count = 0U; +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CTLR_CONN_RSSI */ #if defined(CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL) @@ -13026,9 +13032,9 @@ void ll_rx_dequeue(void) case NODE_RX_TYPE_PHY_UPDATE: #endif /* CONFIG_BT_CTLR_PHY */ -#if defined(CONFIG_BT_CTLR_CONN_RSSI) +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) case NODE_RX_TYPE_RSSI: -#endif /* CONFIG_BT_CTLR_CONN_RSSI */ +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CONN */ #if defined(CONFIG_BT_CTLR_PROFILE_ISR) @@ -13181,9 +13187,9 @@ void ll_rx_mem_release(void **node_rx) case NODE_RX_TYPE_PHY_UPDATE: #endif /* CONFIG_BT_CTLR_PHY */ -#if defined(CONFIG_BT_CTLR_CONN_RSSI) +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) case NODE_RX_TYPE_RSSI: -#endif /* CONFIG_BT_CTLR_CONN_RSSI */ +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CONN */ #if defined(CONFIG_BT_CTLR_PROFILE_ISR) diff --git a/subsys/bluetooth/controller/ll_sw/ctrl_internal.h b/subsys/bluetooth/controller/ll_sw/ctrl_internal.h index 5d058115d6f..1098317a6f8 100644 --- a/subsys/bluetooth/controller/ll_sw/ctrl_internal.h +++ b/subsys/bluetooth/controller/ll_sw/ctrl_internal.h @@ -331,8 +331,10 @@ struct connection { #if defined(CONFIG_BT_CTLR_CONN_RSSI) u8_t rssi_latest; +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) u8_t rssi_reported; u8_t rssi_sample_count; +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT) */ #endif /* CONFIG_BT_CTLR_CONN_RSSI */ #if defined(CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL) diff --git a/subsys/bluetooth/controller/ll_sw/lll_conn.h b/subsys/bluetooth/controller/ll_sw/lll_conn.h index 61c324d750c..5c498e1d7a9 100644 --- a/subsys/bluetooth/controller/ll_sw/lll_conn.h +++ b/subsys/bluetooth/controller/ll_sw/lll_conn.h @@ -105,8 +105,10 @@ struct lll_conn { #if defined(CONFIG_BT_CTLR_CONN_RSSI) u8_t rssi_latest; +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) u8_t rssi_reported; u8_t rssi_sample_count; +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CTLR_CONN_RSSI */ #if defined(CONFIG_BT_CTLR_CONN_META) diff --git a/subsys/bluetooth/controller/ll_sw/nordic/lll/lll_conn.c b/subsys/bluetooth/controller/ll_sw/nordic/lll/lll_conn.c index 6ffbdf7dafc..dcd54edefc0 100644 --- a/subsys/bluetooth/controller/ll_sw/nordic/lll/lll_conn.c +++ b/subsys/bluetooth/controller/ll_sw/nordic/lll/lll_conn.c @@ -328,6 +328,7 @@ lll_conn_isr_rx_exit: lll->rssi_latest = rssi; +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) if (((lll->rssi_reported - rssi) & 0xFF) > LLL_CONN_RSSI_THRESHOLD) { if (lll->rssi_sample_count) { @@ -336,6 +337,7 @@ lll_conn_isr_rx_exit: } else { lll->rssi_sample_count = LLL_CONN_RSSI_SAMPLE_COUNT; } +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ } #else /* !CONFIG_BT_CTLR_CONN_RSSI */ ARG_UNUSED(rssi_ready); diff --git a/subsys/bluetooth/controller/ll_sw/ull.c b/subsys/bluetooth/controller/ll_sw/ull.c index 1d800fa6df3..60acab00935 100644 --- a/subsys/bluetooth/controller/ll_sw/ull.c +++ b/subsys/bluetooth/controller/ll_sw/ull.c @@ -631,9 +631,9 @@ void ll_rx_dequeue(void) case NODE_RX_TYPE_PHY_UPDATE: #endif /* CONFIG_BT_CTLR_PHY */ -#if defined(CONFIG_BT_CTLR_CONN_RSSI) +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) case NODE_RX_TYPE_RSSI: -#endif /* CONFIG_BT_CTLR_CONN_RSSI */ +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CONN */ #if defined(CONFIG_BT_CTLR_PROFILE_ISR) @@ -790,9 +790,9 @@ void ll_rx_mem_release(void **node_rx) case NODE_RX_TYPE_PHY_UPDATE: #endif /* CONFIG_BT_CTLR_PHY */ -#if defined(CONFIG_BT_CTLR_CONN_RSSI) +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) case NODE_RX_TYPE_RSSI: -#endif /* CONFIG_BT_CTLR_CONN_RSSI */ +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CONN */ #if defined(CONFIG_BT_CTLR_PROFILE_ISR) diff --git a/subsys/bluetooth/controller/ll_sw/ull_adv.c b/subsys/bluetooth/controller/ll_sw/ull_adv.c index 4df9ea9cc14..283d0c5721d 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_adv.c +++ b/subsys/bluetooth/controller/ll_sw/ull_adv.c @@ -616,8 +616,10 @@ u8_t ll_adv_enable(u8_t enable) #if defined(CONFIG_BT_CTLR_CONN_RSSI) conn_lll->rssi_latest = 0x7F; +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) conn_lll->rssi_reported = 0x7F; conn_lll->rssi_sample_count = 0; +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CTLR_CONN_RSSI */ #if defined(CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL) diff --git a/subsys/bluetooth/controller/ll_sw/ull_conn.c b/subsys/bluetooth/controller/ll_sw/ull_conn.c index 75463a55759..9185715b10d 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_conn.c +++ b/subsys/bluetooth/controller/ll_sw/ull_conn.c @@ -1195,7 +1195,7 @@ void ull_conn_done(struct node_rx_event_done *done) } #endif /* CONFIG_BT_CTLR_LE_PING */ -#if defined(CONFIG_BT_CTLR_CONN_RSSI) +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) /* generate RSSI event */ if (lll->rssi_sample_count == 0) { struct node_rx_pdu *rx; @@ -1219,7 +1219,7 @@ void ull_conn_done(struct node_rx_event_done *done) ll_rx_sched(); } } -#endif /* CONFIG_BT_CTLR_CONN_RSSI */ +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ /* break latency based on ctrl procedure pending */ if (((((conn->llcp_req - conn->llcp_ack) & 0x03) == 0x02) && diff --git a/subsys/bluetooth/controller/ll_sw/ull_master.c b/subsys/bluetooth/controller/ll_sw/ull_master.c index 53598fdb737..f26816da438 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_master.c +++ b/subsys/bluetooth/controller/ll_sw/ull_master.c @@ -143,8 +143,10 @@ u8_t ll_create_connection(u16_t scan_interval, u16_t scan_window, #if defined(CONFIG_BT_CTLR_CONN_RSSI) conn_lll->rssi_latest = 0x7F; +#if defined(CONFIG_BT_CTLR_CONN_RSSI_EVENT) conn_lll->rssi_reported = 0x7F; conn_lll->rssi_sample_count = 0; +#endif /* CONFIG_BT_CTLR_CONN_RSSI_EVENT */ #endif /* CONFIG_BT_CTLR_CONN_RSSI */ #if defined(CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL)