You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2022/04/08 12:36:20 UTC

[mynewt-nimble] branch master updated: nimble/ll: Adjust periodic sync HCI commands to 5.3

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

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


The following commit(s) were added to refs/heads/master by this push:
     new b2ac02e8 nimble/ll: Adjust periodic sync HCI commands to 5.3
b2ac02e8 is described below

commit b2ac02e87f39167e76f12229b07ab703f0bbbc40
Author: Andrzej Kaczmarek <an...@codecoup.pl>
AuthorDate: Thu Apr 7 14:14:37 2022 +0200

    nimble/ll: Adjust periodic sync HCI commands to 5.3
    
    There are some new parameter values added in 5.3 to control duplicate
    filtering. Since we do not support ADI in periodic advertising, we
    simply return a proper error. Note that error is defined only for
    HCI_LE_Periodic_Advertising_Create_Sync but we add the same behavior for
    other commands also, as otherwise that would not make any sense.
---
 nimble/controller/src/ble_ll_conn_hci.c | 17 +++++++++++++----
 nimble/controller/src/ble_ll_sync.c     | 32 ++++++++++++++++++++++++++------
 nimble/include/nimble/hci_common.h      |  1 +
 3 files changed, 40 insertions(+), 10 deletions(-)

diff --git a/nimble/controller/src/ble_ll_conn_hci.c b/nimble/controller/src/ble_ll_conn_hci.c
index 4a07ab76..be41bf62 100644
--- a/nimble/controller/src/ble_ll_conn_hci.c
+++ b/nimble/controller/src/ble_ll_conn_hci.c
@@ -2038,9 +2038,13 @@ ble_ll_set_sync_transfer_params(const uint8_t *cmdbuf, uint8_t len,
         goto done;
     }
 
-    if (cmd->mode > 0x02) {
-        rc = BLE_ERR_INV_HCI_CMD_PARMS;
-        goto done;
+    if ((MYNEWT_VAL(BLE_VERSION) >= 53 ) && (cmd->mode == 0x03)) {
+        /* We do not support ADI in periodic advertising thus cannot enable
+         * duplicate filtering.
+         */
+        return BLE_ERR_UNSUPPORTED;
+    } else if (cmd->mode > 0x02) {
+        return BLE_ERR_INV_HCI_CMD_PARMS;
     }
 
     skip = le16toh(cmd->skip);
@@ -2091,7 +2095,12 @@ ble_ll_set_default_sync_transfer_params(const uint8_t *cmdbuf, uint8_t len)
         return BLE_ERR_INV_HCI_CMD_PARMS;
     }
 
-    if (cmd->mode > 0x02) {
+    if ((MYNEWT_VAL(BLE_VERSION) >= 53 ) && (cmd->mode == 0x03)) {
+        /* We do not support ADI in periodic advertising thus cannot enable
+         * duplicate filtering.
+         */
+        return BLE_ERR_UNSUPPORTED;
+    } else if (cmd->mode > 0x02) {
         return BLE_ERR_INV_HCI_CMD_PARMS;
     }
 
diff --git a/nimble/controller/src/ble_ll_sync.c b/nimble/controller/src/ble_ll_sync.c
index 72da2d97..0395c72b 100644
--- a/nimble/controller/src/ble_ll_sync.c
+++ b/nimble/controller/src/ble_ll_sync.c
@@ -1465,11 +1465,22 @@ ble_ll_sync_create(const uint8_t *cmdbuf, uint8_t len)
         return BLE_ERR_INV_HCI_CMD_PARMS;
     }
 
-#if MYNEWT_VAL(BLE_VERSION) >= 51
-    if (cmd->options > BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_OPT_DISABLED) {
-#else
-    if (cmd->options > BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_OPT_FILTER) {
-#endif
+    if (MYNEWT_VAL(BLE_VERSION) >= 53) {
+        if (cmd->options & 0xf8) {
+            return BLE_ERR_INV_HCI_CMD_PARMS;
+        }
+        if (!(cmd->options & BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_OPT_DISABLED) &&
+            (cmd->options & BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_OPT_DUPLICATES)) {
+            /* We do not support ADI in periodic advertising thus cannot enable
+             * duplicate filtering.
+             */
+            return BLE_ERR_UNSUPPORTED;
+        }
+    } else if (MYNEWT_VAL(BLE_VERSION) >= 51) {
+        if (cmd->options & 0xfc) {
+            return BLE_ERR_INV_HCI_CMD_PARMS;
+        }
+    } else if (cmd->options & 0xfe) {
         return BLE_ERR_INV_HCI_CMD_PARMS;
     }
 
@@ -1743,7 +1754,16 @@ ble_ll_sync_receive_enable(const uint8_t *cmdbuf, uint8_t len)
         return BLE_ERR_INV_HCI_CMD_PARMS;
     }
 
-    if (cmd->enable > 0x01) {
+    if (MYNEWT_VAL(BLE_VERSION) >= 53) {
+        if (cmd->enable > 0x03) {
+            return BLE_ERR_INV_HCI_CMD_PARMS;
+        } else if (cmd->enable == 0x03) {
+            /* We do not support ADI in periodic advertising thus cannot enable
+             * duplicate filtering.
+             */
+            return BLE_ERR_UNSUPPORTED;
+        }
+    } else if (cmd->enable > 0x01) {
         return BLE_ERR_INV_HCI_CMD_PARMS;
     }
 
diff --git a/nimble/include/nimble/hci_common.h b/nimble/include/nimble/hci_common.h
index c52dea20..58de8a6c 100644
--- a/nimble/include/nimble/hci_common.h
+++ b/nimble/include/nimble/hci_common.h
@@ -709,6 +709,7 @@ struct ble_hci_le_ext_create_conn_cp {
 
 #define BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_OPT_FILTER      0x01
 #define BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_OPT_DISABLED    0x02
+#define BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_OPT_DUPLICATES  0x04
 
 #define BLE_HCI_OCF_LE_PERIODIC_ADV_CREATE_SYNC          (0x0044)
 struct ble_hci_le_periodic_adv_create_sync_cp {