45#if defined(__ZEPHYR__)
47#include <zephyr/kernel.h>
49static inline void *woz_malloc(
size_t size)
51 return k_malloc(size);
53static inline void *woz_calloc(
size_t n,
size_t size)
55 return k_calloc(n, size);
57static inline void woz_free(
void *ptr)
61static inline int64_t woz_uptime_us(
void)
63 return (int64_t)k_ticks_to_us_floor64(k_uptime_ticks());
65static inline int64_t woz_uptime_ms(
void)
67 return k_uptime_get();
69static inline void woz_sleep_ms(int32_t ms)
73static inline void woz_sleep_us(int64_t us)
75 k_usleep((int32_t)us);
77static inline uint32_t woz_cycle_get_32(
void)
79 return k_cycle_get_32();
81typedef struct k_mutex woz_mutex_t;
82static inline void woz_mutex_init(woz_mutex_t *m)
86static inline void woz_mutex_lock(woz_mutex_t *m)
88 k_mutex_lock(m, K_FOREVER);
90static inline void woz_mutex_unlock(woz_mutex_t *m)
95#elif defined(ESP_PLATFORM)
97#include "freertos/FreeRTOS.h"
98#include "freertos/task.h"
99#include "freertos/semphr.h"
103#include "esp_rom_sys.h"
104#include "esp_timer.h"
106static inline void *woz_malloc(
size_t size)
110static inline void *woz_calloc(
size_t n,
size_t size)
112 return calloc(n, size);
114static inline void woz_free(
void *ptr)
118static inline int64_t woz_uptime_us(
void)
120 return esp_timer_get_time();
122static inline int64_t woz_uptime_ms(
void)
124 return esp_timer_get_time() / 1000;
126static inline void woz_sleep_ms(int32_t ms)
129 vTaskDelay(pdMS_TO_TICKS(ms));
132static inline void woz_sleep_us(int64_t us)
134 esp_rom_delay_us((uint32_t)us);
136static inline uint32_t woz_cycle_get_32(
void)
138 return esp_cpu_get_cycle_count();
141 StaticSemaphore_t buf;
144static inline void woz_mutex_init(woz_mutex_t *m)
146 m->h = xSemaphoreCreateMutexStatic(&m->buf);
148static inline void woz_mutex_lock(woz_mutex_t *m)
150 xSemaphoreTake(m->h, portMAX_DELAY);
152static inline void woz_mutex_unlock(woz_mutex_t *m)
154 xSemaphoreGive(m->h);
157#elif defined(WOZ_PORT_HOST)
167static inline void *woz_malloc(
size_t size)
177static inline void *woz_calloc(
size_t n,
size_t size)
179 return calloc(n, size);
185static inline void woz_free(
void *ptr)
193static inline int64_t woz_uptime_us(
void)
197 clock_gettime(CLOCK_MONOTONIC, &ts);
198 return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
204static inline int64_t woz_uptime_ms(
void)
206 return woz_uptime_us() / 1000;
212static inline void woz_sleep_ms(int32_t ms)
220static inline void woz_sleep_us(int64_t us)
228static inline uint32_t woz_cycle_get_32(
void)
230 return (uint32_t)woz_uptime_us();
235typedef int woz_mutex_t;
240static inline void woz_mutex_init(woz_mutex_t *m)
248static inline void woz_mutex_lock(woz_mutex_t *m)
256static inline void woz_mutex_unlock(woz_mutex_t *m)
262#error "woz_port.h: no platform backend. Define WOZ_PORT_HOST, or build under Zephyr/ESP-IDF."