961 Commits
Author SHA1 Message Date
peri4 b69529a339 PIThread - add pthread_cleanup_push/pop in case of terminate(), fix MacOS code 2026-11-08 11:55:30 +03:00
peri4 9255e7528c PIThread: macos fixes
doc
2026-11-08 10:47:50 +03:00
peri4 4c8c4ef5c3 PIObject::Deleter refactoring:
- more readable code
 - detect PIThread and PIIODevice
 - try to gracefully stop thread or IODevice, wait with 10_ms and cycle object back to deletion queue if more needed
 - on program shutdown also try to wait for thread or device actually stop, but with smaller timeout
 - print which thread or IODevice hangs (can`t stop in timeout)

PIThread fix deadlock on join when thread in _startThread

PIProcess::optimizeMemory fix
2026-11-08 02:03:49 +03:00
peri4 8a60665c71 hide __PIThreadCollection API
fix PIThread for Windows
2026-11-07 20:51:40 +03:00
peri4 8749e86e97 PIThread fix segfault on delete when thread still starting
add PIProcess::optimizeMemory()
2026-11-07 14:42:35 +03:00
peri4 8e979c51b5 PIObject::Deleter now wait threads
PIThread::runOnce refactor
2026-11-06 23:59:35 +03:00
peri4 823a94d7d9 pithread fixes 2026-11-06 23:09:13 +03:00
peri4 c72ff20592 pithread fixes 2026-11-06 22:33:57 +03:00
peri4 6185320d8c pithread fix 2026-11-06 22:07:26 +03:00
peri4 b3d5ef5856 version 6.3.0
PIThread refactoring:
 - much more clear platform implementations
 - single status instead of flags zoo
 - more stability, using join instead of leaving detached
2026-11-06 18:24:27 +03:00
peri4 f1028bf98a version 6.2.0
breaking changes in FFT
fix calcHilbert
2026-10-19 12:32:05 +03:00
peri4 6f5a3f988b last PocketFFT (with POCKETFFT_NO_EXCEPTIONS) 2026-10-18 22:23:57 +03:00
peri4 06fffeb976 fix small mistakes
PIFFTW now save all 3 plans, with fast flag
PIFFTBase::calcHibert now normalized
add -fexception for pifft.cpp
2026-10-18 20:31:21 +03:00
peri4 aa40c02b18 refactor PIFFTW 2026-10-18 16:41:42 +03:00
peri4 aa710956f1 add PIFFTBase as interface, storage and base functionality
change PIFFT<T> from alglib to PocketFFT
2026-10-18 00:21:27 +03:00
peri4 750ef910de thread-save PIFile::openTemporary() for Windows 2026-10-18 00:19:56 +03:00
peri4 a21a5b4fbc .clang-format
PIEthernet::stopThreadedListen now close device, so repeated listen() works
2026-09-22 20:37:37 +03:00
peri4 04a588eb45 version 6.0.0
change CMAKE_CXX_STANDARD to 17
add PIByteArray(PIMemoryBlock)
PIJSON print functions now correctly handle top-level node, print name only for non-top-level
2026-09-15 10:53:21 +03:00
peri4 b745d5d867 add 418 code (1 april joke) 2026-09-11 20:17:33 +03:00
peri4 8e41461c08 version 6.0.0_beta
PIThread:
- remove old  V singleton V, migrate to modern STATIC_INITIALIZER and common singleton
- add PowerPolicy - now implemented only for Windows, if SetThreadInformation available, then use, else try to use SetThreadIdealProcessor. Mixed cores not supported for SetThreadIdealProcessor case.

PIThreadPoolLoop: add setPriority() and setPowerPolicy()
2026-09-08 15:40:44 +03:00
peri4 1b66ff527f PIInit - remove old V singleton V shit, migrate to modern STATIC_INITIALIZER, fix Windows locale
all PIP_HAS_*-derivated headers - #ifdef after basic includes
2026-09-06 21:42:26 +03:00
peri4 05ae5411f3 windows version pretty 2026-09-06 17:22:39 +03:00
peri4 3da94abb2a PIInit refactoring, iteration 2
add to PISystemInfo processorsCount<P|E> fields, now counts only for Windows
Introspection public API works without PIP_HAS_THREADS
2026-09-06 10:41:53 +03:00
peri4 7051e138e9 PIInit refactoring, first iteration 2026-09-06 09:09:45 +03:00
peri4 4df907ef10 CMake - add all flags to pip_defs.h
Introspection - revert *_p files, because they are external API for introspection, not internal
2026-09-05 23:09:38 +03:00
andrey 0572e38325 fix: register std::function<void()> typename so state machine compiles in NO-RTTI debug builds 2026-08-31 22:07:40 +03:00
andrey fa7ff781fe refactor: use targeted includes (pibase_macros.h, piliterals_string.h) and guard <string> by PIP_HAS_RTTI 2026-08-31 19:12:38 +03:00
andrey b6b7a27dcc cmake: make PIP_HAS_DYNLIB depend on PIP_HAS_FILESYSTEM, drop redundant guards in piplugin 2026-08-31 19:02:48 +03:00
andrey 2f840c74e5 refactor: remove unused PIBinaryStream operators for PIMQTT message types
The operator<< / operator>> templates for MessageConst / MessageMutable
added in 4d8b7430 have no users in the tree (libs, tests, utils, main).
Drop them along with the pibinarystream.h include they required; the
binary-stream fallback static_assert in pibinarystream.h already gives a
clear compile error if external code ever streams an MQTT message.
2026-08-31 18:56:29 +03:00
andrey d16f4bdaf7 feat: decouple PISerial from PIP_HAS_THREADS, gate termios/stty code by PIP_HAS_TTY
- CMake: drop PIP_HAS_SERIAL -> PIP_HAS_THREADS dependency and the forced
  PIP_HAS_SERIAL=OFF for PICO_BOARD, so serial can be built on Pico
- piserial.cpp: guard termios/stty code (tcgetattr/tcsetattr/tcflush/tcdrain,
  TIOCSBRK/TIOCCBRK, TIOCMBIS/TIOCMBIC/TIOCMGET, termios members, sys/ioctl.h
  and termios.h includes) with PIP_HAS_TTY; O_NOCTTY replaced by
  PISERIAL_NOCTTY (0 on no-TTY targets)
- add missing #ifndef fallbacks for B110..B115200 used by convertSpeed()
  when termios.h is absent
- guard thread-only PIIODevice API calls (isThreadedRead/stopThreadedRead)
  with PIP_HAS_THREADS in closeDevice/readDevice
- gate the availableDevicesInfo() test loop with PIP_HAS_FILESYSTEM||WINDOWS
  (device enumeration is a filesystem feature)
- AGENTS.md: note that clang-format-18 is applied automatically on file edits
2026-08-31 18:27:09 +03:00
andrey 8e9ba0298e fix: guard RTTI/threads/filesystem dependent code for arbitrary flag combinations 2026-08-31 17:10:38 +03:00
andrey 14355ede0f Merge remote-tracking branch 'origin/master' into pico_sdk
# Conflicts:
#	libs/main/io_devices/pidir.cpp
#	libs/main/io_devices/pifile.cpp
#	libs/main/thread/pithread.cpp
2026-08-31 13:24:55 +03:00
andrey 5209dd5fd4 use KiB literals for default packet sizes 2026-08-31 13:01:37 +03:00
andrey 446eea404f support building with musl libc (Alpine Linux)
- use LFS64 file/stat APIs only on glibc/Windows (absent in musl)
- use plain sched_priority outside glibc
- do not declare pow10(double) where the system provides C23 pow10() (musl)
- ICU is off by default: modern ICU (>= 75) needs C++17 for its headers,
  the project is built with C++11; enable explicitly with -DICU=ON
- fix latent crash: PIThread::setThreadName() read the thread handle from
  inside the new thread; the handle is not guaranteed to be visible before
  start (musl publishes it later), rename the calling thread via
  pthread_self() instead
2026-08-29 22:04:46 +00:00
andrey efede9e6bc small fix 2026-08-28 21:22:27 +03:00
andrey 4115d79e88 Merge branch 'master' into pico_sdk 2026-08-28 21:12:53 +03:00
andrey 37dbacc094 fix 2026-08-27 15:16:16 +03:00
andrey 74390a9678 fix: restore clang-format off guard and platform include order in piethernet.cpp 2026-08-27 12:29:35 +03:00
peri4 59c7e99e50 add PIIODevice::shutdown() 2026-08-26 11:38:30 +03:00
andrey c2e6a9927c refactor: merge adjacent same-condition preprocessor blocks
Merge consecutive #ifdef PIP_HAS_FILESYSTEM / PIP_INTROSPECTION / PIP_CAN
blocks that had no code between them into a single guarded block.
2026-08-25 17:21:01 +03:00
andrey 331ef49991 refactor: simplify redundant PIP_HAS_* preprocessor guards
- drop INTROSPECTION conjunctions (CMake dep table already forces THREADS+SOCKET)
- remove whole-file guards in client_server/process tests (CMake only compiles them when flags are ON)
- normalize single-flag '#if defined(PIP_HAS_X)' to '#ifdef PIP_HAS_X'
2026-08-25 16:57:20 +03:00
andrey 69b22bf95a feat: complete PIP_HAS_* feature guards in code and auto-generate flag summary
Guard PIConnection, thread primitives, PICodeParser and other feature
code behind PIP_HAS_THREADS/PIP_HAS_FILESYSTEM. In CMake generate the
feature flags summary from the single PIP_HAS_FLAGS list (used by the
add_definitions loop as well), default ICU to OFF and make introspection
also require PIP_HAS_SOCKET. Build system/thread test suites only when
the corresponding feature flags are enabled.
2026-08-25 11:14:25 +03:00
andrey 2605446573 refactor: rename __PIP_TYPENAME_DECLARE to PIP_REGISTER_TYPENAME, add PIP_DECLARE_TYPENAME macro
- Rename __PIP_TYPENAME_DECLARE to PIP_REGISTER_TYPENAME across all headers
- Add PIP_DECLARE_TYPENAME(name) macro for in-class type name declaration
- Replace all static const char * __pip_typename__() member functions with PIP_DECLARE_TYPENAME
2026-08-24 19:31:41 +03:00
andrey c1b8e97311 Merge branch 'master' into pico_sdk 2026-08-23 17:19:34 +03:00
andrey d323ebae88 fix: register type names inside feature guards and shrink embedded I/O buffers
- move __PIP_TYPENAME_DECLARE() calls inside PIP_HAS_* guards so -fno-rtti
  builds compile with arbitrary reduced flag combinations
- guard PISerial declaration by PIP_HAS_SERIAL like other feature-gated classes
- reduce threaded read buffers to 1 KiB on embedded targets (PIIODevice,
  PIPacketExtractor, PIEthernet)
2026-08-23 09:25:32 +03:00
andrey 86a1084ec1 feat: enforce no-RTTI type name registration with static_assert 2026-08-23 08:20:51 +03:00
andrey 8fc2be8dd9 fix: complete PIP_HAS_* flag matrix and restore ESP32/FreeRTOS support
- CMake: disable thread/socket-dependent modules (http_client, mqtt_client,
  client_server) and fftw when the required feature flags are off;
  client_server/cloud no longer tied to the crypt option
- host utils gated on filesystem and the modules they need
- Pico keeps the minimal set; generic FreeRTOS (ESP32) keeps filesystem,
  sockets and serial as in master, module set limited to crypt/compress/io_utils
- PICAN, PIBroadcast, PIPackedTCP vanish without socket+threads
- PISerial: restore PISERIAL_NO_PINS (auto-enabled on PIP_EMBEDDED)
- PIFile: FREERTOS uses fopen/stat (no fopen64 in ESP-IDF newlib)
- drop invalid PICout buffer guards, guard PIObject::deleteLater,
  remove (void)destroying hack, fake PIHIDevice non-Linux stub and the
  redundant PICO_SDK guard in code_model_generator
2026-08-22 19:23:22 +03:00
andrey f6075307b6 style: run clang-format over all files 2026-08-22 15:52:58 +03:00
andrey 8828aa3f81 fix: build PIP on Pico and arbitrary flag combinations
- guard console subsystem (PIScreen/PIScreenTile/tiles/PITerminal/
  PIKbdListener) by PIP_HAS_THREADS plus a TTY or Windows console
  (new PIP_HAS_TTY platform macro) - termios is not available on
  bare-metal newlib
- guard cloud subsystem (PICloudBase/Client/Server/TCP) by
  PIP_HAS_SOCKET and PIP_HAS_THREADS
- add PIP_BUILD_CONSOLE/PIP_BUILD_CLOUD to the auto-disable flag
  dependencies in CMake
- PIP_CAN (SocketCAN) is Linux-only, exclude other platforms
- on Pico keep sockets/MQTT off by default: pico-sdk lwip provides
  only a partial POSIX socket layer (no netinet/in.h, poll.h)
- PITranslator: inline no-op definitions when PIP_HAS_FILESYSTEM is
  off so the _tr literal links
- PIIODevice: guard read_func/write_func EVENT_HANDLERs (no-threads)
- piwaitevent_p.cpp: drop unused sys/ioctl.h include (missing on
  arm-none-eabi, broke Pico builds)
2026-08-22 15:49:05 +03:00
andrey 32066e3a8c fix: make PIP buildable for no-threads and no-filesystem flag combinations
Found while verifying -DPIP_HAS_THREADS=OFF / -DPIP_HAS_FILESYSTEM=OFF
smoke builds (pre-existing gaps of the branch):

- piinit.cpp: full implementation now requires PIP_HAS_THREADS as well
  (the PIInit class is declared in piinit.h only with threads; without
  threads PIInit is absent altogether, stub/absent branches unchanged)
- PIWaitEvent: drop the PIP_HAS_THREADS guard - it is a plain
  pipe/select/WaitForMultipleObjects wrapper with no thread usage
  (master had no guard), restores unistd.h include for PICAN etc.
- PIEthernet: guard server_thread_ member, server_func(), threaded
  listen/stop parts and writeThreaded() calls by PIP_HAS_THREADS
- PIPeer: guard class/impl by PIP_HAS_THREADS (uses PIThread/PITimer/
  PIDiagnostics), openDevice() /etc/pip.conf read by PIP_HAS_FILESYSTEM
- PIBinaryLog::restart(): guard threaded-read restart by PIP_HAS_THREADS
- PIIODevice::configure(config_file,...), PIConnection::configureFromConfig,
  PIConfig include resolution: guard path-based bodies by PIP_HAS_FILESYSTEM
- PISerial::availableDevicesInfo(): guard /dev and /proc/tty scan by
  PIP_HAS_FILESYSTEM
- PIHIDevice impl: requires filesystem (sysfs scan) in addition to threads
- PIPluginLoader::pluginsDirectories/findLibrary: guard PIFile/PIDir use
  by PIP_HAS_FILESYSTEM (fallback: empty list / path as-is)
2026-08-22 14:33:34 +03:00