Skip to content

Commit 687b3bc

Browse files
committed
[DM][LED] Update LED blink cycle to heartbeat
Signed-off-by: GuEe-GUI <2991707448@qq.com>
1 parent fd6fd10 commit 687b3bc

File tree

1 file changed

+25
-1
lines changed
  • components/drivers/led

1 file changed

+25
-1
lines changed

components/drivers/led/led.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ struct blink_timer
2121
{
2222
rt_bool_t toggle;
2323
rt_bool_t enabled;
24+
rt_uint32_t count;
2425
struct rt_timer timer;
2526
};
2627

@@ -104,19 +105,42 @@ const static struct rt_device_ops _led_ops =
104105

105106
static void _led_blink_timerout(void *param)
106107
{
108+
rt_tick_t tick;
107109
struct rt_led_device *led = param;
108110
struct blink_timer *btimer = led->sysdata;
109111

110112
if (btimer->toggle)
111113
{
112114
led->ops->set_state(led, RT_LED_S_OFF);
115+
116+
if (btimer->count++ & 1)
117+
{
118+
btimer->count = 0;
119+
tick = rt_tick_from_millisecond(1000);
120+
goto _set_timeout;
121+
}
113122
}
114123
else
115124
{
116125
led->ops->set_state(led, RT_LED_S_ON);
126+
127+
if (!btimer->count)
128+
{
129+
tick = rt_tick_from_millisecond(80);
130+
goto _set_timeout;
131+
}
117132
}
118133

134+
_toggle:
119135
btimer->toggle = !btimer->toggle;
136+
return;
137+
138+
_set_timeout:
139+
rt_timer_stop(&btimer->timer);
140+
rt_timer_control(&btimer->timer, RT_TIMER_CTRL_SET_TIME, &tick);
141+
rt_timer_start(&btimer->timer);
142+
143+
goto _toggle;
120144
}
121145

122146
rt_err_t rt_led_register(struct rt_led_device *led)
@@ -159,7 +183,7 @@ rt_err_t rt_led_register(struct rt_led_device *led)
159183
btimer->toggle = RT_FALSE;
160184
btimer->enabled = RT_FALSE;
161185
rt_timer_init(&btimer->timer, dev_name, _led_blink_timerout, led,
162-
rt_tick_from_millisecond(500), RT_TIMER_FLAG_PERIODIC);
186+
rt_tick_from_millisecond(1000), RT_TIMER_FLAG_PERIODIC);
163187
}
164188

165189
led->parent.type = RT_Device_Class_Char;

0 commit comments

Comments
 (0)