양산 모드인 경우 BLE 보안 실패 처리 개선

- PM 핸들러 중복 호출 제거
- conn_sec_failed 재페어링 로직 일원화
- NRF_ERROR_BUSY 크래시 수정: 보안 실패 시 보드 리셋되는 현상 개선
This commit is contained in:
jhChun
2026-03-27 16:47:46 +09:00
parent 3455bc2b38
commit de9774a7ce
2 changed files with 19 additions and 21 deletions

View File

@@ -97,9 +97,8 @@ void ble_security_quick_pm_handler(pm_evt_t const *p_evt)
// Call standard handlers (required)
pm_handler_on_pm_evt(p_evt);
pm_handler_disconnect_on_sec_failure(p_evt);
pm_handler_flash_clean(p_evt);
// Handle events
switch (p_evt->evt_id) {
case PM_EVT_CONN_SEC_SUCCEEDED:
@@ -109,17 +108,26 @@ void ble_security_quick_pm_handler(pm_evt_t const *p_evt)
DBG_PRINTF("PROD: Link secured (bonded)\r\n");
}
break;
case PM_EVT_CONN_SEC_FAILED:
DBG_PRINTF("Security failed: error=%d\r\n",
DBG_PRINTF("Security failed: error=%d\r\n",
p_evt->params.conn_sec_failed.error);
// Auto-retry if key missing
if (p_evt->params.conn_sec_failed.error == PM_CONN_SEC_ERROR_PIN_OR_KEY_MISSING) {
// Key missing: 재페어링 시도, 실패 시 disconnect로 폴백
err_code = pm_conn_secure(p_evt->conn_handle, true);
if (err_code != NRF_ERROR_INVALID_STATE) {
if (err_code != NRF_ERROR_INVALID_STATE &&
err_code != NRF_ERROR_BUSY &&
err_code != BLE_ERROR_INVALID_CONN_HANDLE) {
APP_ERROR_CHECK(err_code);
}
if (err_code != NRF_SUCCESS) {
// 재페어링 불가 → disconnect
pm_handler_disconnect_on_sec_failure(p_evt);
}
} else {
// 기타 보안 실패 → disconnect
pm_handler_disconnect_on_sec_failure(p_evt);
}
break;