diff --git a/subsys/bluetooth/controller/Kconfig b/subsys/bluetooth/controller/Kconfig index 0bd1b651ee2..8ff47ab63b8 100644 --- a/subsys/bluetooth/controller/Kconfig +++ b/subsys/bluetooth/controller/Kconfig @@ -136,6 +136,8 @@ config BLUETOOTH_CONTROLLER_PHY Enable support for Bluetooth 5.0 PHY Update Procedure in the Controller. +endif # BLUETOOTH_CONN + config BLUETOOTH_CONTROLLER_CHAN_SEL_2 bool "Channel Selection Algorithm #2" default y @@ -143,7 +145,14 @@ config BLUETOOTH_CONTROLLER_CHAN_SEL_2 Enable support for Bluetooth 5.0 LE Channel Selection Algorithm #2 in the Controller. -endif # BLUETOOTH_CONN +config BLUETOOTH_CONTROLLER_ADV_EXT + bool "LE Advertising Extensions" + select BLUETOOTH_CONTROLLER_SCAN_REQ_NOTIFY + select BLUETOOTH_CONTROLLER_CHAN_SEL_2 + default y + help + Enable support for Bluetooth 5.0 LE Advertising Extensions in the + Controller. config BLUETOOTH_CONTROLLER_ADVANCED_FEATURES bool "Show advanced features" diff --git a/subsys/bluetooth/controller/ll_sw/pdu.h b/subsys/bluetooth/controller/ll_sw/pdu.h index 96e04e0e082..af2d52949b9 100644 --- a/subsys/bluetooth/controller/ll_sw/pdu.h +++ b/subsys/bluetooth/controller/ll_sw/pdu.h @@ -53,6 +53,71 @@ struct pdu_adv_payload_connect_ind { } __packed lldata; } __packed; +#if defined(CONFIG_BLUETOOTH_CONTROLLER_ADV_EXT) +struct pdu_adv_payload_com_ext_adv { + u8_t ext_hdr_len:6; + u8_t adv_mode:2; + u8_t ext_hdr_adi_adv_data[254]; +} __packed; + +enum ext_adv_mode { + EXT_ADV_MODE_NON_CONN_NON_SCAN = 0x00, + EXT_ADV_MODE_CONN_NON_SCAN = 0x01, + EXT_ADV_MODE_NON_CONN_SCAN = 0x02, +}; + +struct ext_adv_hdr { + u8_t adv_addr:1; + u8_t tgt_addr:1; + u8_t rfu0:1; + u8_t adi:1; + u8_t aux_ptr:1; + u8_t sync_info:1; + u8_t tx_pwr:1; + u8_t rfu1:1; +} __packed; + +struct ext_adv_adi { + u16_t did:12; + u16_t sid:4; +} __packed; + +struct ext_adv_aux_ptr { + u8_t chan_idx:6; + u8_t ca:1; + u8_t offs_units:1; + u16_t offs:13; + u16_t phy:3; +} __packed; + +enum ext_adv_aux_ptr_ca { + EXT_ADV_AUX_PTR_CA_500_PPM = 0x00, + EXT_ADV_AUX_PTR_CA_50_PPM = 0x01, +}; + +enum ext_adv_offs_units { + EXT_ADV_AUX_PTR_OFFS_UNITS_30 = 0x00, + EXT_ADV_AUX_PTR_OFFS_UNITS_300 = 0x01, +}; + +enum ext_adv_aux_phy { + EXT_ADV_AUX_PHY_LE_1M = 0x00, + EXT_ADV_AUX_PHY_LE_2M = 0x01, + EXT_ADV_AUX_PHY_LE_COD = 0x02, +}; + +struct ext_adv_sync_info { + u16_t sync_pkt_offs:13; + u16_t offs_units:1; + u16_t rfu:2; + u16_t interval; + u8_t sca_chm[5]; + u32_t aa; + u8_t crc_init[3]; + u16_t evt_cntr; +} __packed; +#endif /* CONFIG_BLUETOOTH_CONTROLLER_ADV_EXT */ + enum pdu_adv_type { PDU_ADV_TYPE_ADV_IND = 0x00, PDU_ADV_TYPE_DIRECT_IND = 0x01, @@ -86,6 +151,10 @@ struct pdu_adv { struct pdu_adv_payload_scan_req scan_req; struct pdu_adv_payload_scan_rsp scan_rsp; struct pdu_adv_payload_connect_ind connect_ind; + +#if defined(CONFIG_BLUETOOTH_CONTROLLER_ADV_EXT) + struct pdu_adv_payload_com_ext_adv adv_ext_ind; +#endif /* CONFIG_BLUETOOTH_CONTROLLER_ADV_EXT */ } __packed payload; } __packed; diff --git a/tests/bluetooth/init/prj_controller_4_0.conf b/tests/bluetooth/init/prj_controller_4_0.conf index f68027548d5..2313168587a 100644 --- a/tests/bluetooth/init/prj_controller_4_0.conf +++ b/tests/bluetooth/init/prj_controller_4_0.conf @@ -9,6 +9,7 @@ CONFIG_BLUETOOTH_CONTROLLER_LE_PING=n CONFIG_BLUETOOTH_CONTROLLER_DATA_LENGTH=n CONFIG_BLUETOOTH_CONTROLLER_PHY=n CONFIG_BLUETOOTH_CONTROLLER_CHAN_SEL_2=n +CONFIG_BLUETOOTH_CONTROLLER_ADV_EXT=n CONFIG_BLUETOOTH_CONTROLLER_TIFS_HW=y CONFIG_BLUETOOTH_CONTROLLER_FAST_ENC=n CONFIG_BLUETOOTH_CONTROLLER_CONN_RSSI=n diff --git a/tests/bluetooth/init/prj_controller_dbg.conf b/tests/bluetooth/init/prj_controller_dbg.conf index 52405b49ff4..631a6c6d653 100644 --- a/tests/bluetooth/init/prj_controller_dbg.conf +++ b/tests/bluetooth/init/prj_controller_dbg.conf @@ -12,6 +12,7 @@ CONFIG_BLUETOOTH_CONTROLLER_PHY_2M=y CONFIG_BLUETOOTH_CONTROLLER_PHY_2M_NRF=y CONFIG_BLUETOOTH_CONTROLLER_PHY_CODED=y CONFIG_BLUETOOTH_CONTROLLER_CHAN_SEL_2=y +CONFIG_BLUETOOTH_CONTROLLER_ADV_EXT=y CONFIG_BLUETOOTH_CONTROLLER_TIFS_HW=n CONFIG_BLUETOOTH_CONTROLLER_FAST_ENC=y CONFIG_BLUETOOTH_CONTROLLER_CONN_RSSI=y diff --git a/tests/bluetooth/init/prj_controller_tiny.conf b/tests/bluetooth/init/prj_controller_tiny.conf index 6314d55261f..e4893973d39 100644 --- a/tests/bluetooth/init/prj_controller_tiny.conf +++ b/tests/bluetooth/init/prj_controller_tiny.conf @@ -9,6 +9,7 @@ CONFIG_BLUETOOTH_CONTROLLER_LE_PING=n CONFIG_BLUETOOTH_CONTROLLER_DATA_LENGTH=n CONFIG_BLUETOOTH_CONTROLLER_PHY=n CONFIG_BLUETOOTH_CONTROLLER_CHAN_SEL_2=n +CONFIG_BLUETOOTH_CONTROLLER_ADV_EXT=n CONFIG_BLUETOOTH_CONTROLLER_TIFS_HW=y CONFIG_BLUETOOTH_CONTROLLER_FAST_ENC=n CONFIG_BLUETOOTH_CONTROLLER_CONN_RSSI=n