49#include "ove_config.h"
61#if defined(__ZIG_CIMPORT__)
65#if __has_include("zig_storage_sizes.h")
66#include "zig_storage_sizes.h"
70#if defined(__ZIG_CIMPORT__) && !defined(OVE_SIZEOF_OVE_THREAD_STORAGE)
71#ifdef CONFIG_OVE_ZERO_HEAP
72#error "Zero-heap mode requires storage sizes. Run cmake with ove_zig.cmake to generate zig_storage_sizes.h"
78typedef struct { uint8_t _opaque; } ove_mutex_storage_t;
79typedef struct { uint8_t _opaque; } ove_sem_storage_t;
80typedef struct { uint8_t _opaque; } ove_event_storage_t;
81typedef struct { uint8_t _opaque; } ove_condvar_storage_t;
82typedef struct { uint8_t _opaque; } ove_thread_storage_t;
83typedef struct { uint8_t _opaque; } ove_queue_storage_t;
84typedef struct { uint8_t _opaque; } ove_timer_storage_t;
85typedef struct { uint8_t _opaque; } ove_eventgroup_storage_t;
86typedef struct { uint8_t _opaque; } ove_workqueue_storage_t;
87typedef struct { uint8_t _opaque; } ove_work_storage_t;
88typedef struct { uint8_t _opaque; } ove_stream_storage_t;
89typedef struct { uint8_t _opaque; } ove_watchdog_storage_t;
90typedef struct { uint8_t _opaque; } ove_file_storage_t;
91typedef struct { uint8_t _opaque; } ove_dir_storage_t;
92#ifdef CONFIG_OVE_INFER
93typedef struct { uint8_t _opaque; } ove_model_storage_t;
96typedef struct { uint8_t _opaque; } ove_socket_storage_t;
97typedef struct { uint8_t _opaque; } ove_netif_storage_t;
99#ifdef CONFIG_OVE_NET_TLS
100typedef struct { uint8_t _opaque; } ove_tls_storage_t;
102#ifdef CONFIG_OVE_NET_HTTP
103typedef struct { uint8_t _opaque; } ove_http_client_storage_t;
105#ifdef CONFIG_OVE_NET_MQTT
106typedef struct { uint8_t _opaque; } ove_mqtt_client_storage_t;
108#ifdef CONFIG_OVE_UART
109typedef struct { uint8_t _opaque; } ove_uart_storage_t;
112typedef struct { uint8_t _opaque; } ove_spi_storage_t;
115typedef struct { uint8_t _opaque; } ove_i2c_storage_t;
118typedef struct { uint8_t _opaque; } ove_i2s_storage_t;
121#elif defined(__ZIG_CIMPORT__) || defined(__BINDGEN__)
137#define OVE_OPAQUE_(name, size, align) \
138 typedef struct { _Alignas(align) uint8_t _opaque[size]; } name
145#ifndef OVE_SIZEOF_OVE_THREAD_STORAGE
146#error "Storage sizes not generated. Rust/Zig zero-heap builds require ove_{rust,zig}.cmake to produce storage sizes."
150OVE_OPAQUE_(ove_mutex_storage_t, OVE_SIZEOF_OVE_MUTEX_STORAGE, OVE_ALIGNOF_OVE_MUTEX_STORAGE);
151OVE_OPAQUE_(ove_sem_storage_t, OVE_SIZEOF_OVE_SEM_STORAGE, OVE_ALIGNOF_OVE_SEM_STORAGE);
152OVE_OPAQUE_(ove_event_storage_t, OVE_SIZEOF_OVE_EVENT_STORAGE, OVE_ALIGNOF_OVE_EVENT_STORAGE);
153OVE_OPAQUE_(ove_condvar_storage_t, OVE_SIZEOF_OVE_CONDVAR_STORAGE, OVE_ALIGNOF_OVE_CONDVAR_STORAGE);
154OVE_OPAQUE_(ove_thread_storage_t, OVE_SIZEOF_OVE_THREAD_STORAGE, OVE_ALIGNOF_OVE_THREAD_STORAGE);
155OVE_OPAQUE_(ove_queue_storage_t, OVE_SIZEOF_OVE_QUEUE_STORAGE, OVE_ALIGNOF_OVE_QUEUE_STORAGE);
156OVE_OPAQUE_(ove_timer_storage_t, OVE_SIZEOF_OVE_TIMER_STORAGE, OVE_ALIGNOF_OVE_TIMER_STORAGE);
157OVE_OPAQUE_(ove_eventgroup_storage_t, OVE_SIZEOF_OVE_EVENTGROUP_STORAGE, OVE_ALIGNOF_OVE_EVENTGROUP_STORAGE);
158OVE_OPAQUE_(ove_workqueue_storage_t, OVE_SIZEOF_OVE_WORKQUEUE_STORAGE, OVE_ALIGNOF_OVE_WORKQUEUE_STORAGE);
159OVE_OPAQUE_(ove_work_storage_t, OVE_SIZEOF_OVE_WORK_STORAGE, OVE_ALIGNOF_OVE_WORK_STORAGE);
160OVE_OPAQUE_(ove_stream_storage_t, OVE_SIZEOF_OVE_STREAM_STORAGE, OVE_ALIGNOF_OVE_STREAM_STORAGE);
161OVE_OPAQUE_(ove_watchdog_storage_t, OVE_SIZEOF_OVE_WATCHDOG_STORAGE, OVE_ALIGNOF_OVE_WATCHDOG_STORAGE);
162OVE_OPAQUE_(ove_file_storage_t, OVE_SIZEOF_OVE_FILE_STORAGE, OVE_ALIGNOF_OVE_FILE_STORAGE);
163OVE_OPAQUE_(ove_dir_storage_t, OVE_SIZEOF_OVE_DIR_STORAGE, OVE_ALIGNOF_OVE_DIR_STORAGE);
164#if defined(CONFIG_OVE_INFER) && defined(OVE_SIZEOF_OVE_MODEL_STORAGE)
165OVE_OPAQUE_(ove_model_storage_t, OVE_SIZEOF_OVE_MODEL_STORAGE, OVE_ALIGNOF_OVE_MODEL_STORAGE);
167#if defined(CONFIG_OVE_NET) && defined(OVE_SIZEOF_OVE_SOCKET_STORAGE)
168OVE_OPAQUE_(ove_socket_storage_t, OVE_SIZEOF_OVE_SOCKET_STORAGE, OVE_ALIGNOF_OVE_SOCKET_STORAGE);
169OVE_OPAQUE_(ove_netif_storage_t, OVE_SIZEOF_OVE_NETIF_STORAGE, OVE_ALIGNOF_OVE_NETIF_STORAGE);
171#if defined(CONFIG_OVE_NET_TLS) && defined(OVE_SIZEOF_OVE_TLS_STORAGE)
172OVE_OPAQUE_(ove_tls_storage_t, OVE_SIZEOF_OVE_TLS_STORAGE, OVE_ALIGNOF_OVE_TLS_STORAGE);
174#if defined(CONFIG_OVE_NET_HTTP) && defined(OVE_SIZEOF_OVE_HTTP_CLIENT_STORAGE)
175OVE_OPAQUE_(ove_http_client_storage_t, OVE_SIZEOF_OVE_HTTP_CLIENT_STORAGE, OVE_ALIGNOF_OVE_HTTP_CLIENT_STORAGE);
177#if defined(CONFIG_OVE_NET_MQTT) && defined(OVE_SIZEOF_OVE_MQTT_CLIENT_STORAGE)
178OVE_OPAQUE_(ove_mqtt_client_storage_t, OVE_SIZEOF_OVE_MQTT_CLIENT_STORAGE, OVE_ALIGNOF_OVE_MQTT_CLIENT_STORAGE);
180#if defined(CONFIG_OVE_UART) && defined(OVE_SIZEOF_OVE_UART_STORAGE)
181OVE_OPAQUE_(ove_uart_storage_t, OVE_SIZEOF_OVE_UART_STORAGE, OVE_ALIGNOF_OVE_UART_STORAGE);
183#if defined(CONFIG_OVE_SPI) && defined(OVE_SIZEOF_OVE_SPI_STORAGE)
184OVE_OPAQUE_(ove_spi_storage_t, OVE_SIZEOF_OVE_SPI_STORAGE, OVE_ALIGNOF_OVE_SPI_STORAGE);
186#if defined(CONFIG_OVE_I2C) && defined(OVE_SIZEOF_OVE_I2C_STORAGE)
187OVE_OPAQUE_(ove_i2c_storage_t, OVE_SIZEOF_OVE_I2C_STORAGE, OVE_ALIGNOF_OVE_I2C_STORAGE);
189#if defined(CONFIG_OVE_I2S) && defined(OVE_SIZEOF_OVE_I2S_STORAGE)
190OVE_OPAQUE_(ove_i2s_storage_t, OVE_SIZEOF_OVE_I2S_STORAGE, OVE_ALIGNOF_OVE_I2S_STORAGE);
196#if defined(CONFIG_OVE_RTOS_FREERTOS)
197#include "ove_storage_freertos.h"
198#elif defined(CONFIG_OVE_RTOS_ZEPHYR)
199#include "ove_storage_zephyr.h"
200#elif defined(CONFIG_OVE_RTOS_NUTTX)
201#include "ove_storage_nuttx.h"
202#elif defined(CONFIG_OVE_RTOS_POSIX)
203#if defined(CONFIG_OVE_BOARD_WASM)
204#include "ove_storage_wasm.h"
206#include "ove_storage_posix.h"
225#if !defined(CONFIG_OVE_ZERO_HEAP)
226#define OVE_HEAP_SYNC 1
227#define OVE_HEAP_THREAD 1
228#define OVE_HEAP_QUEUE 1
229#define OVE_HEAP_TIMER 1
230#define OVE_HEAP_EVENTGROUP 1
231#define OVE_HEAP_WORKQUEUE 1
232#define OVE_HEAP_STREAM 1
233#define OVE_HEAP_WATCHDOG 1
235#define OVE_HEAP_INFER 1
236#define OVE_HEAP_NET 1
237#define OVE_HEAP_NET_TLS 1
238#define OVE_HEAP_NET_HTTP 1
239#define OVE_HEAP_NET_MQTT 1
240#define OVE_HEAP_UART 1
241#define OVE_HEAP_SPI 1
242#define OVE_HEAP_I2C 1
243#define OVE_HEAP_I2S 1
256#ifndef OVE_STATIC_INIT_ASSERT
257#define OVE_STATIC_INIT_ASSERT(cond) assert(cond)
279#define OVE_MUTEX_DEFINE(name) \
280 static ove_mutex_storage_t name
285#define OVE_SEM_DEFINE(name) \
286 static ove_sem_storage_t name
291#define OVE_EVENT_DEFINE(name) \
292 static ove_event_storage_t name
297#define OVE_CONDVAR_DEFINE(name) \
298 static ove_condvar_storage_t name
301#ifndef OVE_THREAD_STACK_DEFINE_
307#define OVE_THREAD_STACK_DEFINE_(name, size) \
308 static uint8_t name[(size)]
313#ifndef OVE_THREAD_STACK_BLOCK_STATIC_
314#define OVE_THREAD_STACK_BLOCK_STATIC_(name, size) \
315 static uint8_t __attribute__((aligned(8))) name[(size)]
321#ifndef OVE_THREAD_STACK_MEMBER_
329#define OVE_THREAD_STACK_MEMBER_(name, size) uint8_t name[size]
338#define OVE_THREAD_DEFINE(name, stack_size_bytes) \
339 static ove_thread_storage_t name; \
340 OVE_THREAD_STACK_DEFINE_(name##_stack, stack_size_bytes)
349#define OVE_QUEUE_DEFINE(name, item_sz, max) \
350 static ove_queue_storage_t name; \
351 static uint8_t name##_buffer[(item_sz) * (max)]
356#define OVE_TIMER_DEFINE(name) \
357 static ove_timer_storage_t name
362#define OVE_EVENTGROUP_DEFINE(name) \
363 static ove_eventgroup_storage_t name
371#define OVE_WORKQUEUE_DEFINE(name, stack_size_bytes) \
372 static ove_workqueue_storage_t name; \
373 static uint8_t name##_stack[stack_size_bytes]
381#define OVE_STREAM_DEFINE(name, buf_size) \
382 static ove_stream_storage_t name; \
383 static uint8_t name##_buffer[(buf_size) + 1]
388#define OVE_WATCHDOG_DEFINE(name) \
389 static ove_watchdog_storage_t name
391#ifdef CONFIG_OVE_INFER
395#define OVE_MODEL_DEFINE(name) \
396 static ove_model_storage_t name
401#define OVE_MODEL_ARENA_DEFINE(name, size) \
402 static uint8_t __attribute__((aligned(16))) name[(size)]
405#ifdef CONFIG_OVE_UART
412#define OVE_UART_DEFINE(name, rx_buf_size) \
413 static ove_uart_storage_t name; \
414 static uint8_t name##_rx_buf[(rx_buf_size)]
421#define OVE_SPI_DEFINE(name) \
422 static ove_spi_storage_t name
429#define OVE_I2C_DEFINE(name) \
430 static ove_i2c_storage_t name
459#define OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
460 __attribute__((used)) \
461 static void __attribute__((constructor)) \
462 _##name##_ctor(void) {
464#define OVE_DEFINE_STATIC_CTOR_END_(name) \
465 OVE_STATIC_INIT_ASSERT(_err == OVE_OK); \
469#ifdef CONFIG_OVE_ZERO_HEAP
477#define OVE_MUTEX_DEFINE_STATIC(name) \
478 static ove_mutex_storage_t _##name##_storage; \
479 static ove_mutex_t name; \
480 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
481 int _err = ove_mutex_init(&name, &_##name##_storage); \
482 OVE_DEFINE_STATIC_CTOR_END_(name)
489#define OVE_RECURSIVE_MUTEX_DEFINE_STATIC(name) \
490 static ove_mutex_storage_t _##name##_storage; \
491 static ove_mutex_t name; \
492 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
493 int _err = ove_recursive_mutex_init(&name, \
494 &_##name##_storage); \
495 OVE_DEFINE_STATIC_CTOR_END_(name)
504#define OVE_SEM_DEFINE_STATIC(name, initial, max) \
505 static ove_sem_storage_t _##name##_storage; \
506 static ove_sem_t name; \
507 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
508 int _err = ove_sem_init(&name, &_##name##_storage, \
510 OVE_DEFINE_STATIC_CTOR_END_(name)
517#define OVE_EVENT_DEFINE_STATIC(name) \
518 static ove_event_storage_t _##name##_storage; \
519 static ove_event_t name; \
520 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
521 int _err = ove_event_init(&name, &_##name##_storage); \
522 OVE_DEFINE_STATIC_CTOR_END_(name)
529#define OVE_CONDVAR_DEFINE_STATIC(name) \
530 static ove_condvar_storage_t _##name##_storage; \
531 static ove_condvar_t name; \
532 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
533 int _err = ove_condvar_init(&name, &_##name##_storage); \
534 OVE_DEFINE_STATIC_CTOR_END_(name)
546#define OVE_THREAD_DEFINE_STATIC(hname, stack_sz, fn, ctx, prio, tname) \
547 static ove_thread_storage_t _##hname##_storage; \
548 OVE_THREAD_STACK_DEFINE_(_##hname##_stack, stack_sz); \
549 static ove_thread_t hname; \
550 OVE_DEFINE_STATIC_CTOR_BEGIN_(hname) \
551 struct ove_thread_desc _desc = { \
555 .priority = (prio), \
556 .stack_size = (stack_sz), \
557 .stack = _##hname##_stack, \
559 int _err = ove_thread_init(&hname, \
560 &_##hname##_storage, &_desc); \
561 OVE_DEFINE_STATIC_CTOR_END_(hname)
570#define OVE_QUEUE_DEFINE_STATIC(name, item_sz, max) \
571 static ove_queue_storage_t _##name##_storage; \
572 static uint8_t _##name##_buf[(item_sz) * (max)]; \
573 static ove_queue_t name; \
574 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
575 int _err = ove_queue_init(&name, &_##name##_storage, \
576 _##name##_buf, (item_sz), (max)); \
577 OVE_DEFINE_STATIC_CTOR_END_(name)
588#define OVE_TIMER_DEFINE_STATIC(name, cb, user_data, period_ms, one_shot) \
589 static ove_timer_storage_t _##name##_storage; \
590 static ove_timer_t name; \
591 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
592 int _err = ove_timer_init(&name, &_##name##_storage, \
593 (cb), (user_data), (period_ms), (one_shot)); \
594 OVE_DEFINE_STATIC_CTOR_END_(name)
601#define OVE_EVENTGROUP_DEFINE_STATIC(name) \
602 static ove_eventgroup_storage_t _##name##_storage; \
603 static ove_eventgroup_t name; \
604 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
605 int _err = ove_eventgroup_init(&name, \
606 &_##name##_storage); \
607 OVE_DEFINE_STATIC_CTOR_END_(name)
617#define OVE_WORKQUEUE_DEFINE_STATIC(name, stack_sz, wq_name, prio) \
618 static ove_workqueue_storage_t _##name##_storage; \
619 static uint8_t _##name##_stack[(stack_sz)]; \
620 static ove_workqueue_t name; \
621 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
622 int _err = ove_workqueue_init(&name, \
623 &_##name##_storage, (wq_name), (prio), \
624 (stack_sz), _##name##_stack); \
625 OVE_DEFINE_STATIC_CTOR_END_(name)
633#define OVE_WORK_DEFINE_STATIC(name, handler) \
634 static ove_work_storage_t _##name##_storage; \
635 static ove_work_t name; \
636 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
637 int _err = ove_work_init_static(&name, \
638 &_##name##_storage, (handler)); \
639 OVE_DEFINE_STATIC_CTOR_END_(name)
648#define OVE_STREAM_DEFINE_STATIC(name, buf_sz, trigger) \
649 static ove_stream_storage_t _##name##_storage; \
650 static uint8_t _##name##_buf[(buf_sz) + 1]; \
651 static ove_stream_t name; \
652 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
653 int _err = ove_stream_init(&name, &_##name##_storage, \
654 _##name##_buf, (buf_sz), (trigger)); \
655 OVE_DEFINE_STATIC_CTOR_END_(name)
663#define OVE_WATCHDOG_DEFINE_STATIC(name, timeout_ms) \
664 static ove_watchdog_storage_t _##name##_storage; \
665 static ove_watchdog_t name; \
666 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
667 int _err = ove_watchdog_init(&name, \
668 &_##name##_storage, (timeout_ms)); \
669 OVE_DEFINE_STATIC_CTOR_END_(name)
671#ifdef CONFIG_OVE_INFER
680#define OVE_MODEL_DEFINE_STATIC(name, model_ptr, model_sz, arena_sz) \
681 static ove_model_storage_t _##name##_storage; \
682 static uint8_t __attribute__((aligned(16))) _##name##_arena[(arena_sz)]; \
683 static ove_model_t name; \
684 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
685 struct ove_model_config _cfg = { \
686 .model_data = (model_ptr), \
687 .model_size = (model_sz), \
688 .arena_size = (arena_sz), \
690 int _err = ove_model_init(&name, \
691 &_##name##_storage, _##name##_arena, &_cfg); \
692 OVE_DEFINE_STATIC_CTOR_END_(name)
703#define OVE_I2C_DEFINE_STATIC(name, inst, spd) \
704 static ove_i2c_storage_t _##name##_storage; \
705 static ove_i2c_t name; \
706 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
707 struct ove_i2c_cfg _cfg = { \
708 .instance = (inst), .speed = (spd), \
710 int _err = ove_i2c_init(&name, \
711 &_##name##_storage, &_cfg); \
712 OVE_DEFINE_STATIC_CTOR_END_(name)
722#define OVE_SPI_DEFINE_STATIC(name, cfg_ptr) \
723 static ove_spi_storage_t _##name##_storage; \
724 static ove_spi_t name; \
725 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
726 int _err = ove_spi_init(&name, \
727 &_##name##_storage, (cfg_ptr)); \
728 OVE_DEFINE_STATIC_CTOR_END_(name)
731#ifdef CONFIG_OVE_UART
739#define OVE_UART_DEFINE_STATIC(name, rx_buf_sz, cfg_ptr) \
740 static ove_uart_storage_t _##name##_storage; \
741 static uint8_t _##name##_rx_buf[(rx_buf_sz)]; \
742 static ove_uart_t name; \
743 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
744 int _err = ove_uart_init(&name, \
745 &_##name##_storage, _##name##_rx_buf, (cfg_ptr)); \
746 OVE_DEFINE_STATIC_CTOR_END_(name)
757#define OVE_MUTEX_DEFINE_STATIC(name) \
758 static ove_mutex_t name; \
759 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
760 int _err = ove_mutex_create(&name); \
761 OVE_DEFINE_STATIC_CTOR_END_(name)
768#define OVE_RECURSIVE_MUTEX_DEFINE_STATIC(name) \
769 static ove_mutex_t name; \
770 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
771 int _err = ove_recursive_mutex_create(&name); \
772 OVE_DEFINE_STATIC_CTOR_END_(name)
781#define OVE_SEM_DEFINE_STATIC(name, initial, max) \
782 static ove_sem_t name; \
783 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
784 int _err = ove_sem_create(&name, (initial), (max)); \
785 OVE_DEFINE_STATIC_CTOR_END_(name)
792#define OVE_EVENT_DEFINE_STATIC(name) \
793 static ove_event_t name; \
794 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
795 int _err = ove_event_create(&name); \
796 OVE_DEFINE_STATIC_CTOR_END_(name)
803#define OVE_CONDVAR_DEFINE_STATIC(name) \
804 static ove_condvar_t name; \
805 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
806 int _err = ove_condvar_create(&name); \
807 OVE_DEFINE_STATIC_CTOR_END_(name)
819#define OVE_THREAD_DEFINE_STATIC(hname, stack_sz, fn, ctx, prio, tname) \
820 static ove_thread_t hname; \
821 OVE_DEFINE_STATIC_CTOR_BEGIN_(hname) \
822 struct ove_thread_desc _desc = { \
826 .priority = (prio), \
827 .stack_size = (stack_sz), \
829 int _err = ove_thread_create_(&hname, &_desc); \
830 OVE_DEFINE_STATIC_CTOR_END_(hname)
839#define OVE_QUEUE_DEFINE_STATIC(name, item_sz, max) \
840 static ove_queue_t name; \
841 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
842 int _err = ove_queue_create(&name, (item_sz), (max)); \
843 OVE_DEFINE_STATIC_CTOR_END_(name)
854#define OVE_TIMER_DEFINE_STATIC(name, cb, user_data, period_ms, one_shot) \
855 static ove_timer_t name; \
856 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
857 int _err = ove_timer_create(&name, \
858 (cb), (user_data), (period_ms), (one_shot)); \
859 OVE_DEFINE_STATIC_CTOR_END_(name)
866#define OVE_EVENTGROUP_DEFINE_STATIC(name) \
867 static ove_eventgroup_t name; \
868 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
869 int _err = ove_eventgroup_create(&name); \
870 OVE_DEFINE_STATIC_CTOR_END_(name)
880#define OVE_WORKQUEUE_DEFINE_STATIC(name, stack_sz, wq_name, prio) \
881 static ove_workqueue_t name; \
882 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
883 int _err = ove_workqueue_create(&name, \
884 (wq_name), (prio), (stack_sz)); \
885 OVE_DEFINE_STATIC_CTOR_END_(name)
893#define OVE_WORK_DEFINE_STATIC(name, handler) \
894 static ove_work_t name; \
895 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
896 int _err = ove_work_init(&name, (handler)); \
897 OVE_DEFINE_STATIC_CTOR_END_(name)
906#define OVE_STREAM_DEFINE_STATIC(name, buf_sz, trigger) \
907 static ove_stream_t name; \
908 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
909 int _err = ove_stream_create(&name, \
910 (buf_sz), (trigger)); \
911 OVE_DEFINE_STATIC_CTOR_END_(name)
919#define OVE_WATCHDOG_DEFINE_STATIC(name, timeout_ms) \
920 static ove_watchdog_t name; \
921 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
922 int _err = ove_watchdog_create(&name, (timeout_ms)); \
923 OVE_DEFINE_STATIC_CTOR_END_(name)
925#ifdef CONFIG_OVE_INFER
934#define OVE_MODEL_DEFINE_STATIC(name, model_ptr, model_sz, arena_sz) \
935 static ove_model_t name; \
936 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
937 struct ove_model_config _cfg = { \
938 .model_data = (model_ptr), \
939 .model_size = (model_sz), \
940 .arena_size = (arena_sz), \
942 int _err = ove_model_create(&name, &_cfg); \
943 OVE_DEFINE_STATIC_CTOR_END_(name)
954#define OVE_I2C_DEFINE_STATIC(name, inst, spd) \
955 static ove_i2c_t name; \
956 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
957 struct ove_i2c_cfg _cfg = { \
958 .instance = (inst), .speed = (spd), \
960 int _err = ove_i2c_create(&name, &_cfg); \
961 OVE_DEFINE_STATIC_CTOR_END_(name)
971#define OVE_SPI_DEFINE_STATIC(name, cfg_ptr) \
972 static ove_spi_t name; \
973 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
974 int _err = ove_spi_create(&name, (cfg_ptr)); \
975 OVE_DEFINE_STATIC_CTOR_END_(name)
978#ifdef CONFIG_OVE_UART
986#define OVE_UART_DEFINE_STATIC(name, rx_buf_sz, cfg_ptr) \
987 static ove_uart_t name; \
988 OVE_DEFINE_STATIC_CTOR_BEGIN_(name) \
990 int _err = ove_uart_create(&name, (cfg_ptr)); \
991 OVE_DEFINE_STATIC_CTOR_END_(name)