This is an automated email from the ASF dual-hosted git repository.

janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit f4dd2f34f81ddd4fc638ce31694d207d8bd788ea
Author: Szymon Janc <[email protected]>
AuthorDate: Tue Dec 21 17:31:56 2021 +0100

    nimble/ll: Set LE supported states based on enabled roles
    
    This also fix claiming support for concurrent scanning and initiating
    which is not supported by LL yet.
---
 nimble/controller/src/ble_ll.c | 207 ++++++++++++++++++++++++++++++++---------
 1 file changed, 165 insertions(+), 42 deletions(-)

diff --git a/nimble/controller/src/ble_ll.c b/nimble/controller/src/ble_ll.c
index 0560b61..56e81a6 100644
--- a/nimble/controller/src/ble_ll.c
+++ b/nimble/controller/src/ble_ll.c
@@ -65,48 +65,171 @@
  */
 
 /* Supported states */
-#define BLE_LL_S_NCA                    (0x00000000001)
-#define BLE_LL_S_SA                     (0x00000000002)
-#define BLE_LL_S_CA                     (0x00000000004)
-#define BLE_LL_S_HDCA                   (0x00000000008)
-#define BLE_LL_S_PS                     (0x00000000010)
-#define BLE_LL_S_AS                     (0x00000000020)
-#define BLE_LL_S_INIT                   (0x00000000040)
-#define BLE_LL_S_SLAVE                  (0x00000000080)
-#define BLE_LL_S_NCA_PS                 (0x00000000100)
-#define BLE_LL_S_SA_PS                  (0x00000000200)
-#define BLE_LL_S_CA_PS                  (0x00000000400)
-#define BLE_LL_S_HDCA_PS                (0x00000000800)
-#define BLE_LL_S_NCA_AS                 (0x00000001000)
-#define BLE_LL_S_SA_AS                  (0x00000002000)
-#define BLE_LL_S_CA_AS                  (0x00000004000)
-#define BLE_LL_S_HDCA_AS                (0x00000008000)
-#define BLE_LL_S_NCA_INIT               (0x00000010000)
-#define BLE_LL_S_SA_INIT                (0x00000020000)
-#define BLE_LL_S_NCA_MASTER             (0x00000040000)
-#define BLE_LL_S_SA_MASTER              (0x00000080000)
-#define BLE_LL_S_NCA_SLAVE              (0x00000100000)
-#define BLE_LL_S_SA_SLAVE               (0x00000200000)
-#define BLE_LL_S_PS_INIT                (0x00000400000)
-#define BLE_LL_S_AS_INIT                (0x00000800000)
-#define BLE_LL_S_PS_MASTER              (0x00001000000)
-#define BLE_LL_S_AS_MASTER              (0x00002000000)
-#define BLE_LL_S_PS_SLAVE               (0x00004000000)
-#define BLE_LL_S_AS_SLAVE               (0x00008000000)
-#define BLE_LL_S_INIT_MASTER            (0x00010000000)
-#define BLE_LL_S_LDCA                   (0x00020000000)
-#define BLE_LL_S_LDCA_PS                (0x00040000000)
-#define BLE_LL_S_LDCA_AS                (0x00080000000)
-#define BLE_LL_S_CA_INIT                (0x00100000000)
-#define BLE_LL_S_HDCA_INIT              (0x00200000000)
-#define BLE_LL_S_LDCA_INIT              (0x00400000000)
-#define BLE_LL_S_CA_MASTER              (0x00800000000)
-#define BLE_LL_S_HDCA_MASTER            (0x01000000000)
-#define BLE_LL_S_LDCA_MASTER            (0x02000000000)
-#define BLE_LL_S_CA_SLAVE               (0x04000000000)
-#define BLE_LL_S_HDCA_SLAVE             (0x08000000000)
-#define BLE_LL_S_LDCA_SLAVE             (0x10000000000)
-#define BLE_LL_S_INIT_SLAVE             (0x20000000000)
+#if MYNEWT_VAL(BLE_LL_ROLE_BROADCASTER)
+#define BLE_LL_S_NCA                    ((uint64_t)1 << 0)
+#define BLE_LL_S_SA                     ((uint64_t)1 << 1)
+#else
+#define BLE_LL_S_NCA                    ((uint64_t)0 << 0)
+#define BLE_LL_S_SA                     ((uint64_t)0 << 1)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL)
+#define BLE_LL_S_CA                     ((uint64_t)1 << 2)
+#define BLE_LL_S_HDCA                   ((uint64_t)1 << 3)
+#else
+#define BLE_LL_S_CA                     ((uint64_t)0 << 2)
+#define BLE_LL_S_HDCA                   ((uint64_t)0 << 3)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_OBSERVER)
+#define BLE_LL_S_PS                     ((uint64_t)1 << 4)
+#define BLE_LL_S_AS                     ((uint64_t)1 << 5)
+#else
+#define BLE_LL_S_PS                     ((uint64_t)0 << 4)
+#define BLE_LL_S_AS                     ((uint64_t)0 << 5)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
+#define BLE_LL_S_INIT                   ((uint64_t)1 << 6)
+#else
+#define BLE_LL_S_INIT                   ((uint64_t)0 << 6)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL)
+#define BLE_LL_S_SLAVE                  ((uint64_t)1 << 7)
+#else
+#define BLE_LL_S_SLAVE                  ((uint64_t)0 << 7)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_BROADCASTER) && MYNEWT_VAL(BLE_LL_ROLE_OBSERVER)
+#define BLE_LL_S_NCA_PS                 ((uint64_t)1 << 8)
+#define BLE_LL_S_SA_PS                  ((uint64_t)1 << 9)
+#else
+#define BLE_LL_S_NCA_PS                 ((uint64_t)0 << 8)
+#define BLE_LL_S_SA_PS                  ((uint64_t)0 << 9)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) && MYNEWT_VAL(BLE_LL_ROLE_OBSERVER)
+#define BLE_LL_S_CA_PS                  ((uint64_t)1 << 10)
+#define BLE_LL_S_HDCA_PS                ((uint64_t)1 << 11)
+#else
+#define BLE_LL_S_CA_PS                  ((uint64_t)0 << 10)
+#define BLE_LL_S_HDCA_PS                ((uint64_t)0 << 11)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_BROADCASTER) && MYNEWT_VAL(BLE_LL_ROLE_OBSERVER)
+#define BLE_LL_S_NCA_AS                 ((uint64_t)1 << 12)
+#define BLE_LL_S_SA_AS                  ((uint64_t)1 << 13)
+#else
+#define BLE_LL_S_NCA_AS                 ((uint64_t)0 << 12)
+#define BLE_LL_S_SA_AS                  ((uint64_t)0 << 13)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) && MYNEWT_VAL(BLE_LL_ROLE_OBSERVER)
+#define BLE_LL_S_CA_AS                  ((uint64_t)1 << 14)
+#define BLE_LL_S_HDCA_AS                ((uint64_t)1 << 15)
+#else
+#define BLE_LL_S_CA_AS                  ((uint64_t)0 << 14)
+#define BLE_LL_S_HDCA_AS                ((uint64_t)0 << 15)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_BROADCASTER) && MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
+#define BLE_LL_S_NCA_INIT               ((uint64_t)1 << 16)
+#define BLE_LL_S_SA_INIT                ((uint64_t)1 << 17)
+#define BLE_LL_S_NCA_MASTER             ((uint64_t)1 << 18)
+#define BLE_LL_S_SA_MASTER              ((uint64_t)1 << 19)
+#else
+#define BLE_LL_S_NCA_INIT               ((uint64_t)0 << 16)
+#define BLE_LL_S_SA_INIT                ((uint64_t)0 << 17)
+#define BLE_LL_S_NCA_MASTER             ((uint64_t)0 << 18)
+#define BLE_LL_S_SA_MASTER              ((uint64_t)0 << 19)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_BROADCASTER) && MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL)
+#define BLE_LL_S_NCA_SLAVE              ((uint64_t)1 << 20)
+#define BLE_LL_S_SA_SLAVE               ((uint64_t)1 << 21)
+#else
+#define BLE_LL_S_NCA_SLAVE              ((uint64_t)0 << 20)
+#define BLE_LL_S_SA_SLAVE               ((uint64_t)0 << 21)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_OBSERVER) && MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
+/* We do not support passive scanning while initiating yet */
+#define BLE_LL_S_PS_INIT                ((uint64_t)0 << 22)
+/* We do not support active scanning while initiating yet */
+#define BLE_LL_S_AS_INIT                ((uint64_t)0 << 23)
+#define BLE_LL_S_PS_MASTER              ((uint64_t)1 << 24)
+#define BLE_LL_S_AS_MASTER              ((uint64_t)1 << 25)
+#else
+#define BLE_LL_S_PS_INIT                ((uint64_t)0 << 22)
+#define BLE_LL_S_AS_INIT                ((uint64_t)0 << 23)
+#define BLE_LL_S_PS_MASTER              ((uint64_t)0 << 24)
+#define BLE_LL_S_AS_MASTER              ((uint64_t)0 << 25)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_OBSERVER) && MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL)
+#define BLE_LL_S_PS_SLAVE               ((uint64_t)1 << 26)
+#define BLE_LL_S_AS_SLAVE               ((uint64_t)1 << 27)
+#else
+#define BLE_LL_S_PS_SLAVE               ((uint64_t)0 << 26)
+#define BLE_LL_S_AS_SLAVE               ((uint64_t)0 << 27)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
+#define BLE_LL_S_INIT_MASTER            ((uint64_t)1 << 28)
+#else
+#define BLE_LL_S_INIT_MASTER            ((uint64_t)0 << 28)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL)
+#define BLE_LL_S_LDCA                   ((uint64_t)1 << 29)
+#else
+#define BLE_LL_S_LDCA                   ((uint64_t)0 << 29)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) && MYNEWT_VAL(BLE_LL_ROLE_OBSERVER)
+#define BLE_LL_S_LDCA_PS                ((uint64_t)1 << 30)
+#define BLE_LL_S_LDCA_AS                ((uint64_t)1 << 31)
+#else
+#define BLE_LL_S_LDCA_PS                ((uint64_t)0 << 30)
+#define BLE_LL_S_LDCA_AS                ((uint64_t)0 << 31)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) && MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
+#define BLE_LL_S_CA_INIT                ((uint64_t)1 << 32)
+#define BLE_LL_S_HDCA_INIT              ((uint64_t)1 << 33)
+#define BLE_LL_S_LDCA_INIT              ((uint64_t)1 << 34)
+#else
+#define BLE_LL_S_CA_INIT                ((uint64_t)0 << 32)
+#define BLE_LL_S_HDCA_INIT              ((uint64_t)0 << 33)
+#define BLE_LL_S_LDCA_INIT              ((uint64_t)0 << 34)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
+#define BLE_LL_S_CA_MASTER              ((uint64_t)1 << 35)
+#define BLE_LL_S_HDCA_MASTER            ((uint64_t)1 << 36)
+#define BLE_LL_S_LDCA_MASTER            ((uint64_t)1 << 37)
+#else
+#define BLE_LL_S_CA_MASTER              ((uint64_t)0 << 35)
+#define BLE_LL_S_HDCA_MASTER            ((uint64_t)0 << 36)
+#define BLE_LL_S_LDCA_MASTER            ((uint64_t)0 << 37)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL)
+#define BLE_LL_S_CA_SLAVE               ((uint64_t)1 << 38)
+#define BLE_LL_S_HDCA_SLAVE             ((uint64_t)1 << 39)
+#define BLE_LL_S_LDCA_SLAVE             ((uint64_t)1 << 40)
+#else
+#define BLE_LL_S_CA_SLAVE               ((uint64_t)0 << 38)
+#define BLE_LL_S_HDCA_SLAVE             ((uint64_t)0 << 39)
+#define BLE_LL_S_LDCA_SLAVE             ((uint64_t)0 << 40)
+#endif
+
+#if MYNEWT_VAL(BLE_LL_ROLE_PERIPHERAL) && MYNEWT_VAL(BLE_LL_ROLE_CENTRAL)
+#define BLE_LL_S_INIT_SLAVE             ((uint64_t)1 << 41)
+#else
+#define BLE_LL_S_INIT_SLAVE             ((uint64_t)0 << 41)
+#endif
 
 #define BLE_LL_SUPPORTED_STATES             \
 (                                           \

Reply via email to