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 78e3b2f9fd53f395ff1d5ef8ce7a7282c775cc7f
Author: Szymon Czapracki <[email protected]>
AuthorDate: Mon Jul 7 12:51:43 2025 +0200

    nimble/btp: Add support for subrating procedures
    
    Add proper BTP  subrating commands and functions in GAP.
    Required to satisfy corresponding auto-pts layer.
---
 apps/bttester/src/btp/btp_gap.h | 11 +++++++++++
 apps/bttester/src/btp_gap.c     | 30 ++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/apps/bttester/src/btp/btp_gap.h b/apps/bttester/src/btp/btp_gap.h
index 5485cd66e..ac6f26d5a 100644
--- a/apps/bttester/src/btp/btp_gap.h
+++ b/apps/bttester/src/btp/btp_gap.h
@@ -328,6 +328,17 @@ struct gap_periodic_adv_sync_transfer_recv_cmd {
     uint16_t sync_timeout;
     uint8_t flags;
 } __packed;
+
+#define GAP_SUBRATE_REQUEST 0x2b
+struct gap_subrate_request_cmd {
+    ble_addr_t address;
+    uint16_t subrate_min;
+    uint16_t subrate_max;
+    uint16_t max_latency;
+    uint16_t cont_num;
+    uint16_t supervision_timeout;
+} __packed;
+
 /* events */
 #define BTP_GAP_EV_NEW_SETTINGS        0x80
 struct btp_gap_new_settings_ev {
diff --git a/apps/bttester/src/btp_gap.c b/apps/bttester/src/btp_gap.c
index 48e995867..220bbd74e 100644
--- a/apps/bttester/src/btp_gap.c
+++ b/apps/bttester/src/btp_gap.c
@@ -2210,6 +2210,29 @@ periodic_adv_sync_transfer_set_info(const void *cmd, 
uint16_t cmd_len,
 }
 #endif
 
+#if MYNEWT_VAL(BLE_CONN_SUBRATING)
+static uint8_t
+subrate_request(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t 
*rsp_len)
+{
+    const struct gap_subrate_request_cmd *cp = cmd;
+    struct ble_gap_conn_desc desc;
+    int rc;
+
+    rc = gap_conn_find_by_addr(&cp->address, &desc);
+    if (rc) {
+        return BTP_STATUS_FAILED;
+    }
+
+    rc = ble_gap_subrate_req(desc.conn_handle, cp->subrate_min, 
cp->subrate_max,
+                             cp->max_latency, cp->cont_num, 
cp->supervision_timeout);
+    if (rc) {
+        return BTP_STATUS_FAILED;
+    }
+
+    return BTP_STATUS_SUCCESS;
+}
+#endif
+
 static const struct btp_handler handlers[] = {
     {
         .opcode = BTP_GAP_READ_SUPPORTED_COMMANDS,
@@ -2380,6 +2403,13 @@ static const struct btp_handler handlers[] = {
         .func = periodic_adv_sync_transfer_recv,
     },
 #endif
+#if MYNEWT_VAL(BLE_CONN_SUBRATING)
+    {
+        .opcode = GAP_SUBRATE_REQUEST,
+        .expect_len = sizeof(struct gap_subrate_request_cmd),
+        .func = subrate_request,
+    },
+#endif
 };
 
 static void

Reply via email to