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
sensor_emon .ipp for energy and kwh & ws objects
system_time .h for clock definitions. delay not implemented (yet)
ignoring energy calc for the current test, since samples are out-of-sync
also ignoring timeout state, as it syncs with the clock time
refactor mqtt root topic & topic handling, add external module for mqtt validation
check whether root topic contains #, error out when it is missing
check whether generic topics or suffixes contain # or +, error out when they are present
special handling for settings topic to pick a single level /+/ as a key and payload as a value
resolve#2617
tests for mqtt topic filtering and validation
certain actions need to happen when
- starting restore()
- switching date within restore()
- stopping restore()
pretty good fit for an object and raii. so, using context struct to handle
sun{rise,set} initialization and per-schedule time match updates
sun{rise,set} event happens on a specific date, make sure it is also checked
fix double action trigger by comparing minutes, not raw timestamp seconds
experimenting with 'invalid state' i.e. when timestamp was not generated
include restore logic in tests, as code now lives in .ipp
separate convesions from the main source to allow test builds
extra unit to verify that both duration plain input and
spec work as intended
also fix wdt triggered when unknown symbols are encountered at the end
of duration string (e.g. 10000y)
solves edge-case when we move our storage nearby a previously erased kv,
causing it to be treated as a key or a value with length 255 (... 0x00 0xff)
also stop set() from erasing data when it is not possible to store it in
the first place
additional test case similar to permutations one, make sure keys don't
disappear while we write to the storage a lot of times and possibly
introduce the two cases above
* globally accessible system timer class; help out with our internal
scheduling by always using strongly typed duration and dynamic
time adjustment for durations longer than system limits
(see `os_timer_t` documentation)
* our own class for scheduled callbacks which are either choosing a
simple function pointer or std function wrapper, depending on the type
passed into the constructor. specifically for scheduled functions,
this allows us to filter globally scheduled functions and push them to
the front of the queue when necessary to ensure certain order of calls
* replace Ticker instances with SystemTimer
* allow types {h, cpp} in unit tests
Resolve the issue with the UnixHostDuino not really being compatible
with the esp8266 Core String (...and the rest of the Core, as well)
Port the CMakeLists.txt from the rpnlib and update it use FetchContent
instead of either manually fetching dependencies or using PIO artifacts
Caching is *expected* to work, but might need slight adjustments