DFU 진행 중 LED 변경
- 이미지 업로드 중 초록/주황 LED 0.5초 교대 점멸
This commit is contained in:
+10
-4
@@ -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_CHUNK:
|
||||
case MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK_WRITE_COMPLETE:
|
||||
dfu_led_active = true;
|
||||
led_ble_solid();
|
||||
if (!dfu_led_active)
|
||||
{
|
||||
dfu_led_active = true;
|
||||
led_dfu_progress();
|
||||
}
|
||||
k_work_reschedule(&dfu_watchdog_work, K_SECONDS(DFU_STALL_TIMEOUT_SEC));
|
||||
break;
|
||||
|
||||
case MGMT_EVT_OP_IMG_MGMT_DFU_PENDING:
|
||||
dfu_led_active = true;
|
||||
led_ble_solid();
|
||||
if (!dfu_led_active)
|
||||
{
|
||||
dfu_led_active = true;
|
||||
led_dfu_progress();
|
||||
}
|
||||
k_work_cancel_delayable(&dfu_watchdog_work);
|
||||
|
||||
#if NRF_POWER_HAS_GPREGRET
|
||||
|
||||
@@ -33,21 +33,23 @@ static const struct gpio_dt_spec function_led = GPIO_DT_SPEC_GET(FUNCTION_LED_NO
|
||||
typedef struct {
|
||||
uint32_t on_ms;
|
||||
uint32_t off_ms;
|
||||
uint8_t color;
|
||||
uint8_t on_color;
|
||||
uint8_t off_color;
|
||||
bool repeat;
|
||||
} led_pattern_t;
|
||||
|
||||
static const led_pattern_t m_patterns[LED_STATE_COUNT] = {
|
||||
[LED_STATE_OFF] = { 0, 0, COLOR_NONE, false },
|
||||
[LED_STATE_POWER_ON] = { 2000, 0, COLOR_GREEN, false },
|
||||
[LED_STATE_POWER_OFF] = { 2000, 0, COLOR_GREEN, false },
|
||||
[LED_STATE_ADVERTISING] = { 500, 500, COLOR_GREEN, true },
|
||||
[LED_STATE_DETACH_WARNING] = { 1000, 3000, COLOR_GREEN, true },
|
||||
[LED_STATE_ALIGN_SEARCHING] = { 1000, 1000, COLOR_ORANGE, true },
|
||||
[LED_STATE_ALIGN_COMPLETE] = { 0, 0, COLOR_GREEN, false },
|
||||
[LED_STATE_ERROR] = { 0, 0, COLOR_ORANGE, true },
|
||||
[LED_STATE_BOND_DELETE] = { 1000, 0, COLOR_ORANGE, false },
|
||||
[LED_STATE_BOND_DELETE_PENDING] = { 500, 500, COLOR_ORANGE, true },
|
||||
[LED_STATE_OFF] = { 0, 0, COLOR_NONE, COLOR_NONE, false },
|
||||
[LED_STATE_POWER_ON] = { 2000, 0, COLOR_GREEN, COLOR_NONE, false },
|
||||
[LED_STATE_POWER_OFF] = { 2000, 0, COLOR_GREEN, COLOR_NONE, false },
|
||||
[LED_STATE_ADVERTISING] = { 500, 500, COLOR_GREEN, COLOR_NONE, true },
|
||||
[LED_STATE_DETACH_WARNING] = { 1000, 3000, COLOR_GREEN, COLOR_NONE, true },
|
||||
[LED_STATE_ALIGN_SEARCHING] = { 1000, 1000, COLOR_ORANGE, COLOR_NONE, true },
|
||||
[LED_STATE_ALIGN_COMPLETE] = { 0, 0, COLOR_GREEN, COLOR_NONE, false },
|
||||
[LED_STATE_ERROR] = { 0, 0, COLOR_ORANGE, COLOR_NONE, true },
|
||||
[LED_STATE_BOND_DELETE] = { 2000, 0, COLOR_ORANGE, COLOR_NONE, false },
|
||||
[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 */
|
||||
@@ -141,8 +143,8 @@ static void led_timer_handler(struct k_timer *timer)
|
||||
|
||||
if (m_phase_on)
|
||||
{
|
||||
// ON -> OFF transition
|
||||
led_all_off();
|
||||
// ON -> OFF/alternate transition
|
||||
led_color_on(p->off_color);
|
||||
m_phase_on = false;
|
||||
|
||||
if (p->off_ms > 0)
|
||||
@@ -163,7 +165,7 @@ static void led_timer_handler(struct k_timer *timer)
|
||||
// OFF -> ON transition
|
||||
if (p->repeat)
|
||||
{
|
||||
led_color_on(p->color);
|
||||
led_color_on(p->on_color);
|
||||
m_phase_on = true;
|
||||
timer_start_ms(p->on_ms);
|
||||
}
|
||||
@@ -202,7 +204,7 @@ void led_set_state(led_state_t state)
|
||||
error_pattern_start();
|
||||
break;
|
||||
default:
|
||||
led_color_on(p->color);
|
||||
led_color_on(p->on_color);
|
||||
m_phase_on = true;
|
||||
|
||||
if (p->on_ms > 0)
|
||||
@@ -226,3 +228,8 @@ void led_ble_solid(void)
|
||||
led_ble_on();
|
||||
m_current_state = LED_STATE_OFF; // no pattern running
|
||||
}
|
||||
|
||||
void led_dfu_progress(void)
|
||||
{
|
||||
led_set_state(LED_STATE_DFU_PROGRESS);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ typedef enum
|
||||
LED_STATE_ERROR, // 7: Orange 3Hz x3 / 1s off
|
||||
LED_STATE_BOND_DELETE, // Bond Delete: Orange on
|
||||
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_t;
|
||||
|
||||
@@ -32,5 +33,6 @@ void led_init(void);
|
||||
void led_set_state(led_state_t state);
|
||||
led_state_t led_get_state(void);
|
||||
void led_ble_solid(void);
|
||||
void led_dfu_progress(void);
|
||||
|
||||
#endif /* LED_CONTROL_H__ */
|
||||
|
||||
Reference in New Issue
Block a user