- pistatemachine_base.h checked non-existent macros __GXX_RTTI__/__RTTI__,
so on GCC/Clang desktop builds formatHash() always returned 0 and the
guard signature check in testGuard() never fired (UB on incompatible
signatures). Now the real PIP_HAS_RTTI (pibase_macros.h) is used.
- no-RTTI fallback: each Function<Args...> instantiation takes a unique
hash from a process-wide counter (a per-instantiation counter would
give every signature the same hash on first call).
- __pip_typename__ primary template: replace hard static_assert with a
generic fallback; containers/stream operators instantiate it for
arbitrary T in no-RTTI builds (Pico/arm-none-eabi has no RTTI), so the
assert made any no-RTTI build impossible. Explicit
__PIP_TYPENAME_DECLARE specializations still take precedence.
move toStdFunction() to pibase.h
refactor PIParseHelper, now it much more abstract and useful
fix PIIODevice::createFromFullPath() when whitespaces at start or end are presence
PIStreamPacker add events for start and end packet receive
PIClientServer::ClientBase add virtual methods for start and end packet receive. also one can enable diagnostics with enableDiagnostics() method
PICout now call flush() on each end of output
add PIString::entries(const PIString & str)