From 046919b7d98423a21991d25851fffe26d3ba4514 Mon Sep 17 00:00:00 2001 From: jhchun Date: Mon, 20 Jul 2026 17:45:47 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=B0=EA=B2=B0=20=EC=A7=81=ED=9B=84=20FW?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=A8=BC=EC=A0=80=20MTU=20Exchange=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기존: central이 MTU Exchange Request를 보내면 FW에서 응답값 전달 → central에서 요청하지 않는 경우 기본값 23 유지됨 --- src/ble/ble_service.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/ble/ble_service.c b/src/ble/ble_service.c index e84f339..e1611a9 100644 --- a/src/ble/ble_service.c +++ b/src/ble/ble_service.c @@ -78,6 +78,35 @@ static void att_mtu_updated(struct bt_conn *conn, uint16_t tx, uint16_t rx) (current_notify_mtu > 3U) ? (current_notify_mtu - 3U) : 0U); } + +/* MTU Exchange 연결 직후 요청 */ +static void mtu_exchange_cb(struct bt_conn *conn, uint8_t err, struct bt_gatt_exchange_params *params) +{ + uint16_t uatt; + + ARG_UNUSED(params); + + if (err) + { + DBG_ERR("[BLE] MTU exchange failed err=%u\r\n", err); + return; + } + + uatt = bt_gatt_get_uatt_mtu(conn); + if (uatt != 0U) + { + current_notify_mtu = uatt; + } + + DBG_PRINTF("[BLE] MTU exchange complete uatt=%u notify_payload=%u\r\n", + uatt, + (uatt > 3U) ? (uatt - 3U) : 0U); +} + +static struct bt_gatt_exchange_params mtu_exchange_params = +{ + .func = mtu_exchange_cb, +}; static struct bt_gatt_cb gatt_callbacks = { .att_mtu_updated = att_mtu_updated, @@ -416,6 +445,16 @@ static void connected(struct bt_conn *conn, uint8_t err) bt_addr_le_to_str(bt_conn_get_dst(conn), addr_str, sizeof(addr_str)); DBG_CORE("[BLE] Peer: %s\r\n", addr_str); // 연결 정보 출력 + + err = bt_gatt_exchange_mtu(conn, &mtu_exchange_params); + if (err) + { + DBG_ERR("[BLE] MTU exchange request failed err=%d\r\n", err); + } + else + { + DBG_PRINTF("[BLE] MTU exchange requested\r\n"); + } conn_param_update_attempts = 0U; last_rx_conn_param_update_ms = 0;