From c8a1050323c89f8e776c1ad5f3689505d7130710 Mon Sep 17 00:00:00 2001 From: Simone Guscetti <simone@px4.io> Date: Tue, 16 Jan 2018 17:54:43 +0100 Subject: [PATCH] libled: allow infinite flashing mode --- msg/led_control.msg | 2 +- src/lib/led/led.cpp | 9 ++++----- src/lib/led/led.h | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/msg/led_control.msg b/msg/led_control.msg index 6189d22c15..1a0bb6f06b 100644 --- a/msg/led_control.msg +++ b/msg/led_control.msg @@ -29,5 +29,5 @@ uint8 led_mask # bitmask which LED(s) to control, set to 0xff for all uint8 color # see COLOR_* uint8 mode # see MODE_* uint8 num_blinks # how many times to blink (number of on-off cycles if mode is one of MODE_BLINK_*) . Set to 0 for infinite - # in MODE_FLASH it is the number of cycles (infinite is not possible) + # in MODE_FLASH it is the number of cycles. Max number of blinks: 122 and max number of flash cycles: 20 uint8 priority # priority: higher priority events will override current lower priority events (see MAX_PRIORITY) diff --git a/src/lib/led/led.cpp b/src/lib/led/led.cpp index 1791e7409d..120a8eb4f9 100644 --- a/src/lib/led/led.cpp +++ b/src/lib/led/led.cpp @@ -140,14 +140,13 @@ int LedController::update(LedControlData &control_data) if ((_states[i].current_blinking_time += blink_delta_t) > current_blink_duration) { _states[i].current_blinking_time -= current_blink_duration; - if (cur_data.blink_times_left == 254) { - // handle toggling for infinite case: toggle between 254 and 255 + if (cur_data.blink_times_left == 246) { + // handle toggling for infinite case: decrease between 255 and 246 + // In order to handle the flash mode infinite case it needs a + // total of 10 steps. cur_data.blink_times_left = 255; ++num_blinking_do_not_change_state; - } else if (cur_data.blink_times_left == 255) { - cur_data.blink_times_left = 254; - } else if (--cur_data.blink_times_left == 0) { cur_data.mode = led_control_s::MODE_DISABLED; _states[i].current_blinking_time = 0; diff --git a/src/lib/led/led.h b/src/lib/led/led.h index 001d421d35..e6cc84482b 100644 --- a/src/lib/led/led.h +++ b/src/lib/led/led.h @@ -158,7 +158,7 @@ private: if (priority[next_priority].blink_times_left == 0) { // handle infinite case - priority[next_priority].blink_times_left = 254; + priority[next_priority].blink_times_left = 246; } -- GitLab