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

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

commit 2f44ac618c85bd451fc14ad4c17ca2bfffcb3110
Author: Piotr Narajowski <[email protected]>
AuthorDate: Fri Mar 13 15:04:42 2026 +0100

    apps/bttester: send disconnected event in case of l2cap conn req failure
    
    This change allows sending a BTP_L2CAP_EV_DISCONNECTED event containing
    an error code when L2CAP Connection request is rejected. Previously,
    no tester event was triggered in this scenario, which made it impossible
    to determine the reason for the connection failure.
---
 apps/bttester/src/btp_l2cap.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/apps/bttester/src/btp_l2cap.c b/apps/bttester/src/btp_l2cap.c
index 8e1e855ec..06976188f 100644
--- a/apps/bttester/src/btp_l2cap.c
+++ b/apps/bttester/src/btp_l2cap.c
@@ -207,7 +207,7 @@ connected_cb(uint16_t conn_handle, struct ble_l2cap_chan 
*chan,
 
 static void
 disconnected_cb(uint16_t conn_handle, struct ble_l2cap_chan *chan,
-                struct ble_l2cap_chan_info *chan_info, void *arg)
+                struct ble_l2cap_chan_info *chan_info, int status, void *arg)
 {
     struct btp_l2cap_disconnected_ev ev;
     struct ble_gap_conn_desc desc;
@@ -215,9 +215,15 @@ disconnected_cb(uint16_t conn_handle, struct 
ble_l2cap_chan *chan,
 
     memset(&ev, 0, sizeof(struct btp_l2cap_disconnected_ev));
 
-    channel = find_channel(chan);
-    assert(channel != NULL);
+    if (status != 0 && status != BLE_L2CAP_EVENT_COC_DISCONNECTED) {
+        /* Conection request failed */
+        channel = get_free_channel();
+    } else {
+        channel = find_channel(chan);
+        assert(channel != NULL);
+    }
 
+    ev.result = status;
     ev.chan_id = channel->chan_id;
     ev.psm = chan_info->psm;
 
@@ -266,6 +272,8 @@ tester_l2cap_event(struct ble_l2cap_event *event, void *arg)
 
         if (event->connect.status) {
             console_printf("LE COC error: %d\n", event->connect.status);
+            disconnected_cb(event->connect.conn_handle, event->connect.chan,
+                            &chan_info, (uint8_t)event->connect.status, arg);
             return 0;
         }
 
@@ -290,8 +298,8 @@ tester_l2cap_event(struct ble_l2cap_event *event, void *arg)
         console_printf("LE CoC disconnected, chan: 0x%08lx\n",
                        (uint32_t) event->disconnect.chan);
 
-        disconnected_cb(event->disconnect.conn_handle,
-                        event->disconnect.chan, &chan_info, arg);
+        disconnected_cb(event->disconnect.conn_handle, event->disconnect.chan,
+                        &chan_info, (uint8_t)event->connect.status, arg);
         return 0;
     case BLE_L2CAP_EVENT_COC_ACCEPT:
         ble_l2cap_get_chan_info(event->accept.chan,

Reply via email to