From 58b5243729395929ada4a7c8a0e520214f7bb20f Mon Sep 17 00:00:00 2001 From: jhchun Date: Wed, 15 Jul 2026 16:01:49 +0900 Subject: [PATCH] =?UTF-8?q?BLE=20=EC=97=B0=EA=B2=B0=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=EA=B0=80=20=EC=9D=B4=EB=AF=B8=20=EB=AA=A9?= =?UTF-8?q?=ED=91=9C=EA=B0=92=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20=EC=9E=AC?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20=EC=83=9D=EB=9E=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 요청 전 bt_conn_get_info()로 현재 체결값 조회 - Connection Interval, Supervision Timeout, Slave latency --- src/ble/ble_service.c | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/ble/ble_service.c b/src/ble/ble_service.c index af66d97..d40bcb8 100644 --- a/src/ble/ble_service.c +++ b/src/ble/ble_service.c @@ -432,6 +432,7 @@ static int ble_request_preferred_conn_params(bool count_attempt) .latency = BLE_SLAVE_LATENCY, .timeout = BLE_CONN_SUP_TIMEOUT, }; + struct bt_conn_info info; int err; if (current_conn == NULL) @@ -439,15 +440,41 @@ static int ble_request_preferred_conn_params(bool count_attempt) return -ENOTCONN; } + // 현재 체결된 파라미터를 조회해서, 이미 목표값이면 재요청/재시도 불필요 + err = bt_conn_get_info(current_conn, &info); + if ((err == 0) && (info.type == BT_CONN_TYPE_LE)) + { + uint16_t cur_interval = info.le.interval; + uint16_t cur_latency = info.le.latency; + uint16_t cur_timeout = info.le.timeout; + + DBG_PRINTF("[BLE] Current params: interval=%u(%u.%01ums) latency=%u timeout=%u(%ums)\r\n", + cur_interval, + (cur_interval * 125U) / 100U, + ((cur_interval * 125U) % 100U) / 10U, + cur_latency, + cur_timeout, + cur_timeout * 10U); + + if (ble_conn_param_is_preferred(cur_interval, cur_latency, cur_timeout)) + { + DBG_PRINTF("[BLE] Already at preferred params, skip request\r\n"); + return -EALREADY; + } + } + if (count_attempt) { conn_param_update_attempts++; } - DBG_PRINTF("[BLE] Request params: interval=%u latency=%u timeout=%u attempt=%u\r\n", + DBG_PRINTF("[BLE] Request params: interval=%u(%u.%01ums) latency=%u timeout=%u(%ums) attempt=%u\r\n", BLE_MIN_CONN_INTERVAL, + (BLE_MIN_CONN_INTERVAL * 125U) / 100U, + ((BLE_MIN_CONN_INTERVAL * 125U) % 100U) / 10U, BLE_SLAVE_LATENCY, BLE_CONN_SUP_TIMEOUT, + BLE_CONN_SUP_TIMEOUT * 10U, conn_param_update_attempts); err = bt_conn_le_param_update(current_conn, &conn_param); @@ -585,13 +612,17 @@ static bool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param) return true; } -static void le_param_updated(struct bt_conn *conn, uint16_t interval, - uint16_t latency, uint16_t timeout) +static void le_param_updated(struct bt_conn *conn, uint16_t interval, uint16_t latency, uint16_t timeout) { ARG_UNUSED(conn); - DBG_PRINTF("[BLE] Params: interval=%d latency=%d timeout=%d\r\n", - interval, latency, timeout); + DBG_PRINTF("[BLE] Params: interval=%u(%u.%01ums) latency=%u timeout=%u(%ums)\r\n", + interval, + (interval * 125U) / 100U, + ((interval * 125U) % 100U) / 10U, + latency, + timeout, + timeout * 10U); if (ble_conn_param_is_preferred(interval, latency, timeout)) {