DFU 진행 중 LED 변경

- 이미지 업로드 중 초록/주황 LED 0.5초 교대 점멸
This commit is contained in:
2026-08-03 14:47:12 +09:00
parent b54c9d48ce
commit fd79faa39d
3 changed files with 34 additions and 19 deletions
+8 -2
View File
@@ -173,14 +173,20 @@ static enum mgmt_cb_return dfu_status_cb(uint32_t event, enum mgmt_cb_return pre
case MGMT_EVT_OP_IMG_MGMT_DFU_STARTED: case MGMT_EVT_OP_IMG_MGMT_DFU_STARTED:
case MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK: case MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK:
case MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK_WRITE_COMPLETE: case MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK_WRITE_COMPLETE:
if (!dfu_led_active)
{
dfu_led_active = true; dfu_led_active = true;
led_ble_solid(); led_dfu_progress();
}
k_work_reschedule(&dfu_watchdog_work, K_SECONDS(DFU_STALL_TIMEOUT_SEC)); k_work_reschedule(&dfu_watchdog_work, K_SECONDS(DFU_STALL_TIMEOUT_SEC));
break; break;
case MGMT_EVT_OP_IMG_MGMT_DFU_PENDING: case MGMT_EVT_OP_IMG_MGMT_DFU_PENDING:
if (!dfu_led_active)
{
dfu_led_active = true; dfu_led_active = true;
led_ble_solid(); led_dfu_progress();
}
k_work_cancel_delayable(&dfu_watchdog_work); k_work_cancel_delayable(&dfu_watchdog_work);
#if NRF_POWER_HAS_GPREGRET #if NRF_POWER_HAS_GPREGRET
+22 -15
View File
@@ -33,21 +33,23 @@ static const struct gpio_dt_spec function_led = GPIO_DT_SPEC_GET(FUNCTION_LED_NO
typedef struct { typedef struct {
uint32_t on_ms; uint32_t on_ms;
uint32_t off_ms; uint32_t off_ms;
uint8_t color; uint8_t on_color;
uint8_t off_color;
bool repeat; bool repeat;
} led_pattern_t; } led_pattern_t;
static const led_pattern_t m_patterns[LED_STATE_COUNT] = { static const led_pattern_t m_patterns[LED_STATE_COUNT] = {
[LED_STATE_OFF] = { 0, 0, COLOR_NONE, false }, [LED_STATE_OFF] = { 0, 0, COLOR_NONE, COLOR_NONE, false },
[LED_STATE_POWER_ON] = { 2000, 0, COLOR_GREEN, false }, [LED_STATE_POWER_ON] = { 2000, 0, COLOR_GREEN, COLOR_NONE, false },
[LED_STATE_POWER_OFF] = { 2000, 0, COLOR_GREEN, false }, [LED_STATE_POWER_OFF] = { 2000, 0, COLOR_GREEN, COLOR_NONE, false },
[LED_STATE_ADVERTISING] = { 500, 500, COLOR_GREEN, true }, [LED_STATE_ADVERTISING] = { 500, 500, COLOR_GREEN, COLOR_NONE, true },
[LED_STATE_DETACH_WARNING] = { 1000, 3000, COLOR_GREEN, true }, [LED_STATE_DETACH_WARNING] = { 1000, 3000, COLOR_GREEN, COLOR_NONE, true },
[LED_STATE_ALIGN_SEARCHING] = { 1000, 1000, COLOR_ORANGE, true }, [LED_STATE_ALIGN_SEARCHING] = { 1000, 1000, COLOR_ORANGE, COLOR_NONE, true },
[LED_STATE_ALIGN_COMPLETE] = { 0, 0, COLOR_GREEN, false }, [LED_STATE_ALIGN_COMPLETE] = { 0, 0, COLOR_GREEN, COLOR_NONE, false },
[LED_STATE_ERROR] = { 0, 0, COLOR_ORANGE, true }, [LED_STATE_ERROR] = { 0, 0, COLOR_ORANGE, COLOR_NONE, true },
[LED_STATE_BOND_DELETE] = { 1000, 0, COLOR_ORANGE, false }, [LED_STATE_BOND_DELETE] = { 2000, 0, COLOR_ORANGE, COLOR_NONE, false },
[LED_STATE_BOND_DELETE_PENDING] = { 500, 500, COLOR_ORANGE, true }, [LED_STATE_BOND_DELETE_PENDING] = { 500, 500, COLOR_ORANGE, COLOR_NONE, true },
[LED_STATE_DFU_PROGRESS] = { 500, 500, COLOR_GREEN, COLOR_ORANGE, true },
}; };
/* Module variables */ /* Module variables */
@@ -141,8 +143,8 @@ static void led_timer_handler(struct k_timer *timer)
if (m_phase_on) if (m_phase_on)
{ {
// ON -> OFF transition // ON -> OFF/alternate transition
led_all_off(); led_color_on(p->off_color);
m_phase_on = false; m_phase_on = false;
if (p->off_ms > 0) if (p->off_ms > 0)
@@ -163,7 +165,7 @@ static void led_timer_handler(struct k_timer *timer)
// OFF -> ON transition // OFF -> ON transition
if (p->repeat) if (p->repeat)
{ {
led_color_on(p->color); led_color_on(p->on_color);
m_phase_on = true; m_phase_on = true;
timer_start_ms(p->on_ms); timer_start_ms(p->on_ms);
} }
@@ -202,7 +204,7 @@ void led_set_state(led_state_t state)
error_pattern_start(); error_pattern_start();
break; break;
default: default:
led_color_on(p->color); led_color_on(p->on_color);
m_phase_on = true; m_phase_on = true;
if (p->on_ms > 0) if (p->on_ms > 0)
@@ -226,3 +228,8 @@ void led_ble_solid(void)
led_ble_on(); led_ble_on();
m_current_state = LED_STATE_OFF; // no pattern running m_current_state = LED_STATE_OFF; // no pattern running
} }
void led_dfu_progress(void)
{
led_set_state(LED_STATE_DFU_PROGRESS);
}
+2
View File
@@ -25,6 +25,7 @@ typedef enum
LED_STATE_ERROR, // 7: Orange 3Hz x3 / 1s off LED_STATE_ERROR, // 7: Orange 3Hz x3 / 1s off
LED_STATE_BOND_DELETE, // Bond Delete: Orange on LED_STATE_BOND_DELETE, // Bond Delete: Orange on
LED_STATE_BOND_DELETE_PENDING, // Bond Delete Pending: Orange blink 500ms/500ms LED_STATE_BOND_DELETE_PENDING, // Bond Delete Pending: Orange blink 500ms/500ms
LED_STATE_DFU_PROGRESS, // DFU Progress: Green/Orange alternate 500ms/500ms
LED_STATE_COUNT LED_STATE_COUNT
} led_state_t; } led_state_t;
@@ -32,5 +33,6 @@ void led_init(void);
void led_set_state(led_state_t state); void led_set_state(led_state_t state);
led_state_t led_get_state(void); led_state_t led_get_state(void);
void led_ble_solid(void); void led_ble_solid(void);
void led_dfu_progress(void);
#endif /* LED_CONTROL_H__ */ #endif /* LED_CONTROL_H__ */