Add notification system for relay channel state changes

- Introduced a new notification module to handle state change listeners.
- Added functions to register and unregister listeners for relay channel state changes.
- Implemented a queue-based system to manage notifications and listener callbacks.
- Updated core relay channel logic to utilize the new notification system.
- Removed old listener management code from relay channel core.
- Refactored the former listener tests to notify tests and added tests for the notification system, including handling of multiple listeners and queue overflow scenarios.
- Updated CMakeLists.txt to include new source files and headers for the notification module.
- Revised README.md to include warnings about callback execution context and performance considerations.

Refs #1096, #1085 and closes #1097
This commit is contained in:
2025-09-02 15:46:48 +03:00
parent d2b38a5b4e
commit 5e8e5a4cab
13 changed files with 678 additions and 272 deletions

View File

@@ -200,6 +200,9 @@ relay_chn_flip_direction_all();
### 3. Monitor channel state
> [!WARNING]
> Listener callbacks are executed from the context of the notification dispatcher task. To ensure system responsiveness and prevent event loss, callbacks must be lightweight and non-blocking. Avoid any long-running operations or functions that may block, such as `vTaskDelay()` or semaphore takes with long timeouts, inside the callback.
For single mode:
```c