| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include "../ei_classifier_porting.h" |
| #if EI_PORTING_ZEPHYR == 1 |
|
|
| #include <version.h> |
| |
| #if (KERNEL_VERSION_MAJOR > 3) || ((KERNEL_VERSION_MAJOR == 3) && (KERNEL_VERSION_MINOR >= 1)) |
| #include <zephyr/kernel.h> |
| #include <zephyr/sys_clock.h> |
| #include <zephyr/drivers/uart.h> |
| #else |
| #include <zephyr.h> |
| #include <drivers/uart.h> |
| #endif |
| #include <stdio.h> |
| #include <stdlib.h> |
|
|
| extern const struct device *uart; |
|
|
| #define EI_WEAK_FN __attribute__((weak)) |
|
|
| EI_WEAK_FN EI_IMPULSE_ERROR ei_run_impulse_check_canceled() { |
| return EI_IMPULSE_OK; |
| } |
|
|
| EI_WEAK_FN EI_IMPULSE_ERROR ei_sleep(int32_t time_ms) { |
| k_msleep(time_ms); |
| return EI_IMPULSE_OK; |
| } |
|
|
| uint64_t ei_read_timer_ms() { |
| return k_uptime_get(); |
| } |
|
|
| uint64_t ei_read_timer_us() { |
| #if defined(CONFIG_TIMER_HAS_64BIT_CYCLE_COUNTER) |
| uint64_t cycles = k_cycle_get_64(); |
| uint64_t freq = sys_clock_hw_cycles_per_sec(); |
| return(uint64_t)((cycles * 1000000ULL) / freq); |
| #else |
| return k_uptime_get() * 1000; |
| #endif |
| } |
|
|
|
|
| EI_WEAK_FN char ei_getchar() |
| { |
| uint8_t rcv_char = 0; |
| if (uart_fifo_read(uart, &rcv_char, 1) == 1) { |
| return rcv_char; |
| } |
| else { |
| return 0; |
| } |
| } |
|
|
| |
| |
| |
| EI_WEAK_FN void ei_printf(const char *format, ...) { |
| static char print_buf[1024] = { 0 }; |
|
|
| va_list args; |
| va_start(args, format); |
| int r = vsnprintf(print_buf, sizeof(print_buf), format, args); |
| va_end(args); |
|
|
| if(r > 0) { |
| printf("%s", print_buf); |
| } |
| } |
|
|
| EI_WEAK_FN void ei_printf_float(float f) { |
| printf("%f", f); |
| } |
|
|
| #if !defined(CONFIG_EDGE_IMPULSE_HEAP_TYPE) || (CONFIG_EDGE_IMPULSE_HEAP_TYPE == 0) |
|
|
| EI_WEAK_FN void *ei_malloc(size_t size) { |
| return malloc(size); |
| } |
|
|
| EI_WEAK_FN void *ei_calloc(size_t nitems, size_t size) { |
| return calloc(nitems, size); |
| } |
|
|
| EI_WEAK_FN void ei_free(void *ptr) { |
| free(ptr); |
| } |
|
|
| #elif defined(CONFIG_EDGE_IMPULSE_HEAP_TYPE) && (CONFIG_EDGE_IMPULSE_HEAP_TYPE == 1) |
|
|
| #if not defined(CONFIG_HEAP_MEM_POOL_SIZE) || (CONFIG_HEAP_MEM_POOL_SIZE == 0) |
| #error "CONFIG_HEAP_MEM_POOL_SIZE must be set to a non-zero value when using CONFIG_EDGE_IMPULSE_HEAP_TYPE=1" |
| #endif |
|
|
| EI_WEAK_FN void *ei_malloc(size_t size) { |
| return k_malloc(size); |
| } |
|
|
| EI_WEAK_FN void *ei_calloc(size_t nitems, size_t size) { |
| return k_calloc(nitems, size); |
| } |
|
|
| EI_WEAK_FN void ei_free(void *ptr) { |
| k_free(ptr); |
| } |
|
|
| #endif |
|
|
| #if defined(__cplusplus) && EI_C_LINKAGE == 1 |
| extern "C" |
| #endif |
| EI_WEAK_FN void DebugLog(const char* s) { |
| printk("%s", s); |
| } |
|
|
| #endif |