Skip to content

File syn_port_stubs.c

File List > port_stubs > syn_port_stubs.c

Go to the documentation of this file

#include "../common/syn_compiler.h"
#include "../common/syn_defs.h"
#include "../util/syn_assert.h"

/* ── Assert handler default ─────────────────────────────────────────────── */

SYN_WEAK SYN_NORETURN void syn_assert_failed(const char *file, int line)
{
    (void)file;
    (void)line;
    /* Default: spin forever. Override to log, blink LED, enter debugger. */
    for (;;) {
    }
}

/* ── GPIO stubs ─────────────────────────────────────────────────────────── */

SYN_WEAK SYN_Status syn_port_gpio_init(SYN_GPIO_Pin pin, SYN_GPIO_Mode mode)
{
    (void)pin;
    (void)mode;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED; /* unreachable */
}

SYN_WEAK SYN_Status syn_port_gpio_deinit(SYN_GPIO_Pin pin)
{
    (void)pin;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_gpio_write(SYN_GPIO_Pin pin, SYN_GPIO_State state)
{
    (void)pin;
    (void)state;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_GPIO_State syn_port_gpio_read(SYN_GPIO_Pin pin)
{
    (void)pin;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_GPIO_LOW;
}

SYN_WEAK SYN_Status syn_port_gpio_toggle(SYN_GPIO_Pin pin)
{
    (void)pin;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

/* ── UART stubs ─────────────────────────────────────────────────────────── */

SYN_WEAK SYN_Status syn_port_uart_init(SYN_UARTInstance instance, uint32_t baudrate)
{
    (void)instance;
    (void)baudrate;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_uart_deinit(SYN_UARTInstance instance)
{
    (void)instance;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_uart_transmit(SYN_UARTInstance instance, const uint8_t *data,
                                           size_t len, uint32_t timeout_ms)
{
    (void)instance;
    (void)data;
    (void)len;
    (void)timeout_ms;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_uart_receive(SYN_UARTInstance instance, uint8_t *data, size_t len,
                                          size_t *received, uint32_t timeout_ms)
{
    (void)instance;
    (void)data;
    (void)len;
    (void)received;
    (void)timeout_ms;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_uart_transmit_byte(SYN_UARTInstance instance, uint8_t byte)
{
    (void)instance;
    (void)byte;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_uart_receive_byte(SYN_UARTInstance instance, uint8_t *byte,
                                               uint32_t timeout_ms)
{
    (void)instance;
    (void)byte;
    (void)timeout_ms;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

/* ── System stubs ───────────────────────────────────────────────────────── */

SYN_WEAK void syn_port_enter_critical(void)
{
    syn_assert_failed(__FILE__, __LINE__);
}

SYN_WEAK void syn_port_exit_critical(void)
{
    syn_assert_failed(__FILE__, __LINE__);
}

SYN_WEAK uint32_t syn_port_get_tick_ms(void)
{
    syn_assert_failed(__FILE__, __LINE__);
    return 0;
}

SYN_WEAK void syn_port_delay_ms(uint32_t ms)
{
    (void)ms;
    syn_assert_failed(__FILE__, __LINE__);
}

SYN_WEAK SYN_NORETURN void syn_port_system_reset(void)
{
    syn_assert_failed(__FILE__, __LINE__);
    for (;;) {
    } /* satisfy noreturn */
}

/* ── SPI stubs ──────────────────────────────────────────────────────────── */

#include "../port/syn_port_spi.h"

SYN_WEAK SYN_Status syn_port_spi_init(const SYN_SPI_Config *cfg)
{
    (void)cfg;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_spi_deinit(uint8_t bus)
{
    (void)bus;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_spi_transfer(uint8_t bus, const uint8_t *tx_buf, uint8_t *rx_buf,
                                          size_t len)
{
    (void)bus;
    (void)tx_buf;
    (void)rx_buf;
    (void)len;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_spi_cs_assert(uint8_t bus, SYN_GPIO_Pin cs_pin)
{
    (void)bus;
    (void)cs_pin;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_spi_cs_deassert(uint8_t bus, SYN_GPIO_Pin cs_pin)
{
    (void)bus;
    (void)cs_pin;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

/* ── I2C stubs ──────────────────────────────────────────────────────────── */

#include "../port/syn_port_i2c.h"

SYN_WEAK SYN_Status syn_port_i2c_init(const SYN_I2C_Config *cfg)
{
    (void)cfg;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_i2c_deinit(uint8_t bus)
{
    (void)bus;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_i2c_write(uint8_t bus, uint8_t addr, const uint8_t *data, size_t len)
{
    (void)bus;
    (void)addr;
    (void)data;
    (void)len;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_i2c_read(uint8_t bus, uint8_t addr, uint8_t *data, size_t len)
{
    (void)bus;
    (void)addr;
    (void)data;
    (void)len;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_i2c_write_read(uint8_t bus, uint8_t addr, const uint8_t *tx_data,
                                            size_t tx_len, uint8_t *rx_data, size_t rx_len)
{
    (void)bus;
    (void)addr;
    (void)tx_data;
    (void)tx_len;
    (void)rx_data;
    (void)rx_len;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

/* ── Flash stubs ────────────────────────────────────────────────────────── */

#include "../port/syn_port_flash.h"

SYN_WEAK SYN_Status syn_port_flash_erase(uint32_t addr)
{
    (void)addr;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_flash_read(uint32_t addr, void *buf, size_t len)
{
    (void)addr;
    (void)buf;
    (void)len;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_flash_write(uint32_t addr, const void *buf, size_t len)
{
    (void)addr;
    (void)buf;
    (void)len;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK uint32_t syn_port_flash_sector_size(uint32_t addr)
{
    (void)addr;
    syn_assert_failed(__FILE__, __LINE__);
    return 0;
}

/* ── ADC stubs ──────────────────────────────────────────────────────────── */

#include "../port/syn_port_adc.h"

SYN_WEAK SYN_Status syn_port_adc_init(uint8_t channel)
{
    (void)channel;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK uint16_t syn_port_adc_read(uint8_t channel)
{
    (void)channel;
    syn_assert_failed(__FILE__, __LINE__);
    return 0;
}

SYN_WEAK uint8_t syn_port_adc_resolution(void)
{
    syn_assert_failed(__FILE__, __LINE__);
    return 0;
}

SYN_WEAK uint16_t syn_port_adc_reference_mv(void)
{
    syn_assert_failed(__FILE__, __LINE__);
    return 0;
}

/* ── PWM stubs ──────────────────────────────────────────────────────────── */

#include "../port/syn_port_pwm.h"

SYN_WEAK SYN_Status syn_port_pwm_init(uint8_t channel, uint32_t freq_hz)
{
    (void)channel;
    (void)freq_hz;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK void syn_port_pwm_set_duty(uint8_t channel, uint8_t duty_pct)
{
    (void)channel;
    (void)duty_pct;
    syn_assert_failed(__FILE__, __LINE__);
}

SYN_WEAK void syn_port_pwm_set_duty_raw(uint8_t channel, uint16_t duty_u16)
{
    (void)channel;
    (void)duty_u16;
    syn_assert_failed(__FILE__, __LINE__);
}

SYN_WEAK void syn_port_pwm_enable(uint8_t channel, bool enable)
{
    (void)channel;
    (void)enable;
    syn_assert_failed(__FILE__, __LINE__);
}

SYN_WEAK void syn_port_pwm_set_freq(uint8_t channel, uint32_t freq_hz)
{
    (void)channel;
    (void)freq_hz;
    syn_assert_failed(__FILE__, __LINE__);
}

/* ── Sleep stub ─────────────────────────────────────────────────────────── */

#include "../system/syn_sleep.h"

SYN_WEAK void syn_port_sleep(SYN_SleepMode mode)
{
    (void)mode;
    /* Default: no-op (busy wait) */
}

SYN_WEAK void syn_port_sleep_until(uint32_t wake_tick_ms)
{
    (void)wake_tick_ms;
    /* Default: fall back to light sleep */
    syn_port_sleep(SYN_SLEEP_LIGHT);
}

/* ── EXTI stubs ─────────────────────────────────────────────────────────── */

#include "../port/syn_port_exti.h"

SYN_WEAK SYN_Status syn_port_exti_configure(SYN_GPIO_Pin pin, SYN_EXTI_Edge edge)
{
    (void)pin;
    (void)edge;
    return SYN_OK;
}

SYN_WEAK void syn_port_exti_enable(SYN_GPIO_Pin pin)
{
    (void)pin;
}

SYN_WEAK void syn_port_exti_disable(SYN_GPIO_Pin pin)
{
    (void)pin;
}

SYN_WEAK void syn_port_exti_clear_pending(SYN_GPIO_Pin pin)
{
    (void)pin;
}

/* ── CAN stubs ──────────────────────────────────────────────────────────── */

#include "../port/syn_port_can.h"

SYN_WEAK bool syn_port_can_init(uint8_t port, uint32_t bitrate)
{
    (void)port;
    (void)bitrate;
    return true;
}

SYN_WEAK bool syn_port_can_send(uint8_t port, uint32_t id, bool extended, const uint8_t *data,
                                uint8_t dlc)
{
    (void)port;
    (void)id;
    (void)extended;
    (void)data;
    (void)dlc;
    return true;
}

SYN_WEAK bool syn_port_can_receive(uint8_t port, uint32_t *id, bool *extended, uint8_t *data,
                                   uint8_t *dlc)
{
    (void)port;
    (void)id;
    (void)extended;
    (void)data;
    (void)dlc;
    return false; /* no frame available */
}

SYN_WEAK void syn_port_can_set_filter(uint8_t port, uint32_t id, uint32_t mask)
{
    (void)port;
    (void)id;
    (void)mask;
}

/* ── DMA stubs ──────────────────────────────────────────────────────────── */

#include "../port/syn_port_dma.h"

#if defined(SYN_USE_DMA) && SYN_USE_DMA

SYN_WEAK SYN_Status syn_port_dma_init(const SYN_DMA_Config *cfg)
{
    (void)cfg;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_dma_start(uint8_t channel, const volatile void *src,
                                       volatile void *dst, size_t count)
{
    (void)channel;
    (void)src;
    (void)dst;
    (void)count;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_dma_stop(uint8_t channel)
{
    (void)channel;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK bool syn_port_dma_busy(uint8_t channel)
{
    (void)channel;
    syn_assert_failed(__FILE__, __LINE__);
    return false;
}

SYN_WEAK size_t syn_port_dma_remaining(uint8_t channel)
{
    (void)channel;
    syn_assert_failed(__FILE__, __LINE__);
    return 0;
}

#endif /* SYN_USE_DMA */

/* ── Async I2C stubs ────────────────────────────────────────────────────── */

#include "../port/syn_port_i2c_async.h"

#if defined(SYN_USE_I2C_ASYNC) && SYN_USE_I2C_ASYNC

SYN_WEAK SYN_Status syn_port_i2c_xfer_async(const SYN_I2C_Xfer *xfer)
{
    (void)xfer;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_i2c_cancel(uint8_t bus)
{
    (void)bus;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

#endif /* SYN_USE_I2C_ASYNC */

/* ── Async SPI stubs ────────────────────────────────────────────────────── */

#include "../port/syn_port_spi_async.h"

#if defined(SYN_USE_SPI_ASYNC) && SYN_USE_SPI_ASYNC

SYN_WEAK SYN_Status syn_port_spi_xfer_async(const SYN_SPI_Xfer *xfer)
{
    (void)xfer;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK SYN_Status syn_port_spi_cancel(uint8_t bus)
{
    (void)bus;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

#endif /* SYN_USE_SPI_ASYNC */

/* ── Multicore stubs ───────────────────────────────────────────────────── */

#include "../common/syn_barrier.h"

#if defined(SYN_USE_MULTICORE) && SYN_USE_MULTICORE

#include "../port/syn_port_spinlock.h"

SYN_WEAK void syn_port_memory_barrier(void)
{
    /* Fallback: compiler barrier only. Safe on single-core, but a real
     * multicore port MUST override this with a hardware fence. */
    SYN_COMPILER_BARRIER();
}

SYN_WEAK void syn_port_spinlock_acquire(uint8_t id)
{
    (void)id;
    syn_assert_failed(__FILE__, __LINE__);
}

SYN_WEAK void syn_port_spinlock_release(uint8_t id)
{
    (void)id;
    syn_assert_failed(__FILE__, __LINE__);
}

SYN_WEAK bool syn_port_spinlock_try_acquire(uint8_t id)
{
    (void)id;
    syn_assert_failed(__FILE__, __LINE__);
    return false;
}

SYN_WEAK uint8_t syn_port_core_id(void)
{
    return 0;
}

SYN_WEAK void syn_port_ipc_notify(void)
{
    /* No-op: consumer core polls at next scheduler tick. */
}

#else  /* !SYN_USE_MULTICORE */

/* Memory barrier stub when multicore is off — never actually called
 * because syn_barrier.h inlines plain volatile access, but some
 * toolchains may still emit a reference. */
SYN_WEAK void syn_port_memory_barrier(void)
{
    SYN_COMPILER_BARRIER();
}
#endif /* SYN_USE_MULTICORE */

/* ── Socket stubs ───────────────────────────────────────────────────────── */

#include "../port/syn_port_socket.h"

SYN_WEAK SYN_Socket syn_port_udp_open(uint16_t port)
{
    (void)port;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_SOCKET_INVALID;
}

SYN_WEAK int syn_port_udp_sendto(SYN_Socket sock, const void *data, size_t len,
                                 const SYN_SockAddr *to)
{
    (void)sock;
    (void)data;
    (void)len;
    (void)to;
    syn_assert_failed(__FILE__, __LINE__);
    return -1;
}

SYN_WEAK int syn_port_udp_recvfrom(SYN_Socket sock, void *buf, size_t max_len, SYN_SockAddr *from,
                                   uint32_t timeout_ms)
{
    (void)sock;
    (void)buf;
    (void)max_len;
    (void)from;
    (void)timeout_ms;
    syn_assert_failed(__FILE__, __LINE__);
    return -1;
}

SYN_WEAK SYN_Status syn_port_udp_join_multicast(SYN_Socket sock, const char *multicast_ip)
{
    (void)sock;
    (void)multicast_ip;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK void syn_port_sock_close(SYN_Socket sock)
{
    (void)sock;
    syn_assert_failed(__FILE__, __LINE__);
}

SYN_WEAK SYN_Socket syn_port_sock_connect(const SYN_SockAddr *addr)
{
    (void)addr;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_SOCKET_INVALID;
}

SYN_WEAK SYN_Socket syn_port_sock_connect_host(const char *host, uint16_t port)
{
    (void)host;
    (void)port;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_SOCKET_INVALID;
}

SYN_WEAK int syn_port_sock_send(SYN_Socket sock, const void *data, size_t len)
{
    (void)sock;
    (void)data;
    (void)len;
    syn_assert_failed(__FILE__, __LINE__);
    return -1;
}

SYN_WEAK int syn_port_sock_send_all(SYN_Socket sock, const void *data, size_t len)
{
    (void)sock;
    (void)data;
    (void)len;
    syn_assert_failed(__FILE__, __LINE__);
    return -1;
}

SYN_WEAK int syn_port_sock_recv(SYN_Socket sock, void *buf, size_t max_len, uint32_t timeout_ms)
{
    (void)sock;
    (void)buf;
    (void)max_len;
    (void)timeout_ms;
    syn_assert_failed(__FILE__, __LINE__);
    return -1;
}

SYN_WEAK SYN_Socket syn_port_sock_listen(uint16_t port, int backlog)
{
    (void)port;
    (void)backlog;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_SOCKET_INVALID;
}

SYN_WEAK SYN_Socket syn_port_sock_accept(SYN_Socket listener, uint32_t timeout_ms)
{
    (void)listener;
    (void)timeout_ms;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_SOCKET_INVALID;
}

/* ── Console serial stubs ───────────────────────────────────────────────── */

#include "../port/syn_port_serial.h"

SYN_WEAK SYN_Status syn_port_serial_init(uint32_t baudrate)
{
    (void)baudrate;
    syn_assert_failed(__FILE__, __LINE__);
    return SYN_NOT_IMPLEMENTED;
}

SYN_WEAK int syn_port_serial_write(const uint8_t *data, size_t len)
{
    (void)data;
    (void)len;
    syn_assert_failed(__FILE__, __LINE__);
    return -1;
}

SYN_WEAK int syn_port_serial_read(uint8_t *buf, size_t max_len)
{
    (void)buf;
    (void)max_len;
    syn_assert_failed(__FILE__, __LINE__);
    return -1;
}

/* ── HPClock stubs ─────────────────────────────────────────────────────── */

SYN_WEAK volatile uint32_t *syn_port_hpclock_lsb_ptr(void)
{
    syn_assert_failed(__FILE__, __LINE__);
    return (volatile uint32_t *)0; /* unreachable */
}

SYN_WEAK uint32_t syn_port_hpclock_freq_hz(void)
{
    syn_assert_failed(__FILE__, __LINE__);
    return 0; /* unreachable */
}