BLE connection disconnect(reason)에 따른 Advertising Timeout

- 비정상 연결 해제 시 무제한 광고
- 그 외 10분 광고 후 전원 OFF
This commit is contained in:
2026-06-26 11:00:18 +09:00
parent 147e975cbc
commit 571df7df05
3 changed files with 27 additions and 3 deletions
+20 -2
View File
@@ -276,6 +276,21 @@ static void adv_restart_handler(struct k_work *work)
led_set_state(LED_STATE_ADVERTISING); led_set_state(LED_STATE_ADVERTISING);
} }
static bool ble_disconnect_reason_uses_unlimited_adv(uint8_t reason)
{
switch (reason)
{
case BT_HCI_ERR_CONN_TIMEOUT:
case BT_HCI_ERR_LL_RESP_TIMEOUT:
case BT_HCI_ERR_TERM_DUE_TO_MIC_FAIL:
case BT_HCI_ERR_CONN_FAIL_TO_ESTAB:
return true;
default:
return false;
}
}
static void adv_timeout_handler(struct k_work *work) static void adv_timeout_handler(struct k_work *work)
{ {
ARG_UNUSED(work); ARG_UNUSED(work);
@@ -284,6 +299,7 @@ static void adv_timeout_handler(struct k_work *work)
{ {
DBG_PRINTF("[BLE] Advertising timeout\r\n"); DBG_PRINTF("[BLE] Advertising timeout\r\n");
(void)ble_advertising_stop(); (void)ble_advertising_stop();
device_power_off_reason("ble-advertising-timeout");
} }
} }
@@ -424,8 +440,10 @@ static void disconnected(struct bt_conn *conn, uint8_t reason)
} }
ble_connection_st = false; ble_connection_st = false;
advertising_unlimited = true; advertising_unlimited = ble_disconnect_reason_uses_unlimited_adv(reason);
DBG_CORE("[BLE] Disconnected (reason 0x%02x)\r\n", reason); DBG_CORE("[BLE] Disconnected reason=0x%02x adv=%s\r\n",
reason,
advertising_unlimited ? "unlimited" : "10min");
/* 워크큐에서 advertising 재시작 */ /* 워크큐에서 advertising 재시작 */
k_work_submit(&adv_restart_work); k_work_submit(&adv_restart_work);
+6 -1
View File
@@ -426,7 +426,12 @@ void sleep_mode_enter(void)
void device_power_off(void) void device_power_off(void)
{ {
power_off_schedule("device_power_off", LED_STATE_POWER_OFF); device_power_off_reason("device_power_off");
}
void device_power_off_reason(const char *reason)
{
power_off_schedule(reason, LED_STATE_POWER_OFF);
} }
void device_power_keep_on(void) void device_power_keep_on(void)
+1
View File
@@ -65,6 +65,7 @@ typedef enum
void sleep_mode_enter(void); void sleep_mode_enter(void);
void sleep_mode_enter_reason(const char *reason); void sleep_mode_enter_reason(const char *reason);
void device_power_off(void); void device_power_off(void);
void device_power_off_reason(const char *reason);
void device_power_keep_on(void); void device_power_keep_on(void);
void power_button_suspend(bool suspend); void power_button_suspend(bool suspend);