양산 모드인 경우 부팅 시 본딩 유지
- bond_data_delete 플래시 기본값 1→0 으로 변경 - advertising_start(erase)에서 플래시 플래그까지 클리어하여 1회성 삭제 요청이 영구 상태로 남지 않도록 수정 - 전원 버튼으로 부팅되는 구조상 BSP startup event가 항상 CLEAR_BONDING_DATA로 해석되던 문제를 무력화(추후 전원 버튼 BSP -> GPIO 직접 제어로 교체 예정)
This commit is contained in:
@@ -116,8 +116,8 @@ void fds_default_value_set(void)
|
|||||||
/* Static Passkey */
|
/* Static Passkey */
|
||||||
memcpy(m_config.static_passkey, static_passkey_dflt, 6);
|
memcpy(m_config.static_passkey, static_passkey_dflt, 6);
|
||||||
|
|
||||||
/* Bond data delete */
|
/* Bond data delete — 기본값: 삭제 요청 없음 (공장 초기화 경로에서만 1로 세팅) */
|
||||||
m_config.bond_data_delete = 1;
|
m_config.bond_data_delete = 0;
|
||||||
|
|
||||||
/* Reset status */
|
/* Reset status */
|
||||||
m_config.reset_status = reset_status_dflt;
|
m_config.reset_status = reset_status_dflt;
|
||||||
|
|||||||
@@ -121,7 +121,7 @@
|
|||||||
/*==============================================================================
|
/*==============================================================================
|
||||||
* 빌드 설정
|
* 빌드 설정
|
||||||
*============================================================================*/
|
*============================================================================*/
|
||||||
#define BLE_DEV_MODE 1 /* 1: 개발 모드 (보안 없음), 0: 양산 모드 (패스키 필수) */
|
#define BLE_DEV_MODE 0 /* 1: 개발 모드 (보안 없음), 0: 양산 모드 (패스키 필수) */
|
||||||
|
|
||||||
/*==============================================================================
|
/*==============================================================================
|
||||||
* 하드웨어 핀 정의
|
* 하드웨어 핀 정의
|
||||||
@@ -359,7 +359,7 @@ static void load_default_config(void)
|
|||||||
memcpy(m_static_passkey, DEFAULT_PASSKEY, PASSKEY_LENGTH);
|
memcpy(m_static_passkey, DEFAULT_PASSKEY, PASSKEY_LENGTH);
|
||||||
|
|
||||||
m_reset_status = 1;
|
m_reset_status = 1;
|
||||||
bond_data_delete = 1;
|
bond_data_delete = 0;
|
||||||
|
|
||||||
DBG_PRINTF("[CFG] Default (S/N=%s)\r\n", SERIAL_NO);
|
DBG_PRINTF("[CFG] Default (S/N=%s)\r\n", SERIAL_NO);
|
||||||
}
|
}
|
||||||
@@ -863,7 +863,14 @@ static void advertising_start(bool erase_bonds_flag)
|
|||||||
{
|
{
|
||||||
if (erase_bonds_flag == true)
|
if (erase_bonds_flag == true)
|
||||||
{
|
{
|
||||||
|
DBG_PRINTF("[BOND] Delete requested (count_before=%lu)\r\n",
|
||||||
|
(unsigned long)pm_peer_count());
|
||||||
|
|
||||||
|
/* 본딩 삭제 요청 플래그를 플래시에서도 클리어 → 다음 부팅 시 재삭제 방지 */
|
||||||
bond_data_delete = false;
|
bond_data_delete = false;
|
||||||
|
m_config.bond_data_delete = 0;
|
||||||
|
config_save();
|
||||||
|
|
||||||
delete_bonds(); /* 삭제 완료 후 pm_evt_handler에서 광고 시작 */
|
delete_bonds(); /* 삭제 완료 후 pm_evt_handler에서 광고 시작 */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -940,7 +947,8 @@ static void pm_evt_handler(pm_evt_t const * p_evt)
|
|||||||
|
|
||||||
/* 모든 본딩 삭제 완료 → 활성 연결이 없을 때만 광고 재시작 */
|
/* 모든 본딩 삭제 완료 → 활성 연결이 없을 때만 광고 재시작 */
|
||||||
case PM_EVT_PEERS_DELETE_SUCCEEDED:
|
case PM_EVT_PEERS_DELETE_SUCCEEDED:
|
||||||
DBG_PRINTF("[PM] Bonds erased\r\n");
|
DBG_PRINTF("[BOND] Deleted all (count_after=%lu)\r\n",
|
||||||
|
(unsigned long)pm_peer_count());
|
||||||
if (m_conn_handle == BLE_CONN_HANDLE_INVALID) {
|
if (m_conn_handle == BLE_CONN_HANDLE_INVALID) {
|
||||||
advertising_start(false);
|
advertising_start(false);
|
||||||
}
|
}
|
||||||
@@ -955,6 +963,15 @@ static void pm_evt_handler(pm_evt_t const * p_evt)
|
|||||||
if (return_code == NRF_SUCCESS)
|
if (return_code == NRF_SUCCESS)
|
||||||
{
|
{
|
||||||
memcpy(c_addr, peer_bonding_data.peer_ble_id.id_addr_info.addr, sizeof(c_addr));
|
memcpy(c_addr, peer_bonding_data.peer_ble_id.id_addr_info.addr, sizeof(c_addr));
|
||||||
|
|
||||||
|
/* 새 본딩 생성 시 피어 ID와 주소를 함께 로그로 남김 */
|
||||||
|
if (p_evt->params.peer_data_update_succeeded.data_id == PM_PEER_DATA_ID_BONDING)
|
||||||
|
{
|
||||||
|
DBG_PRINTF("[BOND] Created peer_id=%u addr=%02X:%02X:%02X:%02X:%02X:%02X (count=%lu)\r\n",
|
||||||
|
p_evt->peer_id,
|
||||||
|
c_addr[5], c_addr[4], c_addr[3], c_addr[2], c_addr[1], c_addr[0],
|
||||||
|
(unsigned long)pm_peer_count());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_reset_status = 10; /* 본딩 완료 상태 */
|
m_reset_status = 10; /* 본딩 완료 상태 */
|
||||||
}
|
}
|
||||||
@@ -1247,7 +1264,12 @@ static void buttons_leds_init(bool * p_erase_bonds)
|
|||||||
err_code = bsp_btn_ble_init(NULL, &startup_event);
|
err_code = bsp_btn_ble_init(NULL, &startup_event);
|
||||||
APP_ERROR_CHECK(err_code);
|
APP_ERROR_CHECK(err_code);
|
||||||
|
|
||||||
*p_erase_bonds = (startup_event == BSP_EVENT_CLEAR_BONDING_DATA);
|
/* VesiScan은 전원 버튼을 눌러서 부팅하는 구조이므로, 부팅 순간에는 항상
|
||||||
|
* 전원 버튼이 눌린 상태로 읽힌다. Nordic BSP는 이 상태를
|
||||||
|
* BSP_EVENT_CLEAR_BONDING_DATA로 해석해 본딩을 삭제하려 하므로,
|
||||||
|
* startup event 기반 본딩 삭제 트리거를 무효화한다. */
|
||||||
|
(void)startup_event;
|
||||||
|
*p_erase_bonds = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void log_init(void)
|
static void log_init(void)
|
||||||
@@ -1780,6 +1802,22 @@ int main(void)
|
|||||||
conn_params_init();
|
conn_params_init();
|
||||||
#if FEATURE_SECURE_CONNECTION
|
#if FEATURE_SECURE_CONNECTION
|
||||||
peer_manager_init();
|
peer_manager_init();
|
||||||
|
|
||||||
|
/* 부팅 시점의 본딩 상태 로그 */
|
||||||
|
{
|
||||||
|
uint32_t bond_count = pm_peer_count();
|
||||||
|
DBG_PRINTF("[BOOT] Bond state: count=%lu flag_delete=%d erase_bonds=%d\r\n",
|
||||||
|
(unsigned long)bond_count, bond_data_delete, erase_bonds);
|
||||||
|
if (bond_count > 0)
|
||||||
|
{
|
||||||
|
pm_peer_id_t pid = pm_next_peer_id_get(PM_PEER_ID_INVALID);
|
||||||
|
while (pid != PM_PEER_ID_INVALID)
|
||||||
|
{
|
||||||
|
DBG_PRINTF("[BOOT] Bonded peer id=%u\r\n", pid);
|
||||||
|
pid = pm_next_peer_id_get(pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
DBG_PRINTF(" gap/gatt/svc/adv/conn/sec OK\r\n");
|
DBG_PRINTF(" gap/gatt/svc/adv/conn/sec OK\r\n");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user