Bluetooth: Controller: Add advertisement event indication feature

Add a Controller event that indicates everytime
advertisement event has been transmitted on air.

Change-id: I4722488bbfeca987e66983faf5b26467407a89c9
Signed-off-by: Vinayak Chettimada <vinayak.kariappa.chettimada@nordicsemi.no>
This commit is contained in:
Vinayak Chettimada 2017-03-10 11:53:38 +01:00 committed by Johan Hedberg
commit 0d75faf02d
6 changed files with 44 additions and 0 deletions

View file

@ -87,6 +87,11 @@ config BLUETOOTH_CONTROLLER_CONN_RSSI
help
Enable connection RSSI measurement.
config BLUETOOTH_CONTROLLER_ADV_INDICATION
bool "Advertisement indications"
help
Generate events indicating on air advertisement events.
comment "BLE Controller debug configuration"
config BLUETOOTH_CONTROLLER_ASSERT_HANDLER

View file

@ -1127,6 +1127,12 @@ static void encode_control(struct radio_pdu_node_rx *node_rx,
return;
#endif /* CONFIG_BLUETOOTH_CONTROLLER_CONN_RSSI */
#if defined(CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION)
case NODE_RX_TYPE_ADV_INDICATION:
BT_INFO("Advertised.");
return;
#endif /* CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION */
#if defined(CONFIG_BLUETOOTH_CONTROLLER_PROFILE_ISR)
case NODE_RX_TYPE_PROFILE:
BT_INFO("l: %d, %d, %d; t: %d, %d, %d.",

View file

@ -2673,6 +2673,25 @@ static inline void isr_radio_state_close(void)
switch (_radio.role) {
case ROLE_ADV:
dont_close = isr_close_adv();
#if defined(CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION)
if (!dont_close) {
struct radio_pdu_node_rx *radio_pdu_node_rx;
radio_pdu_node_rx = packet_rx_reserve_get(3);
if (radio_pdu_node_rx) {
radio_pdu_node_rx->hdr.type =
NODE_RX_TYPE_ADV_INDICATION;
radio_pdu_node_rx->hdr.handle = 0xFFFF;
/* TODO: add other info by defining a payload
* structure.
*/
packet_rx_enqueue();
}
}
#endif /* CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION */
break;
case ROLE_OBS:
@ -7940,6 +7959,10 @@ void radio_rx_dequeue(void)
case NODE_RX_TYPE_PROFILE:
#endif /* CONFIG_BLUETOOTH_CONTROLLER_PROFILE_ISR */
#if defined(CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION)
case NODE_RX_TYPE_ADV_INDICATION:
#endif /* CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION */
/* release data link credit quota */
LL_ASSERT(_radio.link_rx_data_quota <
(_radio.packet_rx_count - 1));
@ -7988,6 +8011,10 @@ void radio_rx_mem_release(struct radio_pdu_node_rx **radio_pdu_node_rx)
case NODE_RX_TYPE_PROFILE:
#endif /* CONFIG_BLUETOOTH_CONTROLLER_PROFILE_ISR */
#if defined(CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION)
case NODE_RX_TYPE_ADV_INDICATION:
#endif /* CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION */
mem_release(_radio_pdu_node_rx_free,
&_radio.pkt_rx_data_free);
break;

View file

@ -209,6 +209,10 @@ enum radio_pdu_node_rx_type {
#if defined(CONFIG_BLUETOOTH_CONTROLLER_PROFILE_ISR)
NODE_RX_TYPE_PROFILE,
#endif /* CONFIG_BLUETOOTH_CONTROLLER_PROFILE_ISR */
#if defined(CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION)
NODE_RX_TYPE_ADV_INDICATION,
#endif /* CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION */
};
struct radio_pdu_node_rx_hdr {

View file

@ -3,6 +3,7 @@ CONFIG_BLUETOOTH_CONTROLLER=y
CONFIG_BLUETOOTH_CONTROLLER_LE_PING=n
CONFIG_BLUETOOTH_CONTROLLER_DATA_LENGTH=n
CONFIG_BLUETOOTH_CONTROLLER_CONN_RSSI=n
CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION=n
CONFIG_BLUETOOTH_PERIPHERAL=y
CONFIG_BLUETOOTH_CENTRAL=y
CONFIG_BLUETOOTH_SMP=y

View file

@ -1,6 +1,7 @@
CONFIG_BLUETOOTH=y
CONFIG_BLUETOOTH_CONTROLLER=y
CONFIG_BLUETOOTH_CONTROLLER_CONN_RSSI=y
CONFIG_BLUETOOTH_CONTROLLER_ADV_INDICATION=y
CONFIG_BLUETOOTH_CONTROLLER_PROFILE_ISR=y
CONFIG_BLUETOOTH_PERIPHERAL=y
CONFIG_BLUETOOTH_CENTRAL=y