- support sync mode at boot and in timers. boot mode also introduces separate ON & OFF delays specifically for handling sync mode in bulk w/o accessing individual relay settings
- boot sync ID configuration to control which relay drives synchronization behaviour during boot
by default, last relay boot'ed is used for status.
- properly retain hw gpio relay status when rebooting & deal with sync cases. fallback to normal setup when dealing with mixed relay provider configurations. currently, only hw gpio flagged as 'retain'ing
- relays now keep all status transition timers in a shared pool. mqtt disconnect, pulse & on / off delay cannot overlap
- some api calls try to avoid relays that were not boot'ed yet processing must happen at least once for it to begin working. internal api tracks 'first time' relay status is set. whenever any other call happens **internally**, it may override the initial one with something else
- various clean-ups in public & private api reuse. for one, internals now prefer internal (sic) funcs to at least optimize out id < .size() check when it is already known / parsed that id < .size()
- correctly parse delays when 'repeats' is missing and avoid doing pointer math on nullptr
empty pattern allowed in all cases, not just 0,0
- parse should signal about invalid inputs
- parse & serialize updated to support empty repeats
- [Rr] in addition to 0,0 as pattern repeat marker
also fixes led.h vs. led_internal.h usage in parser code
w/ another -fsanitize=address hint, use separate objects instead of
relying on pattern itself holding everything api *may* need
combine pattern and preset patterns currently separate timers
pattern container reworked to allow small-size optimization
introduce a special '0,0' marker, repeating the whole pattern (instead
of just one delay at the end)
since pattern is part of the led struct proper, display it in settings query
update tests & reuse time parsing routines from utils
also noticed by -fsanitize=address
> auto split = StatefulSplitView{input, " "};
> ...
> split = StatefulSplitViewinput, ","};
ctor & assignment should properly re-construct iterator to avoid referencing
temporaries (especially when ctor & move actually happens and not elided)
per. https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/step implicit default is step="1"
> If not explicitly included, step defaults to 1 for number and range, and 1 unit type (minute, week, month, day) for the date/time input types.
> The value must be a positive number - integer or float — or the special value any, which means no stepping is implied and any value is allowed
> (barring other constraints, such as min and max)
>
> Only values which are a whole number of steps from the step base are valid.
.checkValidity()/.reportValidity() enforce the rule, making these values
impossible to set (besides manually setting the kv through console)
also clean-up any defaults & suspicious use in specific modules
resolve#2651