양산 모드인 경우 부팅 시 본딩 유지
- bond_data_delete 플래시 기본값 1→0 으로 변경 - advertising_start(erase)에서 플래시 플래그까지 클리어하여 1회성 삭제 요청이 영구 상태로 남지 않도록 수정 - 전원 버튼으로 부팅되는 구조상 BSP startup event가 항상 CLEAR_BONDING_DATA로 해석되던 문제를 무력화(추후 전원 버튼 BSP -> GPIO 직접 제어로 교체 예정)
This commit is contained in:
@@ -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);
|
||||
|
||||
m_reset_status = 1;
|
||||
bond_data_delete = 1;
|
||||
bond_data_delete = 0;
|
||||
|
||||
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)
|
||||
{
|
||||
DBG_PRINTF("[BOND] Delete requested (count_before=%lu)\r\n",
|
||||
(unsigned long)pm_peer_count());
|
||||
|
||||
/* 본딩 삭제 요청 플래그를 플래시에서도 클리어 → 다음 부팅 시 재삭제 방지 */
|
||||
bond_data_delete = false;
|
||||
m_config.bond_data_delete = 0;
|
||||
config_save();
|
||||
|
||||
delete_bonds(); /* 삭제 완료 후 pm_evt_handler에서 광고 시작 */
|
||||
}
|
||||
else
|
||||
@@ -940,7 +947,8 @@ static void pm_evt_handler(pm_evt_t const * p_evt)
|
||||
|
||||
/* 모든 본딩 삭제 완료 → 활성 연결이 없을 때만 광고 재시작 */
|
||||
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) {
|
||||
advertising_start(false);
|
||||
}
|
||||
@@ -955,6 +963,15 @@ static void pm_evt_handler(pm_evt_t const * p_evt)
|
||||
if (return_code == NRF_SUCCESS)
|
||||
{
|
||||
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; /* 본딩 완료 상태 */
|
||||
}
|
||||
@@ -1247,7 +1264,12 @@ static void buttons_leds_init(bool * p_erase_bonds)
|
||||
err_code = bsp_btn_ble_init(NULL, &startup_event);
|
||||
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)
|
||||
@@ -1780,6 +1802,22 @@ int main(void)
|
||||
conn_params_init();
|
||||
#if FEATURE_SECURE_CONNECTION
|
||||
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
|
||||
DBG_PRINTF(" gap/gatt/svc/adv/conn/sec OK\r\n");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user