disallow using toSpan() and toView() when storage does not implement data()
since overloading is used, stop building by simply not writing any function
otherwise, it is finicky w/ compiler support and / or selected -std=...
also fixes duplicated emplace_back that *sometimes* breaks single-source
build w/ older toolchains since it would reference the same section twice
> xtensa-lx106-elf/include/c++/4.8.2/bits/vector.tcc:405:31: error: __c causes a section type conflict with __c
> _M_check_len(size_type(1), __EXCSTR("vector::_M_emplace_back_aux"));
(EXCSTR is specific to esp-quick-toolchain, forcing exc text into flash strings instead of using raw literals)
reduce the number of times one byte read()s are used
since espXX implementation deals with memory blob most of the time,
just return the data pointer to the buffer position and work w/ that
internal rules for obj construction relaxed, fix implicit operator= deletion
by using pointers instead of references. allow more default output objs
prefer that reader / writer live only for the duration of the function
and are shared explicitly only when it is necessary
should not be kept indefinitely, since sources may've been changed already
ci cache dir is expected to only survive for the current build session,
prefer similar behaviour for local build tests
solves dependabot noise, where unused packages get irrelevant issue triggers
pre 4.x.x vite, pre 6.x.x vitest. html-validate glob dependency also bump'ed
- 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