From 0ca1c50208f5401c61729772a52bcc9fd7e7d221 Mon Sep 17 00:00:00 2001 From: Karel Tucek Date: Fri, 30 Jan 2026 15:52:52 +0100 Subject: [PATCH 1/3] Bluetooth: always exchange mtu right after connection. --- device/src/bt_conn.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/device/src/bt_conn.c b/device/src/bt_conn.c index 384e183f8..5a8f2a75c 100644 --- a/device/src/bt_conn.c +++ b/device/src/bt_conn.c @@ -270,6 +270,26 @@ static void enableDataLengthExtension(struct bt_conn *conn) { } } +static void mtuExchangeCallback(struct bt_conn *conn, uint8_t err, struct bt_gatt_exchange_params *params) { + if (err) { + LOG_WRN("MTU exchange failed for %s (err %u)", GetPeerStringByConn(conn), err); + } else { + LOG_INF("MTU exchange done for %s", GetPeerStringByConn(conn)); + } +} + +static void requestMtuExchange(struct bt_conn *conn) { + static struct bt_gatt_exchange_params exchange_params; + exchange_params.func = mtuExchangeCallback; + + LOG_INF("MTU exchanging %s", GetPeerStringByConn(conn)); + + int err = bt_gatt_exchange_mtu(conn, &exchange_params); + if (err && err != -EALREADY) { + LOG_WRN("MTU exchange request failed for %s (err %d)", GetPeerStringByConn(conn), err); + } +} + static void setLatency(struct bt_conn* conn, const struct bt_le_conn_param* params) { int err = bt_conn_le_param_update(conn, params); if (err) { @@ -595,6 +615,7 @@ static void connected(struct bt_conn *conn, uint8_t err) { // Without this, linux pairing fails, because tiny 27 byte packets // exhaust acl buffers easily enableDataLengthExtension(conn); + requestMtuExchange(conn); if (err) { LOG_WRN("Failed to connect to %s, err %u", GetPeerStringByConn(conn), err); From 84e09d4c8cfccfd4c9e50870eed52645a7e40a56 Mon Sep 17 00:00:00 2001 From: Karel Tucek Date: Fri, 30 Jan 2026 15:53:17 +0100 Subject: [PATCH 2/3] Decrease hogp log level to dbg. --- device/prj.conf.overlays/c2usb.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device/prj.conf.overlays/c2usb.conf b/device/prj.conf.overlays/c2usb.conf index 01d700a76..2f87d9674 100644 --- a/device/prj.conf.overlays/c2usb.conf +++ b/device/prj.conf.overlays/c2usb.conf @@ -5,7 +5,7 @@ CONFIG_NEWLIB_LIBC_NANO=y # CONFIG_SHELL_BACKEND_C2USB_LOG_LEVEL_DBG=y # CONFIG_WARN_EXPERIMENTAL=y CONFIG_UDC_DRIVER_LOG_LEVEL_WRN=y -CONFIG_C2USB_HOGP_LOG_LEVEL_INF=y +CONFIG_C2USB_HOGP_LOG_LEVEL_DBG=y CONFIG_C2USB_UDC_MAC_LOG_LEVEL_INF=y CONFIG_WARN_EXPERIMENTAL=n From 4161416c84fca75a63926c279f59c7dda7c9e36a Mon Sep 17 00:00:00 2001 From: Karel Tucek Date: Fri, 30 Jan 2026 16:04:42 +0100 Subject: [PATCH 3/3] Increase default hogp logging. --- device/prj.conf.overlays/nrf_shared.conf | 1 + device/src/bt_conn.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/device/prj.conf.overlays/nrf_shared.conf b/device/prj.conf.overlays/nrf_shared.conf index 194b7898b..fcef162d5 100644 --- a/device/prj.conf.overlays/nrf_shared.conf +++ b/device/prj.conf.overlays/nrf_shared.conf @@ -10,6 +10,7 @@ CONFIG_LOG_CMDS=y CONFIG_LOG_MODE_DEFERRED=y CONFIG_LOG_BUFFER_SIZE=2048 CONFIG_LOG_BACKEND_SHOW_COLOR=y +CONFIG_LOG_RUNTIME_FILTERING=y CONFIG_ASSERT=y diff --git a/device/src/bt_conn.c b/device/src/bt_conn.c index 5a8f2a75c..b187b2e1c 100644 --- a/device/src/bt_conn.c +++ b/device/src/bt_conn.c @@ -37,6 +37,7 @@ #include "right/src/bt_defs.h" #include "bt_health.h" #include "macros/status_buffer.h" +#include LOG_MODULE_REGISTER(Bt, LOG_LEVEL_INF); @@ -980,6 +981,9 @@ void BtConn_Init(void) { BT_TRACE_AND_ASSERT("bc6"); int err = 0; + int sourceId = log_source_id_get("hogp"); + log_filter_set(NULL, 0, sourceId, LOG_LEVEL_INF); + for (uint8_t peerId = PeerIdFirstHost; peerId <= PeerIdLastHost; peerId++) { Peers[peerId].id = peerId; Peers[peerId].conn = NULL;