diff --git a/boards/pic32cz_curiosity_ultra/Makefile.inc b/boards/pic32cz_curiosity_ultra/Makefile.inc index a867497..cd71bab 100644 --- a/boards/pic32cz_curiosity_ultra/Makefile.inc +++ b/boards/pic32cz_curiosity_ultra/Makefile.inc @@ -9,7 +9,11 @@ OBJCOPY = $(GCC_PATH)arm-none-eabi-objcopy CFLAGS += -Wall -Werror $(INCLUDE) -g3 \ -ffreestanding -nostdlib -mcpu=cortex-m7 \ - -DPLATFORM_PIC32CZ -MMD -MP + -DPLATFORM_PIC32CZ -MMD -MP \ + -DWHAL_CFG_GPIO_API_MAPPING_PIC32CZ \ + -DWHAL_CFG_CLOCK_API_MAPPING_PIC32CZ_PLL \ + -DWHAL_CFG_UART_API_MAPPING_PIC32CZ \ + -DWHAL_CFG_SUPPLY_API_MAPPING_PIC32CZ LDFLAGS = --omagic -static LINKER_SCRIPT ?= $(_BOARD_DIR)/linker.ld @@ -19,11 +23,7 @@ INCLUDE += -I$(_BOARD_DIR) -I$(WHAL_DIR)/boards/peripheral BOARD_SOURCE = $(_BOARD_DIR)/ivt.c BOARD_SOURCE += $(_BOARD_DIR)/board.c BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/gpio.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/clock.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/uart.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/timer.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/supply.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/flash.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/rng.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/block.c) diff --git a/boards/pic32cz_curiosity_ultra/board.c b/boards/pic32cz_curiosity_ultra/board.c index c66d209..d94749f 100644 --- a/boards/pic32cz_curiosity_ultra/board.c +++ b/boards/pic32cz_curiosity_ultra/board.c @@ -8,12 +8,14 @@ /* Supply */ static whal_Supply g_whalSupply = { - WHAL_PIC32CZ_SUPPLY_DEVICE, + .regmap = { WHAL_PIC32CZ_SUPPLY_REGMAP }, + /* .driver: direct API mapping */ }; /* Clock */ whal_Clock g_whalClock = { - WHAL_PIC32CZ_CLOCK_PLL_DEVICE, + .regmap = { WHAL_PIC32CZ_CLOCK_PLL_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Pic32czClock_Cfg) { /* 300MHz clock */ @@ -60,7 +62,8 @@ static const whal_Pic32czClock_Clk g_peripheralClocks[] = { /* GPIO */ whal_Gpio g_whalGpio = { - WHAL_PIC32CZ_GPIO_DEVICE, + .regmap = { WHAL_PIC32CZ_GPIO_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Pic32czGpio_Cfg) { .pinCfgCount = 3, @@ -89,7 +92,8 @@ whal_Gpio g_whalGpio = { /* UART */ whal_Uart g_whalUart = { - WHAL_PIC32CZ_SERCOM4_UART_DEVICE, + .regmap = { WHAL_PIC32CZ_SERCOM4_UART_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Pic32czUart_Cfg) { .baud = WHAL_PIC32CZ_UART_BAUD(115200, 300000000), @@ -100,7 +104,8 @@ whal_Uart g_whalUart = { /* Timer */ whal_Timer g_whalTimer = { - WHAL_CORTEX_M7_SYSTICK_DEVICE, + .regmap = { WHAL_CORTEX_M7_SYSTICK_REGMAP }, + .driver = WHAL_CORTEX_M7_SYSTICK_DRIVER, .cfg = &(whal_SysTick_Cfg) { .cyclesPerTick = 300000000 / 1000, @@ -111,7 +116,8 @@ whal_Timer g_whalTimer = { /* Flash */ whal_Flash g_whalFlash = { - WHAL_PIC32CZ_FLASH_DEVICE, + .regmap = { WHAL_PIC32CZ_FLASH_REGMAP }, + .driver = WHAL_PIC32CZ_FLASH_DRIVER, }; /* SysTick timing */ diff --git a/boards/stm32c031_nucleo/Makefile.inc b/boards/stm32c031_nucleo/Makefile.inc index 4d1985f..b54d517 100644 --- a/boards/stm32c031_nucleo/Makefile.inc +++ b/boards/stm32c031_nucleo/Makefile.inc @@ -9,7 +9,11 @@ OBJCOPY = $(GCC_PATH)arm-none-eabi-objcopy CFLAGS += -Wall -Werror $(INCLUDE) -g3 \ -ffreestanding -nostdlib -mcpu=cortex-m0plus -mthumb \ - -DPLATFORM_STM32C0 -MMD -MP + -DPLATFORM_STM32C0 -MMD -MP \ + -DWHAL_CFG_GPIO_API_MAPPING_STM32C0 \ + -DWHAL_CFG_CLOCK_API_MAPPING_STM32C0 \ + -DWHAL_CFG_UART_API_MAPPING_STM32C0 \ + -DWHAL_CFG_SPI_API_MAPPING_STM32C0 LDFLAGS = -mcpu=cortex-m0plus -mthumb -ffreestanding -nostartfiles \ -Wl,--omagic -static @@ -20,13 +24,9 @@ INCLUDE += -I$(_BOARD_DIR) -I$(WHAL_DIR)/boards/peripheral BOARD_SOURCE = $(_BOARD_DIR)/ivt.c BOARD_SOURCE += $(_BOARD_DIR)/board.c BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/gpio.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/clock.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/uart.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/timer.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/supply.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/flash.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/spi.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/rng.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/crypto.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/block.c) diff --git a/boards/stm32c031_nucleo/board.c b/boards/stm32c031_nucleo/board.c index 15c1592..8cbf426 100644 --- a/boards/stm32c031_nucleo/board.c +++ b/boards/stm32c031_nucleo/board.c @@ -32,7 +32,8 @@ whal_Timeout g_whalTimeout = { /* Clock */ whal_Clock g_whalClock = { - WHAL_STM32C031_RCC_DEVICE, + .regmap = { WHAL_STM32C031_RCC_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32c0Rcc_Cfg) { .hsidiv = WHAL_STM32C0_RCC_HSIDIV_1, /* HSI48 / 1 = 48 MHz */ @@ -50,7 +51,8 @@ static const whal_Stm32c0Rcc_Clk g_clocks[] = { /* GPIO */ whal_Gpio g_whalGpio = { - WHAL_STM32C031_GPIO_DEVICE, + .regmap = { WHAL_STM32C031_GPIO_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32c0Gpio_Cfg) { .pinCfg = (whal_Stm32c0Gpio_PinCfg[PIN_COUNT]) { @@ -91,7 +93,8 @@ whal_Gpio g_whalGpio = { /* Timer */ whal_Timer g_whalTimer = { - WHAL_CORTEX_M0PLUS_SYSTICK_DEVICE, + .regmap = { WHAL_CORTEX_M0PLUS_SYSTICK_REGMAP }, + .driver = WHAL_CORTEX_M0PLUS_SYSTICK_DRIVER, .cfg = &(whal_SysTick_Cfg) { .cyclesPerTick = 48000000 / 1000, /* 48 MHz / 1 kHz = 1 ms tick */ @@ -102,7 +105,8 @@ whal_Timer g_whalTimer = { /* UART */ whal_Uart g_whalUart = { - WHAL_STM32C031_USART1_DEVICE, + .regmap = { WHAL_STM32C031_USART1_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32c0Uart_Cfg) { .timeout = &g_whalTimeout, @@ -112,7 +116,8 @@ whal_Uart g_whalUart = { /* SPI */ whal_Spi g_whalSpi = { - WHAL_STM32C031_SPI1_DEVICE, + .regmap = { WHAL_STM32C031_SPI1_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32c0Spi_Cfg) { .pclk = 48000000, @@ -122,7 +127,8 @@ whal_Spi g_whalSpi = { /* Flash */ whal_Flash g_whalFlash = { - WHAL_STM32C031_FLASH_DEVICE, + .regmap = { WHAL_STM32C031_FLASH_REGMAP }, + .driver = WHAL_STM32C031_FLASH_DRIVER, .cfg = &(whal_Stm32c0Flash_Cfg) { .startAddr = 0x08000000, diff --git a/boards/stm32f411_blackpill/Makefile.inc b/boards/stm32f411_blackpill/Makefile.inc index bc8122f..6509c02 100644 --- a/boards/stm32f411_blackpill/Makefile.inc +++ b/boards/stm32f411_blackpill/Makefile.inc @@ -10,7 +10,11 @@ OBJCOPY = $(GCC_PATH)arm-none-eabi-objcopy CFLAGS += -Wall -Werror $(INCLUDE) -g3 \ -ffreestanding -nostdlib -mcpu=cortex-m4 -mfloat-abi=hard \ -mfpu=fpv4-sp-d16 -mthumb \ - -DPLATFORM_STM32F4 -MMD -MP + -DPLATFORM_STM32F4 -MMD -MP \ + -DWHAL_CFG_GPIO_API_MAPPING_STM32F4 \ + -DWHAL_CFG_CLOCK_API_MAPPING_STM32F4_PLL \ + -DWHAL_CFG_UART_API_MAPPING_STM32F4 \ + -DWHAL_CFG_SPI_API_MAPPING_STM32F4 LDFLAGS = --omagic -static LINKER_SCRIPT ?= $(_BOARD_DIR)/linker.ld @@ -20,13 +24,9 @@ INCLUDE += -I$(_BOARD_DIR) -I$(WHAL_DIR)/boards/peripheral BOARD_SOURCE = $(_BOARD_DIR)/ivt.c BOARD_SOURCE += $(_BOARD_DIR)/board.c BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/gpio.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/clock.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/uart.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/timer.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/supply.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/flash.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/spi.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/rng.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/crypto.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/block.c) diff --git a/boards/stm32f411_blackpill/board.c b/boards/stm32f411_blackpill/board.c index 6fd5a6b..abbfd39 100644 --- a/boards/stm32f411_blackpill/board.c +++ b/boards/stm32f411_blackpill/board.c @@ -39,7 +39,8 @@ static const whal_Stm32f4Flash_Sector g_flashSectors[] = { /* Clock */ whal_Clock g_whalClock = { - WHAL_STM32F411_RCC_PLL_DEVICE, + .regmap = { WHAL_STM32F411_RCC_PLL_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32f4Rcc_Cfg) { .sysClkSrc = WHAL_STM32F4_RCC_SYSCLK_SRC_PLL, @@ -66,7 +67,8 @@ static const whal_Stm32f4Rcc_Clk g_clocks[] = { /* GPIO */ whal_Gpio g_whalGpio = { - WHAL_STM32F411_GPIO_DEVICE, + .regmap = { WHAL_STM32F411_GPIO_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32f4Gpio_Cfg) { .pinCfg = (whal_Stm32f4Gpio_PinCfg[PIN_COUNT]) { @@ -107,7 +109,8 @@ whal_Gpio g_whalGpio = { /* Timer */ whal_Timer g_whalTimer = { - WHAL_CORTEX_M4_SYSTICK_DEVICE, + .regmap = { WHAL_CORTEX_M4_SYSTICK_REGMAP }, + .driver = WHAL_CORTEX_M4_SYSTICK_DRIVER, .cfg = &(whal_SysTick_Cfg) { .cyclesPerTick = 100000000 / 1000, /* 100 MHz / 1 kHz = 1 ms tick */ @@ -118,7 +121,8 @@ whal_Timer g_whalTimer = { /* UART */ whal_Uart g_whalUart = { - WHAL_STM32F411_USART2_DEVICE, + .regmap = { WHAL_STM32F411_USART2_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32f4Uart_Cfg) { .timeout = &g_whalTimeout, @@ -128,7 +132,8 @@ whal_Uart g_whalUart = { /* SPI */ whal_Spi g_whalSpi = { - WHAL_STM32F411_SPI1_DEVICE, + .regmap = { WHAL_STM32F411_SPI1_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32f4Spi_Cfg) { .pclk = 100000000, @@ -138,7 +143,8 @@ whal_Spi g_whalSpi = { /* Flash */ whal_Flash g_whalFlash = { - WHAL_STM32F411_FLASH_DEVICE, + .regmap = { WHAL_STM32F411_FLASH_REGMAP }, + .driver = WHAL_STM32F411_FLASH_DRIVER, .cfg = &(whal_Stm32f4Flash_Cfg) { .startAddr = 0x08000000, diff --git a/boards/stm32h563zi_nucleo/Makefile.inc b/boards/stm32h563zi_nucleo/Makefile.inc index 92cfc6e..b641425 100644 --- a/boards/stm32h563zi_nucleo/Makefile.inc +++ b/boards/stm32h563zi_nucleo/Makefile.inc @@ -9,7 +9,14 @@ OBJCOPY = $(GCC_PATH)arm-none-eabi-objcopy CFLAGS += -Wall -Werror $(INCLUDE) -g3 \ -ffreestanding -nostdlib -mcpu=cortex-m33 \ - -DPLATFORM_STM32H5 -MMD -MP + -DPLATFORM_STM32H5 -MMD -MP \ + -DWHAL_CFG_GPIO_API_MAPPING_STM32H5 \ + -DWHAL_CFG_CLOCK_API_MAPPING_STM32H5_PLL \ + -DWHAL_CFG_UART_API_MAPPING_STM32H5 \ + -DWHAL_CFG_SPI_API_MAPPING_STM32H5 \ + -DWHAL_CFG_RNG_API_MAPPING_STM32H5 \ + -DWHAL_CFG_ETH_API_MAPPING_STM32H5 \ + -DWHAL_CFG_ETH_PHY_API_MAPPING_LAN8742A LDFLAGS = --omagic -static LINKER_SCRIPT ?= $(_BOARD_DIR)/linker.ld @@ -19,19 +26,13 @@ INCLUDE += -I$(_BOARD_DIR) -I$(WHAL_DIR)/boards/peripheral BOARD_SOURCE = $(_BOARD_DIR)/ivt.c BOARD_SOURCE += $(_BOARD_DIR)/board.c BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/gpio.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/clock.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/uart.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/timer.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/supply.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/flash.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/spi.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/rng.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/crypto.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/block.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/eth.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/eth_phy/*.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/stm32h5_*.c) +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/lan8742a_*.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/systick.c) # Peripheral devices diff --git a/boards/stm32h563zi_nucleo/board.c b/boards/stm32h563zi_nucleo/board.c index ab28f37..5ea8557 100644 --- a/boards/stm32h563zi_nucleo/board.c +++ b/boards/stm32h563zi_nucleo/board.c @@ -27,7 +27,8 @@ whal_Timeout g_whalTimeout = { /* Clock */ whal_Clock g_whalClock = { - WHAL_STM32H563_RCC_PLL_DEVICE, + .regmap = { WHAL_STM32H563_RCC_PLL_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32h5Rcc_Cfg) { .sysClkSrc = WHAL_STM32H5_RCC_SYSCLK_SRC_PLL1, @@ -65,7 +66,8 @@ static const whal_Stm32h5Rcc_Clk g_ethClocks[] = { /* GPIO */ whal_Gpio g_whalGpio = { - WHAL_STM32H563_GPIO_DEVICE, + .regmap = { WHAL_STM32H563_GPIO_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32h5Gpio_Cfg) { .pinCfg = (whal_Stm32h5Gpio_PinCfg[PIN_COUNT]) { @@ -156,7 +158,8 @@ whal_Gpio g_whalGpio = { /* Timer */ whal_Timer g_whalTimer = { - WHAL_CORTEX_M33_SYSTICK_DEVICE, + .regmap = { WHAL_CORTEX_M33_SYSTICK_REGMAP }, + .driver = WHAL_CORTEX_M33_SYSTICK_DRIVER, .cfg = &(whal_SysTick_Cfg) { .cyclesPerTick = 168000000 / 1000, /* 168 MHz / 1 kHz = 1 ms tick */ @@ -167,7 +170,8 @@ whal_Timer g_whalTimer = { /* UART */ whal_Uart g_whalUart = { - WHAL_STM32H563_USART2_DEVICE, + .regmap = { WHAL_STM32H563_USART2_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32h5Uart_Cfg) { .timeout = &g_whalTimeout, @@ -177,7 +181,8 @@ whal_Uart g_whalUart = { /* SPI */ whal_Spi g_whalSpi = { - WHAL_STM32H563_SPI1_DEVICE, + .regmap = { WHAL_STM32H563_SPI1_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32h5Spi_Cfg) { .pclk = 168000000, @@ -187,7 +192,8 @@ whal_Spi g_whalSpi = { /* RNG */ whal_Rng g_whalRng = { - WHAL_STM32H563_RNG_DEVICE, + .regmap = { WHAL_STM32H563_RNG_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32h5Rng_Cfg) { .timeout = &g_whalTimeout, @@ -197,7 +203,8 @@ whal_Rng g_whalRng = { /* Flash */ whal_Flash g_whalFlash = { - WHAL_STM32H563_FLASH_DEVICE, + .regmap = { WHAL_STM32H563_FLASH_REGMAP }, + .driver = WHAL_STM32H563_FLASH_DRIVER, .cfg = &(whal_Stm32h5Flash_Cfg) { .startAddr = 0x08000000, @@ -222,7 +229,8 @@ static uint8_t ethRxBufs[ETH_RX_DESC_COUNT * ETH_RX_BUF_SIZE] __attribute__((aligned(4))); whal_Eth g_whalEth = { - WHAL_STM32H563_ETH_DEVICE, + .regmap = { WHAL_STM32H563_ETH_REGMAP }, + /* .driver: direct API mapping */ .macAddr = {0x00, 0x80, 0xE1, 0x00, 0x00, 0x01}, .cfg = &(whal_Stm32h5Eth_Cfg) { @@ -242,7 +250,7 @@ whal_Eth g_whalEth = { whal_EthPhy g_whalEthPhy = { .eth = &g_whalEth, .addr = BOARD_ETH_PHY_ADDR, - .driver = &whal_Lan8742a_Driver, + /* .driver: direct API mapping */ .cfg = &(whal_Lan8742a_Cfg) { .timeout = &g_whalTimeout, diff --git a/boards/stm32wb55xx_nucleo/Makefile.inc b/boards/stm32wb55xx_nucleo/Makefile.inc index d6916c0..7aa7748 100644 --- a/boards/stm32wb55xx_nucleo/Makefile.inc +++ b/boards/stm32wb55xx_nucleo/Makefile.inc @@ -12,7 +12,15 @@ CFLAGS += -Wall -Werror $(INCLUDE) -g3 \ -DPLATFORM_STM32WB -MMD -MP \ $(if $(DMA),-DBOARD_DMA) \ $(if $(filter iwdg,$(WATCHDOG)),-DBOARD_WATCHDOG_IWDG) \ - $(if $(filter wwdg,$(WATCHDOG)),-DBOARD_WATCHDOG_WWDG) + $(if $(filter wwdg,$(WATCHDOG)),-DBOARD_WATCHDOG_WWDG) \ + $(if $(DMA),-DWHAL_CFG_UART_API_MAPPING_STM32WB_DMA,-DWHAL_CFG_UART_API_MAPPING_STM32WB) \ + -DWHAL_CFG_GPIO_API_MAPPING_STM32WB \ + -DWHAL_CFG_SPI_API_MAPPING_STM32WB \ + -DWHAL_CFG_I2C_API_MAPPING_STM32WB \ + -DWHAL_CFG_CLOCK_API_MAPPING_STM32WB_PLL \ + -DWHAL_CFG_RNG_API_MAPPING_STM32WB \ + -DWHAL_CFG_DMA_API_MAPPING_STM32WB \ + -DWHAL_CFG_CRYPTO_API_MAPPING_STM32WB_AES LDFLAGS = --omagic -static LINKER_SCRIPT ?= $(_BOARD_DIR)/linker.ld @@ -22,20 +30,13 @@ INCLUDE += -I$(_BOARD_DIR) -I$(WHAL_DIR)/boards/peripheral BOARD_SOURCE = $(_BOARD_DIR)/ivt.c BOARD_SOURCE += $(_BOARD_DIR)/board.c BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/gpio.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/clock.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/uart.c) +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/crypto.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/timer.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/supply.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/flash.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/spi.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/i2c.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/sensor.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/watchdog.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/rng.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/crypto.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/block.c) -BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/dma.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/irq.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/irq/cortex_m4_nvic.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/stm32wb_*.c) diff --git a/boards/stm32wb55xx_nucleo/board.c b/boards/stm32wb55xx_nucleo/board.c index 43c6987..b1a909a 100644 --- a/boards/stm32wb55xx_nucleo/board.c +++ b/boards/stm32wb55xx_nucleo/board.c @@ -27,12 +27,14 @@ whal_Timeout g_whalTimeout = { /* IRQ */ whal_Irq g_whalIrq = { - WHAL_CORTEX_M4_NVIC_DEVICE, + .regmap = { WHAL_CORTEX_M4_NVIC_REGMAP }, + .driver = WHAL_CORTEX_M4_NVIC_DRIVER, }; /* Clock */ whal_Clock g_whalClock = { - WHAL_STM32WB55_RCC_PLL_DEVICE, + .regmap = { WHAL_STM32WB55_RCC_PLL_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32wbRcc_Cfg) { .sysClkSrc = WHAL_STM32WB_RCC_SYSCLK_SRC_PLL, @@ -67,7 +69,8 @@ static const whal_Stm32wbRcc_Clk g_clocks[] = { /* GPIO */ whal_Gpio g_whalGpio = { - WHAL_STM32WB55_GPIO_DEVICE, + .regmap = { WHAL_STM32WB55_GPIO_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32wbGpio_Cfg) { .pinCfg = (whal_Stm32wbGpio_PinCfg[PIN_COUNT]) { @@ -123,7 +126,8 @@ whal_Gpio g_whalGpio = { /* I2C */ whal_I2c g_whalI2c = { - WHAL_STM32WB55_I2C1_DEVICE, + .regmap = { WHAL_STM32WB55_I2C1_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32wbI2c_Cfg) { .pclk = 64000000, @@ -133,7 +137,8 @@ whal_I2c g_whalI2c = { /* SPI */ whal_Spi g_whalSpi = { - WHAL_STM32WB55_SPI1_DEVICE, + .regmap = { WHAL_STM32WB55_SPI1_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32wbSpi_Cfg) { .pclk = 64000000, @@ -143,7 +148,8 @@ whal_Spi g_whalSpi = { /* Timer */ whal_Timer g_whalTimer = { - WHAL_CORTEX_M4_SYSTICK_DEVICE, + .regmap = { WHAL_CORTEX_M4_SYSTICK_REGMAP }, + .driver = WHAL_CORTEX_M4_SYSTICK_DRIVER, .cfg = &(whal_SysTick_Cfg) { .cyclesPerTick = 64000000 / 1000, @@ -156,7 +162,8 @@ whal_Timer g_whalTimer = { #ifdef BOARD_DMA whal_Dma g_whalDma1 = { - WHAL_STM32WB55_DMA1_DEVICE, + .regmap = { WHAL_STM32WB55_DMA1_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32wbDma_Cfg){WHAL_STM32WB55_DMA1_CFG}, }; @@ -179,8 +186,8 @@ void DMA1_Channel5_IRQHandler(void) /* UART */ #ifdef BOARD_DMA whal_Uart g_whalUart = { - WHAL_STM32WB55_UART1_DEVICE, - .driver = &whal_Stm32wbUartDma_Driver, + .regmap = { WHAL_STM32WB55_UART1_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32wbUartDma_Cfg) { .base = { .brr = WHAL_STM32WB_UART_BRR(64000000, 115200), @@ -195,7 +202,8 @@ whal_Uart g_whalUart = { }; #else whal_Uart g_whalUart = { - WHAL_STM32WB55_UART1_DEVICE, + .regmap = { WHAL_STM32WB55_UART1_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32wbUart_Cfg) { .timeout = &g_whalTimeout, @@ -207,7 +215,8 @@ whal_Uart g_whalUart = { /* Flash */ whal_Flash g_whalFlash = { - WHAL_STM32WB55_FLASH_DEVICE, + .regmap = { WHAL_STM32WB55_FLASH_REGMAP }, + .driver = WHAL_STM32WB55_FLASH_DRIVER, .cfg = &(whal_Stm32wbFlash_Cfg) { .timeout = &g_whalTimeout, @@ -219,7 +228,8 @@ whal_Flash g_whalFlash = { /* RNG */ whal_Rng g_whalRng = { - WHAL_STM32WB55_RNG_DEVICE, + .regmap = { WHAL_STM32WB55_RNG_REGMAP }, + /* .driver: direct API mapping */ .cfg = &(whal_Stm32wbRng_Cfg) { .timeout = &g_whalTimeout, @@ -237,7 +247,8 @@ static const whal_Crypto_OpFunc cryptoOps[BOARD_CRYPTO_OP_COUNT] = { }; whal_Crypto g_whalCrypto = { - WHAL_STM32WB55_AES1_DEVICE, + .regmap = { WHAL_STM32WB55_AES1_REGMAP }, + /* .driver: direct API mapping */ .ops = cryptoOps, .opsCount = BOARD_CRYPTO_OP_COUNT, @@ -249,7 +260,8 @@ whal_Crypto g_whalCrypto = { #ifdef BOARD_WATCHDOG_IWDG whal_Watchdog g_whalWatchdog = { - WHAL_STM32WB55_IWDG_DEVICE, + .regmap = { WHAL_STM32WB55_IWDG_REGMAP }, + .driver = WHAL_STM32WB55_IWDG_DRIVER, .cfg = &(whal_Stm32wbIwdg_Cfg) { .prescaler = WHAL_STM32WB_IWDG_PR_32, @@ -259,7 +271,8 @@ whal_Watchdog g_whalWatchdog = { }; #elif defined(BOARD_WATCHDOG_WWDG) whal_Watchdog g_whalWatchdog = { - WHAL_STM32WB55_WWDG_DEVICE, + .regmap = { WHAL_STM32WB55_WWDG_REGMAP }, + .driver = WHAL_STM32WB55_WWDG_DRIVER, .cfg = &(whal_Stm32wbWwdg_Cfg) { .prescaler = WHAL_STM32WB_WWDG_TB_128, diff --git a/docs/adding_a_board.md b/docs/adding_a_board.md index 229e163..2750a76 100644 --- a/docs/adding_a_board.md +++ b/docs/adding_a_board.md @@ -59,7 +59,7 @@ static whal_MyplatformGpio_Cfg gpioConfig = { }; whal_Gpio g_whalGpio = { - WHAL_MYPLATFORM_GPIO_DEVICE, + .regmap = { WHAL_MYPLATFORM_GPIO_REGMAP }, .cfg = &gpioConfig, }; @@ -156,7 +156,10 @@ GCC = arm-none-eabi-gcc LD = arm-none-eabi-gcc OBJCOPY = arm-none-eabi-objcopy -CFLAGS = -mcpu=cortex-m4 -mthumb -Os -Wall -MMD $(INCLUDE) -I$(_BOARD_DIR) +CFLAGS = -mcpu=cortex-m4 -mthumb -Os -Wall -MMD $(INCLUDE) -I$(_BOARD_DIR) \ + -DWHAL_CFG_GPIO_API_MAPPING_MYPLATFORM \ + -DWHAL_CFG_CLOCK_API_MAPPING_MYPLATFORM_PLL \ + -DWHAL_CFG_UART_API_MAPPING_MYPLATFORM LDFLAGS = -mcpu=cortex-m4 -mthumb -nostdlib -lgcc LINKER_SCRIPT = $(_BOARD_DIR)/linker.ld @@ -165,8 +168,14 @@ INCLUDE += -I$(_BOARD_DIR) -I$(WHAL_DIR)/boards/peripheral BOARD_SOURCE = $(_BOARD_DIR)/board.c BOARD_SOURCE += $(_BOARD_DIR)/ivt.c +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*.c) +# Dispatch sources for mapped types are excluded; keep dispatch sources +# for types that may have peripheral drivers (flash, block, sensor). +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/timer.c) +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/flash.c) +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/block.c) BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/myplatform_*.c) -BOARD_SOURCE += $(WHAL_DIR)/src/timer/systick.c +BOARD_SOURCE += $(wildcard $(WHAL_DIR)/src/*/systick.c) # Peripheral devices include $(WHAL_DIR)/boards/peripheral/Makefile.inc diff --git a/docs/getting_started.md b/docs/getting_started.md index 57dfdd8..2365706 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -75,18 +75,22 @@ struct whal_Gpio { - **cfg** — points to a platform-specific configuration struct that the driver reads during Init -Platform headers provide device macros that fill in the `regmap` and `driver` -fields, so you only need to provide the `cfg`: +Platform headers provide `_REGMAP` and `_DRIVER` macros for each peripheral, +so you only need to fill in the `cfg`: ```c #include whal_Gpio g_whalGpio = { - WHAL_STM32WB55_GPIO_DEVICE, + .regmap = { WHAL_STM32WB55_GPIO_REGMAP }, + .driver = WHAL_STM32WB55_GPIO_DRIVER, .cfg = &gpioConfig, }; ``` +When direct API mapping is active for a device type, the `.driver` field is +omitted since calls go directly to the driver implementation. + ## Configuring Peripherals Each platform driver defines its own configuration struct with the parameters @@ -95,7 +99,8 @@ and a pin configuration table: ```c whal_Gpio g_whalGpio = { - WHAL_STM32WB55_GPIO_DEVICE, + .regmap = { WHAL_STM32WB55_GPIO_REGMAP }, + .driver = WHAL_STM32WB55_GPIO_DRIVER, .cfg = &(whal_Stm32wbGpio_Cfg) { .pinCfg = (whal_Stm32wbGpio_PinCfg[]) { @@ -116,7 +121,8 @@ A UART driver might need a pre-computed baud rate register value and a timeout: ```c whal_Uart g_whalUart = { - WHAL_STM32WB55_UART1_DEVICE, + .regmap = { WHAL_STM32WB55_UART1_REGMAP }, + .driver = WHAL_STM32WB55_UART1_DRIVER, .cfg = &(whal_Stm32wbUart_Cfg) { .timeout = &g_whalTimeout, @@ -220,10 +226,11 @@ operation completed. The error codes are: | Code | Meaning | |------|---------| | `WHAL_SUCCESS` | Operation completed successfully | -| `WHAL_EINVAL` | Invalid argument or unsupported operation | +| `WHAL_EINVAL` | Invalid argument (null device pointer, null data pointer) | | `WHAL_ENOTREADY` | Resource is busy or not yet available | | `WHAL_EHARDWARE` | Hardware error (e.g., RNG entropy failure) | | `WHAL_ETIMEOUT` | Operation timed out waiting for hardware | +| `WHAL_ENOTIMPL` | Operation not implemented by this driver | ## Optimizing for Size @@ -236,6 +243,33 @@ Define `WHAL_CFG_DIRECT_CALLBACKS` to bypass the generic dispatch layer. API calls compile down to direct function pointer calls with no input validation, eliminating the dispatch source files entirely. +### Direct API Mapping + +Each platform driver source provides an `#ifdef` block that renames its +driver functions to the top-level API names. When the corresponding +`WHAL_CFG__API_MAPPING_` flag is defined, the driver file +itself provides the definition of the top-level API — no wrapper, no vtable +indirection, no runtime null-check. + +For example, `-DWHAL_CFG_UART_API_MAPPING_STM32WB` causes +`src/uart/stm32wb_uart.c` to emit external symbols named `whal_Uart_Init`, +`whal_Uart_Deinit`, `whal_Uart_Send`, and `whal_Uart_Recv`, each bound to +the polled STM32WB UART driver body. Application code calling +`whal_Uart_Send(&dev, buf, sz)` links directly to the platform driver. + +All boards enable direct API mapping unconditionally for device types that +have only one driver in the build. Device types where a peripheral driver +could coexist (flash, block, sensor) are not mapped — they keep the vtable +dispatch so multiple drivers can be linked simultaneously. + +**The dispatch source `src//.c` must not be compiled when the +corresponding mapping flag is active.** Both the dispatch source and the +mapped driver source provide the same top-level symbols, which would cause +a multiple-definition link error. Exclude the dispatch source from the +board's source list. + +Only one mapping flag may be active per device type per build. + ### Custom Vtables The platform drivers provide a pre-built vtable with all operations populated. @@ -247,7 +281,7 @@ static const whal_GpioDriver myGpioDriver = { .Init = whal_Stm32wbGpio_Init, .Deinit = whal_Stm32wbGpio_Deinit, .Set = whal_Stm32wbGpio_Set, - /* Get left as NULL — not needed, saves pulling in that code */ + /* Get left as NULL — calls return WHAL_ENOTIMPL, saves pulling in that code */ }; whal_Gpio g_whalGpio = { diff --git a/docs/writing_a_driver.md b/docs/writing_a_driver.md index 02a9db8..bb75854 100644 --- a/docs/writing_a_driver.md +++ b/docs/writing_a_driver.md @@ -61,6 +61,41 @@ const whal_FooDriver whal_MyplatformFoo_Driver = { }; ``` +### Direct API Mapping + +Every driver should include a rename-at-definition block that lets the build +system map chip-specific function names to the top-level API. Place this +`#ifdef` block after your register defines and before the first function +definition: + +```c +#ifdef WHAL_CFG_FOO_API_MAPPING_MYPLATFORM +#define whal_MyplatformFoo_Init whal_Foo_Init +#define whal_MyplatformFoo_Deinit whal_Foo_Deinit +/* ... one #define per mapped function ... */ +#endif +``` + +When the flag is defined, the preprocessor renames each function to its +generic API name at the definition site. The driver source uses chip-specific +names everywhere — the macros handle the rest. + +Wrap the vtable in `#ifndef` since it is unused when mapping is active: + +```c +#ifndef WHAL_CFG_FOO_API_MAPPING_MYPLATFORM +const whal_FooDriver whal_MyplatformFoo_Driver = { + .Init = whal_MyplatformFoo_Init, + .Deinit = whal_MyplatformFoo_Deinit, +}; +#endif +``` + +In the chip header, wrap the mapped function prototypes and extern vtable +declaration in the same `#ifndef` guard. Types and configuration structs +stay unconditional. Extension functions (`Ext_*`) that have no generic +equivalent are never mapped and stay unconditional. + ### Configuration The device struct's `cfg` field points to your platform-specific configuration. @@ -238,7 +273,9 @@ platform that re-export the existing driver under platform-specific names. #### Header The alias header `typedef`s the config structs and `#define`s the driver -instance, functions, and any enum constants: +instance, functions, and any enum constants. The driver and function aliases +are wrapped in `#ifndef` so they are omitted when direct API mapping is active +for the alias platform: ```c #ifndef WHAL_STM32H5_GPIO_H @@ -249,11 +286,13 @@ instance, functions, and any enum constants: typedef whal_Stm32wbGpio_Cfg whal_Stm32h5Gpio_Cfg; typedef whal_Stm32wbGpio_PinCfg whal_Stm32h5Gpio_PinCfg; +#ifndef WHAL_CFG_GPIO_API_MAPPING_STM32H5 #define whal_Stm32h5Gpio_Driver whal_Stm32wbGpio_Driver #define whal_Stm32h5Gpio_Init whal_Stm32wbGpio_Init #define whal_Stm32h5Gpio_Deinit whal_Stm32wbGpio_Deinit #define whal_Stm32h5Gpio_Get whal_Stm32wbGpio_Get #define whal_Stm32h5Gpio_Set whal_Stm32wbGpio_Set +#endif /* Re-export enum constants under the new platform name */ #define WHAL_STM32H5_GPIO_MODE_OUT WHAL_STM32WB_GPIO_MODE_OUT @@ -288,18 +327,32 @@ field, different reset value that affects behavior), write a new driver. A partial alias that papers over register differences with workarounds is worse than a clean separate implementation. -### Platform Device Macro +### Platform Device Macros -Add a device macro to your platform header +Add regmap and driver macros to your platform header (`wolfHAL/platform//.h`) so that board configs can instantiate devices without knowing the register addresses or driver symbols: ```c -#define WHAL_MYPLATFORM_FOO_DEVICE \ - .regmap = { .base = 0x40000000, .size = 0x400 }, \ - .driver = &whal_MyplatformFoo_Driver +#define WHAL_MYPLATFORM_FOO_REGMAP \ + .base = 0x40000000, \ + .size = 0x400 +#define WHAL_MYPLATFORM_FOO_DRIVER &whal_MyplatformFoo_Driver ``` +The board uses these in device struct initializers: + +```c +whal_Foo g_whalFoo = { + .regmap = { WHAL_MYPLATFORM_FOO_REGMAP }, + .driver = WHAL_MYPLATFORM_FOO_DRIVER, + .cfg = &fooCfg, +}; +``` + +When direct API mapping is active for a device type, the board omits the +`.driver` field since the vtable is unused. + --- ## Clock @@ -462,8 +515,10 @@ transfer. The buffer must remain valid until the transfer completes. The driver signals completion through a platform-specific mechanism. Drivers that do not support async should set SendAsync to NULL in the vtable. -The dispatch layer returns WHAL_EINVAL when the caller tries to use a NULL -async function. +The dispatch layer returns WHAL_ENOTIMPL when the caller tries to use any +NULL vtable entry (or when the driver pointer itself is NULL). When direct +API mapping is active, polled drivers provide stub implementations that +return WHAL_ENOTIMPL directly. ### RecvAsync @@ -472,7 +527,8 @@ transfer. The buffer must remain valid until the transfer completes. The async variants are optional — a driver vtable only needs to populate them if the platform supports non-blocking transfers. Polled-only drivers -leave these NULL. +leave these NULL (the dispatch layer returns WHAL_ENOTIMPL) or provide +stubs returning WHAL_ENOTIMPL (direct API mapping). --- diff --git a/src/block/block.c b/src/block/block.c index 63c7101..8afadd7 100644 --- a/src/block/block.c +++ b/src/block/block.c @@ -4,18 +4,20 @@ inline whal_Error whal_Block_Init(whal_Block *blockDev) { - if (!blockDev || !blockDev->driver || !blockDev->driver->Init) { + if (!blockDev) return WHAL_EINVAL; - } + if (!blockDev->driver || !blockDev->driver->Init) + return WHAL_ENOTIMPL; return blockDev->driver->Init(blockDev); } inline whal_Error whal_Block_Deinit(whal_Block *blockDev) { - if (!blockDev || !blockDev->driver || !blockDev->driver->Deinit) { + if (!blockDev) return WHAL_EINVAL; - } + if (!blockDev->driver || !blockDev->driver->Deinit) + return WHAL_ENOTIMPL; return blockDev->driver->Deinit(blockDev); } @@ -23,9 +25,10 @@ inline whal_Error whal_Block_Deinit(whal_Block *blockDev) inline whal_Error whal_Block_Read(whal_Block *blockDev, uint32_t block, void *data, uint32_t blockCount) { - if (!blockDev || !blockDev->driver || !blockDev->driver->Read || !data) { + if (!blockDev || !data) return WHAL_EINVAL; - } + if (!blockDev->driver || !blockDev->driver->Read) + return WHAL_ENOTIMPL; return blockDev->driver->Read(blockDev, block, data, blockCount); } @@ -33,9 +36,10 @@ inline whal_Error whal_Block_Read(whal_Block *blockDev, uint32_t block, inline whal_Error whal_Block_Write(whal_Block *blockDev, uint32_t block, const void *data, uint32_t blockCount) { - if (!blockDev || !blockDev->driver || !blockDev->driver->Write || !data) { + if (!blockDev || !data) return WHAL_EINVAL; - } + if (!blockDev->driver || !blockDev->driver->Write) + return WHAL_ENOTIMPL; return blockDev->driver->Write(blockDev, block, data, blockCount); } @@ -43,9 +47,10 @@ inline whal_Error whal_Block_Write(whal_Block *blockDev, uint32_t block, inline whal_Error whal_Block_Erase(whal_Block *blockDev, uint32_t block, uint32_t blockCount) { - if (!blockDev || !blockDev->driver || !blockDev->driver->Erase) { + if (!blockDev) return WHAL_EINVAL; - } + if (!blockDev->driver || !blockDev->driver->Erase) + return WHAL_ENOTIMPL; return blockDev->driver->Erase(blockDev, block, blockCount); } diff --git a/src/block/sdhc_spi_block.c b/src/block/sdhc_spi_block.c index 3333b4d..7696232 100644 --- a/src/block/sdhc_spi_block.c +++ b/src/block/sdhc_spi_block.c @@ -36,6 +36,14 @@ #define DUMMY 0xFF +#ifdef WHAL_CFG_BLOCK_API_MAPPING_SDHC_SPI +#define whal_SdhcSpi_Init whal_Block_Init +#define whal_SdhcSpi_Deinit whal_Block_Deinit +#define whal_SdhcSpi_Read whal_Block_Read +#define whal_SdhcSpi_Write whal_Block_Write +#define whal_SdhcSpi_Erase whal_Block_Erase +#endif /* WHAL_CFG_BLOCK_API_MAPPING_SDHC_SPI */ + static whal_Error SdhcSpi_CsAssert(whal_SdhcSpi_Cfg *cfg) { uint8_t dummy = DUMMY; @@ -479,6 +487,7 @@ whal_Error whal_SdhcSpi_Erase(whal_Block *blockDev, uint32_t block, return err; } +#ifndef WHAL_CFG_BLOCK_API_MAPPING_SDHC_SPI const whal_BlockDriver whal_SdhcSpi_Driver = { .Init = whal_SdhcSpi_Init, .Deinit = whal_SdhcSpi_Deinit, @@ -486,3 +495,4 @@ const whal_BlockDriver whal_SdhcSpi_Driver = { .Write = whal_SdhcSpi_Write, .Erase = whal_SdhcSpi_Erase, }; +#endif /* !WHAL_CFG_BLOCK_API_MAPPING_SDHC_SPI */ diff --git a/src/clock/clock.c b/src/clock/clock.c index cf950f8..c3fba99 100644 --- a/src/clock/clock.c +++ b/src/clock/clock.c @@ -3,36 +3,40 @@ inline whal_Error whal_Clock_Init(whal_Clock *clkDev) { - if (!clkDev || !clkDev->driver || !clkDev->driver->Init) { + if (!clkDev) return WHAL_EINVAL; - } + if (!clkDev->driver || !clkDev->driver->Init) + return WHAL_ENOTIMPL; return clkDev->driver->Init(clkDev); } inline whal_Error whal_Clock_Deinit(whal_Clock *clkDev) { - if (!clkDev || !clkDev->driver || !clkDev->driver->Deinit) { + if (!clkDev) return WHAL_EINVAL; - } + if (!clkDev->driver || !clkDev->driver->Deinit) + return WHAL_ENOTIMPL; return clkDev->driver->Deinit(clkDev); } inline whal_Error whal_Clock_Enable(whal_Clock *clkDev, const void *clk) { - if (!clkDev || !clkDev->driver || !clkDev->driver->Enable) { + if (!clkDev) return WHAL_EINVAL; - } + if (!clkDev->driver || !clkDev->driver->Enable) + return WHAL_ENOTIMPL; return clkDev->driver->Enable(clkDev, clk); } inline whal_Error whal_Clock_Disable(whal_Clock *clkDev, const void *clk) { - if (!clkDev || !clkDev->driver || !clkDev->driver->Disable) { + if (!clkDev) return WHAL_EINVAL; - } + if (!clkDev->driver || !clkDev->driver->Disable) + return WHAL_ENOTIMPL; return clkDev->driver->Disable(clkDev, clk); } diff --git a/src/clock/pic32cz_clock.c b/src/clock/pic32cz_clock.c index c0c75c1..5a4852b 100644 --- a/src/clock/pic32cz_clock.c +++ b/src/clock/pic32cz_clock.c @@ -92,6 +92,13 @@ /* Peripheral Clock Mask Registers - enable/disable bus clocks to peripherals */ #define MCLK_CLKxMSK_REG(enableInst) (MCLK + 0x3C + (enableInst * 0x4)) +#ifdef WHAL_CFG_CLOCK_API_MAPPING_PIC32CZ_PLL +#define whal_Pic32czClockPll_Init whal_Clock_Init +#define whal_Pic32czClockPll_Deinit whal_Clock_Deinit +#define whal_Pic32czClock_Enable whal_Clock_Enable +#define whal_Pic32czClock_Disable whal_Clock_Disable +#endif /* WHAL_CFG_CLOCK_API_MAPPING_PIC32CZ_PLL */ + whal_Error whal_Pic32czClockPll_Init(whal_Clock *clkDev) { whal_Pic32czClock_Cfg *cfg; @@ -238,9 +245,11 @@ whal_Error whal_Pic32czClock_Disable(whal_Clock *clkDev, const void *clk) return WHAL_SUCCESS; } +#ifndef WHAL_CFG_CLOCK_API_MAPPING_PIC32CZ_PLL const whal_ClockDriver whal_Pic32czClockPll_Driver = { .Init = whal_Pic32czClockPll_Init, .Deinit = whal_Pic32czClockPll_Deinit, .Enable = whal_Pic32czClock_Enable, .Disable = whal_Pic32czClock_Disable, }; +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_PIC32CZ_PLL */ diff --git a/src/clock/stm32c0_rcc.c b/src/clock/stm32c0_rcc.c index 9dd3836..e1831b2 100644 --- a/src/clock/stm32c0_rcc.c +++ b/src/clock/stm32c0_rcc.c @@ -35,6 +35,13 @@ /* HSISYS clock source selection value */ #define RCC_CFGR_SW_HSISYS 0 +#ifdef WHAL_CFG_CLOCK_API_MAPPING_STM32C0 +#define whal_Stm32c0Rcc_Init whal_Clock_Init +#define whal_Stm32c0Rcc_Deinit whal_Clock_Deinit +#define whal_Stm32c0Rcc_Enable whal_Clock_Enable +#define whal_Stm32c0Rcc_Disable whal_Clock_Disable +#endif /* WHAL_CFG_CLOCK_API_MAPPING_STM32C0 */ + whal_Error whal_Stm32c0Rcc_Init(whal_Clock *clkDev) { whal_Stm32c0Rcc_Cfg *cfg; @@ -114,9 +121,11 @@ whal_Error whal_Stm32c0Rcc_Disable(whal_Clock *clkDev, const void *clk) return WHAL_SUCCESS; } +#ifndef WHAL_CFG_CLOCK_API_MAPPING_STM32C0 const whal_ClockDriver whal_Stm32c0Rcc_Driver = { .Init = whal_Stm32c0Rcc_Init, .Deinit = whal_Stm32c0Rcc_Deinit, .Enable = whal_Stm32c0Rcc_Enable, .Disable = whal_Stm32c0Rcc_Disable, }; +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_STM32C0 */ diff --git a/src/clock/stm32f4_rcc.c b/src/clock/stm32f4_rcc.c index 3972c5e..b71c694 100644 --- a/src/clock/stm32f4_rcc.c +++ b/src/clock/stm32f4_rcc.c @@ -72,6 +72,13 @@ #define RCC_CFGR_PPRE2_Pos 13 #define RCC_CFGR_PPRE2_Msk (WHAL_BITMASK(3) << RCC_CFGR_PPRE2_Pos) +#ifdef WHAL_CFG_CLOCK_API_MAPPING_STM32F4_PLL +#define whal_Stm32f4RccPll_Init whal_Clock_Init +#define whal_Stm32f4RccPll_Deinit whal_Clock_Deinit +#define whal_Stm32f4Rcc_Enable whal_Clock_Enable +#define whal_Stm32f4Rcc_Disable whal_Clock_Disable +#endif /* WHAL_CFG_CLOCK_API_MAPPING_STM32F4_PLL */ + whal_Error whal_Stm32f4RccPll_Init(whal_Clock *clkDev) { whal_Stm32f4Rcc_Cfg *cfg; @@ -208,9 +215,11 @@ whal_Error whal_Stm32f4Rcc_Disable(whal_Clock *clkDev, const void *clk) return WHAL_SUCCESS; } +#ifndef WHAL_CFG_CLOCK_API_MAPPING_STM32F4_PLL const whal_ClockDriver whal_Stm32f4RccPll_Driver = { .Init = whal_Stm32f4RccPll_Init, .Deinit = whal_Stm32f4RccPll_Deinit, .Enable = whal_Stm32f4Rcc_Enable, .Disable = whal_Stm32f4Rcc_Disable, }; +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_STM32F4_PLL */ diff --git a/src/clock/stm32h5_rcc.c b/src/clock/stm32h5_rcc.c index f71ef10..54e5875 100644 --- a/src/clock/stm32h5_rcc.c +++ b/src/clock/stm32h5_rcc.c @@ -102,6 +102,22 @@ /* HSI base frequency */ #define HSI_FREQ 64000000UL +#if defined(WHAL_CFG_CLOCK_API_MAPPING_STM32H5_PLL) || \ + defined(WHAL_CFG_CLOCK_API_MAPPING_STM32H5_HSI) +#define whal_Stm32h5Rcc_Enable whal_Clock_Enable +#define whal_Stm32h5Rcc_Disable whal_Clock_Disable +#endif + +#ifdef WHAL_CFG_CLOCK_API_MAPPING_STM32H5_PLL +#define whal_Stm32h5RccPll_Init whal_Clock_Init +#define whal_Stm32h5RccPll_Deinit whal_Clock_Deinit +#endif /* WHAL_CFG_CLOCK_API_MAPPING_STM32H5_PLL */ + +#ifdef WHAL_CFG_CLOCK_API_MAPPING_STM32H5_HSI +#define whal_Stm32h5RccHsi_Init whal_Clock_Init +#define whal_Stm32h5RccHsi_Deinit whal_Clock_Deinit +#endif /* WHAL_CFG_CLOCK_API_MAPPING_STM32H5_HSI */ + whal_Error whal_Stm32h5RccPll_Init(whal_Clock *clkDev) { whal_Stm32h5Rcc_Cfg *cfg; @@ -310,6 +326,7 @@ whal_Error whal_Stm32h5Rcc_Disable(whal_Clock *clkDev, const void *clk) return WHAL_SUCCESS; } +#if !defined(WHAL_CFG_CLOCK_API_MAPPING_STM32H5_PLL) && !defined(WHAL_CFG_CLOCK_API_MAPPING_STM32H5_HSI) const whal_ClockDriver whal_Stm32h5RccPll_Driver = { .Init = whal_Stm32h5RccPll_Init, .Deinit = whal_Stm32h5RccPll_Deinit, @@ -323,6 +340,7 @@ const whal_ClockDriver whal_Stm32h5RccHsi_Driver = { .Enable = whal_Stm32h5Rcc_Enable, .Disable = whal_Stm32h5Rcc_Disable, }; +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_STM32H5_PLL && !WHAL_CFG_CLOCK_API_MAPPING_STM32H5_HSI */ whal_Error whal_Stm32h5Rcc_Ext_EnableHsi48(whal_Clock *clkDev, uint8_t enable) { diff --git a/src/clock/stm32wb_rcc.c b/src/clock/stm32wb_rcc.c index c8e7554..636c690 100644 --- a/src/clock/stm32wb_rcc.c +++ b/src/clock/stm32wb_rcc.c @@ -147,6 +147,22 @@ #define RCC_CRRCR_HSI48RDY_Pos 1 /* HSI48 oscillator ready */ #define RCC_CRRCR_HSI48RDY_Msk (1UL << RCC_CRRCR_HSI48RDY_Pos) +#if defined(WHAL_CFG_CLOCK_API_MAPPING_STM32WB_PLL) || \ + defined(WHAL_CFG_CLOCK_API_MAPPING_STM32WB_MSI) +#define whal_Stm32wbRcc_Enable whal_Clock_Enable +#define whal_Stm32wbRcc_Disable whal_Clock_Disable +#endif + +#ifdef WHAL_CFG_CLOCK_API_MAPPING_STM32WB_PLL +#define whal_Stm32wbRccPll_Init whal_Clock_Init +#define whal_Stm32wbRccPll_Deinit whal_Clock_Deinit +#endif /* WHAL_CFG_CLOCK_API_MAPPING_STM32WB_PLL */ + +#ifdef WHAL_CFG_CLOCK_API_MAPPING_STM32WB_MSI +#define whal_Stm32wbRccMsi_Init whal_Clock_Init +#define whal_Stm32wbRccMsi_Deinit whal_Clock_Deinit +#endif /* WHAL_CFG_CLOCK_API_MAPPING_STM32WB_MSI */ + whal_Error whal_Stm32wbRccPll_Init(whal_Clock *clkDev) { whal_Stm32wbRcc_Cfg *cfg; @@ -302,6 +318,7 @@ whal_Error whal_Stm32wbRcc_Ext_EnableLsi(whal_Clock *clkDev, uint8_t enable) return WHAL_SUCCESS; } +#if !defined(WHAL_CFG_CLOCK_API_MAPPING_STM32WB_PLL) && !defined(WHAL_CFG_CLOCK_API_MAPPING_STM32WB_MSI) const whal_ClockDriver whal_Stm32wbRccPll_Driver = { .Init = whal_Stm32wbRccPll_Init, .Deinit = whal_Stm32wbRccPll_Deinit, @@ -315,3 +332,4 @@ const whal_ClockDriver whal_Stm32wbRccMsi_Driver = { .Enable = whal_Stm32wbRcc_Enable, .Disable = whal_Stm32wbRcc_Disable, }; +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_STM32WB_PLL && !WHAL_CFG_CLOCK_API_MAPPING_STM32WB_MSI */ diff --git a/src/crypto/crypto.c b/src/crypto/crypto.c index 81925b0..a60ddb0 100644 --- a/src/crypto/crypto.c +++ b/src/crypto/crypto.c @@ -1,6 +1,7 @@ #include #include +#ifndef WHAL_CFG_CRYPTO_API_MAPPING_STM32WB_AES whal_Error whal_Crypto_Init(whal_Crypto *cryptoDev) { if (!cryptoDev || !cryptoDev->driver || !cryptoDev->driver->Init) { @@ -18,6 +19,7 @@ whal_Error whal_Crypto_Deinit(whal_Crypto *cryptoDev) return cryptoDev->driver->Deinit(cryptoDev); } +#endif whal_Error whal_Crypto_Op(whal_Crypto *cryptoDev, size_t op, void *opArgs) { diff --git a/src/crypto/stm32wb_aes.c b/src/crypto/stm32wb_aes.c index 349cde9..0151ae6 100644 --- a/src/crypto/stm32wb_aes.c +++ b/src/crypto/stm32wb_aes.c @@ -149,6 +149,11 @@ static whal_Error WaitForCCF(size_t base, whal_Timeout *timeout) } +#ifdef WHAL_CFG_CRYPTO_API_MAPPING_STM32WB_AES +#define whal_Stm32wbAes_Init whal_Crypto_Init +#define whal_Stm32wbAes_Deinit whal_Crypto_Deinit +#endif /* WHAL_CFG_CRYPTO_API_MAPPING_STM32WB_AES */ + whal_Error whal_Stm32wbAes_Init(whal_Crypto *cryptoDev) { if (!cryptoDev || !cryptoDev->cfg) { @@ -922,7 +927,9 @@ whal_Error whal_Stm32wbAes_AesCcm(whal_Crypto *cryptoDev, void *opArgs) return err; } +#ifndef WHAL_CFG_CRYPTO_API_MAPPING_STM32WB_AES const whal_CryptoDriver whal_Stm32wbAes_Driver = { .Init = whal_Stm32wbAes_Init, .Deinit = whal_Stm32wbAes_Deinit, }; +#endif /* !WHAL_CFG_CRYPTO_API_MAPPING_STM32WB_AES */ diff --git a/src/dma/stm32wb_dma.c b/src/dma/stm32wb_dma.c index 8f43609..d7fbb48 100644 --- a/src/dma/stm32wb_dma.c +++ b/src/dma/stm32wb_dma.c @@ -88,7 +88,15 @@ #define DMAMUX_CxCR_DMAREQ_ID_Pos 0 #define DMAMUX_CxCR_DMAREQ_ID_Msk (WHAL_BITMASK(6) << DMAMUX_CxCR_DMAREQ_ID_Pos) -static whal_Error whal_Stm32wbDma_Init(whal_Dma *dmaDev) +#ifdef WHAL_CFG_DMA_API_MAPPING_STM32WB +#define whal_Stm32wbDma_Init whal_Dma_Init +#define whal_Stm32wbDma_Deinit whal_Dma_Deinit +#define whal_Stm32wbDma_Configure whal_Dma_Configure +#define whal_Stm32wbDma_Start whal_Dma_Start +#define whal_Stm32wbDma_Stop whal_Dma_Stop +#endif /* WHAL_CFG_DMA_API_MAPPING_STM32WB */ + +whal_Error whal_Stm32wbDma_Init(whal_Dma *dmaDev) { whal_Stm32wbDma_Cfg *cfg; size_t base; @@ -112,7 +120,7 @@ static whal_Error whal_Stm32wbDma_Init(whal_Dma *dmaDev) return WHAL_SUCCESS; } -static whal_Error whal_Stm32wbDma_Deinit(whal_Dma *dmaDev) +whal_Error whal_Stm32wbDma_Deinit(whal_Dma *dmaDev) { whal_Stm32wbDma_Cfg *cfg; size_t base; @@ -142,7 +150,7 @@ static whal_Error whal_Stm32wbDma_Deinit(whal_Dma *dmaDev) return WHAL_SUCCESS; } -static whal_Error whal_Stm32wbDma_Configure(whal_Dma *dmaDev, size_t ch, +whal_Error whal_Stm32wbDma_Configure(whal_Dma *dmaDev, size_t ch, const void *chCfg) { whal_Stm32wbDma_Cfg *cfg; @@ -262,7 +270,7 @@ static whal_Error whal_Stm32wbDma_Configure(whal_Dma *dmaDev, size_t ch, return WHAL_SUCCESS; } -static whal_Error whal_Stm32wbDma_Start(whal_Dma *dmaDev, size_t ch) +whal_Error whal_Stm32wbDma_Start(whal_Dma *dmaDev, size_t ch) { whal_Stm32wbDma_Cfg *cfg; size_t base; @@ -292,7 +300,7 @@ static whal_Error whal_Stm32wbDma_Start(whal_Dma *dmaDev, size_t ch) return WHAL_SUCCESS; } -static whal_Error whal_Stm32wbDma_Stop(whal_Dma *dmaDev, size_t ch) +whal_Error whal_Stm32wbDma_Stop(whal_Dma *dmaDev, size_t ch) { whal_Stm32wbDma_Cfg *cfg; size_t base; @@ -347,6 +355,7 @@ void whal_Stm32wbDma_IRQHandler(whal_Dma *dmaDev, size_t ch, } } +#ifndef WHAL_CFG_DMA_API_MAPPING_STM32WB const whal_DmaDriver whal_Stm32wbDma_Driver = { .Init = whal_Stm32wbDma_Init, .Deinit = whal_Stm32wbDma_Deinit, @@ -354,3 +363,4 @@ const whal_DmaDriver whal_Stm32wbDma_Driver = { .Start = whal_Stm32wbDma_Start, .Stop = whal_Stm32wbDma_Stop, }; +#endif /* !WHAL_CFG_DMA_API_MAPPING_STM32WB */ diff --git a/src/eth/stm32h5_eth.c b/src/eth/stm32h5_eth.c index a05d7e4..8c78ce4 100644 --- a/src/eth/stm32h5_eth.c +++ b/src/eth/stm32h5_eth.c @@ -123,6 +123,17 @@ /* MDIO clock range for 168 MHz AHB: CR=4 gives /102 ≈ 1.6 MHz */ #define ETH_MDIO_CR 4 +#ifdef WHAL_CFG_ETH_API_MAPPING_STM32H5 +#define whal_Stm32h5Eth_Init whal_Eth_Init +#define whal_Stm32h5Eth_Deinit whal_Eth_Deinit +#define whal_Stm32h5Eth_Start whal_Eth_Start +#define whal_Stm32h5Eth_Stop whal_Eth_Stop +#define whal_Stm32h5Eth_Send whal_Eth_Send +#define whal_Stm32h5Eth_Recv whal_Eth_Recv +#define whal_Stm32h5Eth_MdioRead whal_Eth_MdioRead +#define whal_Stm32h5Eth_MdioWrite whal_Eth_MdioWrite +#endif /* WHAL_CFG_ETH_API_MAPPING_STM32H5 */ + static whal_Error MdioPoll(size_t base, whal_Timeout *timeout) { return whal_Reg_ReadPoll(base, ETH_MACMDIOAR_REG, @@ -490,6 +501,7 @@ whal_Error whal_Stm32h5Eth_Ext_EnableLoopback(whal_Eth *ethDev, return WHAL_SUCCESS; } +#ifndef WHAL_CFG_ETH_API_MAPPING_STM32H5 const whal_EthDriver whal_Stm32h5Eth_Driver = { .Init = whal_Stm32h5Eth_Init, .Deinit = whal_Stm32h5Eth_Deinit, @@ -500,3 +512,4 @@ const whal_EthDriver whal_Stm32h5Eth_Driver = { .MdioRead = whal_Stm32h5Eth_MdioRead, .MdioWrite = whal_Stm32h5Eth_MdioWrite, }; +#endif /* !WHAL_CFG_ETH_API_MAPPING_STM32H5 */ diff --git a/src/eth_phy/lan8742a_eth_phy.c b/src/eth_phy/lan8742a_eth_phy.c index 530b691..3befcf5 100644 --- a/src/eth_phy/lan8742a_eth_phy.c +++ b/src/eth_phy/lan8742a_eth_phy.c @@ -21,6 +21,12 @@ #define PHY_PHYSCSR_100HD (2UL << 2) #define PHY_PHYSCSR_100FD (6UL << 2) +#ifdef WHAL_CFG_ETH_PHY_API_MAPPING_LAN8742A +#define whal_Lan8742a_Init whal_EthPhy_Init +#define whal_Lan8742a_Deinit whal_EthPhy_Deinit +#define whal_Lan8742a_GetLinkState whal_EthPhy_GetLinkState +#endif /* WHAL_CFG_ETH_PHY_API_MAPPING_LAN8742A */ + whal_Error whal_Lan8742a_Init(whal_EthPhy *phyDev) { whal_Lan8742a_Cfg *cfg; @@ -121,8 +127,10 @@ whal_Error whal_Lan8742a_GetLinkState(whal_EthPhy *phyDev, uint8_t *up, return WHAL_SUCCESS; } +#ifndef WHAL_CFG_ETH_PHY_API_MAPPING_LAN8742A const whal_EthPhyDriver whal_Lan8742a_Driver = { .Init = whal_Lan8742a_Init, .Deinit = whal_Lan8742a_Deinit, .GetLinkState = whal_Lan8742a_GetLinkState, }; +#endif /* !WHAL_CFG_ETH_PHY_API_MAPPING_LAN8742A */ diff --git a/src/flash/flash.c b/src/flash/flash.c index e6a5899..28b2ca5 100644 --- a/src/flash/flash.c +++ b/src/flash/flash.c @@ -4,36 +4,40 @@ inline whal_Error whal_Flash_Init(whal_Flash *flashDev) { - if (!flashDev || !flashDev->driver || !flashDev->driver->Init) { + if (!flashDev) return WHAL_EINVAL; - } + if (!flashDev->driver || !flashDev->driver->Init) + return WHAL_ENOTIMPL; return flashDev->driver->Init(flashDev); } inline whal_Error whal_Flash_Deinit(whal_Flash *flashDev) { - if (!flashDev || !flashDev->driver || !flashDev->driver->Deinit) { + if (!flashDev) return WHAL_EINVAL; - } + if (!flashDev->driver || !flashDev->driver->Deinit) + return WHAL_ENOTIMPL; return flashDev->driver->Deinit(flashDev); } inline whal_Error whal_Flash_Lock(whal_Flash *flashDev, size_t addr, size_t len) { - if (!flashDev || !flashDev->driver || !flashDev->driver->Lock) { + if (!flashDev) return WHAL_EINVAL; - } + if (!flashDev->driver || !flashDev->driver->Lock) + return WHAL_ENOTIMPL; return flashDev->driver->Lock(flashDev, addr, len); } inline whal_Error whal_Flash_Unlock(whal_Flash *flashDev, size_t addr, size_t len) { - if (!flashDev || !flashDev->driver || !flashDev->driver->Unlock) { + if (!flashDev) return WHAL_EINVAL; - } + if (!flashDev->driver || !flashDev->driver->Unlock) + return WHAL_ENOTIMPL; return flashDev->driver->Unlock(flashDev, addr, len); } @@ -41,9 +45,10 @@ inline whal_Error whal_Flash_Unlock(whal_Flash *flashDev, size_t addr, size_t le inline whal_Error whal_Flash_Read(whal_Flash *flashDev, size_t addr, void *data, size_t dataSz) { - if (!flashDev || !flashDev->driver || !flashDev->driver->Read || !data) { + if (!flashDev || !data) return WHAL_EINVAL; - } + if (!flashDev->driver || !flashDev->driver->Read) + return WHAL_ENOTIMPL; return flashDev->driver->Read(flashDev, addr, data, dataSz); } @@ -51,9 +56,10 @@ inline whal_Error whal_Flash_Read(whal_Flash *flashDev, size_t addr, void *data, inline whal_Error whal_Flash_Write(whal_Flash *flashDev, size_t addr, const void *data, size_t dataSz) { - if (!flashDev || !flashDev->driver || !flashDev->driver->Write || !data) { + if (!flashDev || !data) return WHAL_EINVAL; - } + if (!flashDev->driver || !flashDev->driver->Write) + return WHAL_ENOTIMPL; return flashDev->driver->Write(flashDev, addr, data, dataSz); } @@ -61,9 +67,10 @@ inline whal_Error whal_Flash_Write(whal_Flash *flashDev, size_t addr, const void inline whal_Error whal_Flash_Erase(whal_Flash *flashDev, size_t addr, size_t dataSz) { - if (!flashDev || !flashDev->driver || !flashDev->driver->Erase) { + if (!flashDev) return WHAL_EINVAL; - } + if (!flashDev->driver || !flashDev->driver->Erase) + return WHAL_ENOTIMPL; return flashDev->driver->Erase(flashDev, addr, dataSz); } diff --git a/src/flash/pic32cz_flash.c b/src/flash/pic32cz_flash.c index 4ba946b..c9f1e58 100644 --- a/src/flash/pic32cz_flash.c +++ b/src/flash/pic32cz_flash.c @@ -94,6 +94,16 @@ #define FCW_DWORD_SIZE 8 #define FCW_QDWORD_SIZE 32 +#ifdef WHAL_CFG_FLASH_API_MAPPING_PIC32CZ +#define whal_Pic32czFlash_Init whal_Flash_Init +#define whal_Pic32czFlash_Deinit whal_Flash_Deinit +#define whal_Pic32czFlash_Lock whal_Flash_Lock +#define whal_Pic32czFlash_Unlock whal_Flash_Unlock +#define whal_Pic32czFlash_Read whal_Flash_Read +#define whal_Pic32czFlash_Write whal_Flash_Write +#define whal_Pic32czFlash_Erase whal_Flash_Erase +#endif /* WHAL_CFG_FLASH_API_MAPPING_PIC32CZ */ + static whal_Error whal_Pic32czFlash_MutexLock(const whal_Regmap *reg, whal_Timeout *timeout) { @@ -403,6 +413,7 @@ whal_Error whal_Pic32czFlash_Erase(whal_Flash *flashDev, size_t addr, size_t dat return WHAL_SUCCESS; } +#ifndef WHAL_CFG_FLASH_API_MAPPING_PIC32CZ const whal_FlashDriver whal_Pic32czFlash_Driver = { .Init = whal_Pic32czFlash_Init, .Deinit = whal_Pic32czFlash_Deinit, @@ -412,3 +423,4 @@ const whal_FlashDriver whal_Pic32czFlash_Driver = { .Write = whal_Pic32czFlash_Write, .Erase = whal_Pic32czFlash_Erase, }; +#endif /* !WHAL_CFG_FLASH_API_MAPPING_PIC32CZ */ diff --git a/src/flash/spi_nor_flash.c b/src/flash/spi_nor_flash.c index df5d7a7..bfe50c5 100644 --- a/src/flash/spi_nor_flash.c +++ b/src/flash/spi_nor_flash.c @@ -48,6 +48,7 @@ #define DUMMY 0xFF + static whal_Error SpiNor_CsAssert(whal_SpiNor_Cfg *cfg) { return whal_Gpio_Set(cfg->gpioDev, cfg->csPin, 0); diff --git a/src/flash/stm32c0_flash.c b/src/flash/stm32c0_flash.c index dc4cf2e..c3e8276 100644 --- a/src/flash/stm32c0_flash.c +++ b/src/flash/stm32c0_flash.c @@ -85,6 +85,16 @@ #define FLASH_CR_LOCK_Pos 31 /* Lock flash control */ #define FLASH_CR_LOCK_Msk (1UL << FLASH_CR_LOCK_Pos) +#ifdef WHAL_CFG_FLASH_API_MAPPING_STM32C0 +#define whal_Stm32c0Flash_Init whal_Flash_Init +#define whal_Stm32c0Flash_Deinit whal_Flash_Deinit +#define whal_Stm32c0Flash_Lock whal_Flash_Lock +#define whal_Stm32c0Flash_Unlock whal_Flash_Unlock +#define whal_Stm32c0Flash_Read whal_Flash_Read +#define whal_Stm32c0Flash_Write whal_Flash_Write +#define whal_Stm32c0Flash_Erase whal_Flash_Erase +#endif /* WHAL_CFG_FLASH_API_MAPPING_STM32C0 */ + whal_Error whal_Stm32c0Flash_Init(whal_Flash *flashDev) { (void)flashDev; @@ -292,6 +302,7 @@ whal_Error whal_Stm32c0Flash_Ext_SetLatency(whal_Flash *flashDev, enum whal_Stm3 return WHAL_SUCCESS; } +#ifndef WHAL_CFG_FLASH_API_MAPPING_STM32C0 const whal_FlashDriver whal_Stm32c0Flash_Driver = { .Init = whal_Stm32c0Flash_Init, .Deinit = whal_Stm32c0Flash_Deinit, @@ -301,3 +312,4 @@ const whal_FlashDriver whal_Stm32c0Flash_Driver = { .Write = whal_Stm32c0Flash_Write, .Erase = whal_Stm32c0Flash_Erase, }; +#endif /* !WHAL_CFG_FLASH_API_MAPPING_STM32C0 */ diff --git a/src/flash/stm32f4_flash.c b/src/flash/stm32f4_flash.c index 7ffb7a0..b94673c 100644 --- a/src/flash/stm32f4_flash.c +++ b/src/flash/stm32f4_flash.c @@ -79,6 +79,16 @@ #define FLASH_KEY1 0x45670123UL #define FLASH_KEY2 0xCDEF89ABUL +#ifdef WHAL_CFG_FLASH_API_MAPPING_STM32F4 +#define whal_Stm32f4Flash_Init whal_Flash_Init +#define whal_Stm32f4Flash_Deinit whal_Flash_Deinit +#define whal_Stm32f4Flash_Lock whal_Flash_Lock +#define whal_Stm32f4Flash_Unlock whal_Flash_Unlock +#define whal_Stm32f4Flash_Read whal_Flash_Read +#define whal_Stm32f4Flash_Write whal_Flash_Write +#define whal_Stm32f4Flash_Erase whal_Flash_Erase +#endif /* WHAL_CFG_FLASH_API_MAPPING_STM32F4 */ + whal_Error whal_Stm32f4Flash_Init(whal_Flash *flashDev) { (void)flashDev; @@ -293,6 +303,7 @@ whal_Error whal_Stm32f4Flash_Ext_SetLatency(whal_Flash *flashDev, return WHAL_SUCCESS; } +#ifndef WHAL_CFG_FLASH_API_MAPPING_STM32F4 const whal_FlashDriver whal_Stm32f4Flash_Driver = { .Init = whal_Stm32f4Flash_Init, .Deinit = whal_Stm32f4Flash_Deinit, @@ -302,3 +313,4 @@ const whal_FlashDriver whal_Stm32f4Flash_Driver = { .Write = whal_Stm32f4Flash_Write, .Erase = whal_Stm32f4Flash_Erase, }; +#endif /* !WHAL_CFG_FLASH_API_MAPPING_STM32F4 */ diff --git a/src/flash/stm32h5_flash.c b/src/flash/stm32h5_flash.c index 674b6be..2e95fa5 100644 --- a/src/flash/stm32h5_flash.c +++ b/src/flash/stm32h5_flash.c @@ -108,6 +108,16 @@ /* Bank size: 1 MB */ #define FLASH_BANK_SIZE (FLASH_SECTORS_PER_BANK * FLASH_SECTOR_SIZE) +#ifdef WHAL_CFG_FLASH_API_MAPPING_STM32H5 +#define whal_Stm32h5Flash_Init whal_Flash_Init +#define whal_Stm32h5Flash_Deinit whal_Flash_Deinit +#define whal_Stm32h5Flash_Lock whal_Flash_Lock +#define whal_Stm32h5Flash_Unlock whal_Flash_Unlock +#define whal_Stm32h5Flash_Read whal_Flash_Read +#define whal_Stm32h5Flash_Write whal_Flash_Write +#define whal_Stm32h5Flash_Erase whal_Flash_Erase +#endif /* WHAL_CFG_FLASH_API_MAPPING_STM32H5 */ + whal_Error whal_Stm32h5Flash_Init(whal_Flash *flashDev) { (void)flashDev; @@ -333,6 +343,7 @@ whal_Error whal_Stm32h5Flash_Ext_SetLatency(whal_Flash *flashDev, return WHAL_SUCCESS; } +#ifndef WHAL_CFG_FLASH_API_MAPPING_STM32H5 const whal_FlashDriver whal_Stm32h5Flash_Driver = { .Init = whal_Stm32h5Flash_Init, .Deinit = whal_Stm32h5Flash_Deinit, @@ -342,3 +353,4 @@ const whal_FlashDriver whal_Stm32h5Flash_Driver = { .Write = whal_Stm32h5Flash_Write, .Erase = whal_Stm32h5Flash_Erase, }; +#endif /* !WHAL_CFG_FLASH_API_MAPPING_STM32H5 */ diff --git a/src/flash/stm32wb_flash.c b/src/flash/stm32wb_flash.c index 50747cd..0c16c45 100644 --- a/src/flash/stm32wb_flash.c +++ b/src/flash/stm32wb_flash.c @@ -88,6 +88,16 @@ #define FLASH_CR_LOCK_Pos 31 /* Lock flash control */ #define FLASH_CR_LOCK_Msk (1UL << FLASH_CR_LOCK_Pos) +#ifdef WHAL_CFG_FLASH_API_MAPPING_STM32WB +#define whal_Stm32wbFlash_Init whal_Flash_Init +#define whal_Stm32wbFlash_Deinit whal_Flash_Deinit +#define whal_Stm32wbFlash_Lock whal_Flash_Lock +#define whal_Stm32wbFlash_Unlock whal_Flash_Unlock +#define whal_Stm32wbFlash_Read whal_Flash_Read +#define whal_Stm32wbFlash_Write whal_Flash_Write +#define whal_Stm32wbFlash_Erase whal_Flash_Erase +#endif /* WHAL_CFG_FLASH_API_MAPPING_STM32WB */ + whal_Error whal_Stm32wbFlash_Init(whal_Flash *flashDev) { (void)flashDev; @@ -294,6 +304,7 @@ whal_Error whal_Stm32wbFlash_Ext_SetLatency(whal_Flash *flashDev, enum whal_Stm3 return WHAL_SUCCESS; } +#ifndef WHAL_CFG_FLASH_API_MAPPING_STM32WB const whal_FlashDriver whal_Stm32wbFlash_Driver = { .Init = whal_Stm32wbFlash_Init, .Deinit = whal_Stm32wbFlash_Deinit, @@ -303,3 +314,4 @@ const whal_FlashDriver whal_Stm32wbFlash_Driver = { .Write = whal_Stm32wbFlash_Write, .Erase = whal_Stm32wbFlash_Erase, }; +#endif /* !WHAL_CFG_FLASH_API_MAPPING_STM32WB */ diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index e4fb23d..2107be9 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -3,38 +3,40 @@ inline whal_Error whal_Gpio_Init(whal_Gpio *gpioDev) { - if (!gpioDev || !gpioDev->driver || !gpioDev->driver->Init) { + if (!gpioDev) return WHAL_EINVAL; - } + if (!gpioDev->driver || !gpioDev->driver->Init) + return WHAL_ENOTIMPL; return gpioDev->driver->Init(gpioDev); } inline whal_Error whal_Gpio_Deinit(whal_Gpio *gpioDev) { - if (!gpioDev || !gpioDev->driver || !gpioDev->driver->Deinit) { + if (!gpioDev) return WHAL_EINVAL; - } + if (!gpioDev->driver || !gpioDev->driver->Deinit) + return WHAL_ENOTIMPL; return gpioDev->driver->Deinit(gpioDev); - } inline whal_Error whal_Gpio_Get(whal_Gpio *gpioDev, size_t pin, size_t *value) { - if (!gpioDev || !gpioDev->driver || !gpioDev->driver->Get || !value) { + if (!gpioDev || !value) return WHAL_EINVAL; - } + if (!gpioDev->driver || !gpioDev->driver->Get) + return WHAL_ENOTIMPL; return gpioDev->driver->Get(gpioDev, pin, value); - } inline whal_Error whal_Gpio_Set(whal_Gpio *gpioDev, size_t pin, size_t value) { - if (!gpioDev || !gpioDev->driver || !gpioDev->driver->Set) { + if (!gpioDev) return WHAL_EINVAL; - } + if (!gpioDev->driver || !gpioDev->driver->Set) + return WHAL_ENOTIMPL; return gpioDev->driver->Set(gpioDev, pin, value); } diff --git a/src/gpio/pic32cz_gpio.c b/src/gpio/pic32cz_gpio.c index 3b61cb9..14b39a7 100644 --- a/src/gpio/pic32cz_gpio.c +++ b/src/gpio/pic32cz_gpio.c @@ -51,6 +51,13 @@ #define PINCFGx_PULLEN_Pos(pin) (2 + (((pin) & 3) * 8)) #define PINCFGx_PULLEN_Msk(pin) (1UL << (PINCFGx_PULLEN_Pos(pin))) +#ifdef WHAL_CFG_GPIO_API_MAPPING_PIC32CZ +#define whal_Pic32czGpio_Init whal_Gpio_Init +#define whal_Pic32czGpio_Deinit whal_Gpio_Deinit +#define whal_Pic32czGpio_Get whal_Gpio_Get +#define whal_Pic32czGpio_Set whal_Gpio_Set +#endif /* WHAL_CFG_GPIO_API_MAPPING_PIC32CZ */ + whal_Error whal_Pic32czGpio_Init(whal_Gpio *gpioDev) { if (!gpioDev || !gpioDev->cfg) { @@ -187,9 +194,11 @@ whal_Error whal_Pic32czGpio_Set(whal_Gpio *gpioDev, size_t pin, size_t value) return WHAL_SUCCESS; } +#ifndef WHAL_CFG_GPIO_API_MAPPING_PIC32CZ const whal_GpioDriver whal_Pic32czGpio_Driver = { .Init = whal_Pic32czGpio_Init, .Deinit = whal_Pic32czGpio_Deinit, .Get = whal_Pic32czGpio_Get, .Set = whal_Pic32czGpio_Set, }; +#endif /* !WHAL_CFG_GPIO_API_MAPPING_PIC32CZ */ diff --git a/src/gpio/stm32wb_gpio.c b/src/gpio/stm32wb_gpio.c index bd335cf..4bbb1f3 100644 --- a/src/gpio/stm32wb_gpio.c +++ b/src/gpio/stm32wb_gpio.c @@ -32,6 +32,16 @@ /* Alternate function high register - 4 bits per pin for pins 8-15 */ #define GPIO_ALTFNH_REG 0x24 +#if defined(WHAL_CFG_GPIO_API_MAPPING_STM32WB) || \ + defined(WHAL_CFG_GPIO_API_MAPPING_STM32F4) || \ + defined(WHAL_CFG_GPIO_API_MAPPING_STM32H5) || \ + defined(WHAL_CFG_GPIO_API_MAPPING_STM32C0) +#define whal_Stm32wbGpio_Init whal_Gpio_Init +#define whal_Stm32wbGpio_Deinit whal_Gpio_Deinit +#define whal_Stm32wbGpio_Get whal_Gpio_Get +#define whal_Stm32wbGpio_Set whal_Gpio_Set +#endif /* WHAL_CFG_GPIO_API_MAPPING */ + /* * Configure alternate function for a pin. * @@ -164,9 +174,14 @@ whal_Error whal_Stm32wbGpio_Set(whal_Gpio *gpioDev, size_t pin, size_t value) return whal_Stm32wbGpio_SetOrGet(gpioDev, pin, &value, 1); } +#if !defined(WHAL_CFG_GPIO_API_MAPPING_STM32WB) && \ + !defined(WHAL_CFG_GPIO_API_MAPPING_STM32F4) && \ + !defined(WHAL_CFG_GPIO_API_MAPPING_STM32H5) && \ + !defined(WHAL_CFG_GPIO_API_MAPPING_STM32C0) const whal_GpioDriver whal_Stm32wbGpio_Driver = { .Init = whal_Stm32wbGpio_Init, .Deinit = whal_Stm32wbGpio_Deinit, .Get = whal_Stm32wbGpio_Get, .Set = whal_Stm32wbGpio_Set, }; +#endif /* !WHAL_CFG_GPIO_API_MAPPING */ diff --git a/src/i2c/stm32wb_i2c.c b/src/i2c/stm32wb_i2c.c index 3ec2c91..c6cde78 100644 --- a/src/i2c/stm32wb_i2c.c +++ b/src/i2c/stm32wb_i2c.c @@ -121,6 +121,14 @@ #define I2C_FMP_TLOW_NS 500 /* Fast mode plus tLOW min */ #define I2C_FMP_THIGH_NS 260 /* Fast mode plus tHIGH min */ +#ifdef WHAL_CFG_I2C_API_MAPPING_STM32WB +#define whal_Stm32wbI2c_Init whal_I2c_Init +#define whal_Stm32wbI2c_Deinit whal_I2c_Deinit +#define whal_Stm32wbI2c_StartCom whal_I2c_StartCom +#define whal_Stm32wbI2c_EndCom whal_I2c_EndCom +#define whal_Stm32wbI2c_Transfer whal_I2c_Transfer +#endif /* WHAL_CFG_I2C_API_MAPPING_STM32WB */ + static uint32_t Stm32wbI2c_CalcTimingr(uint32_t pclk, uint32_t freq) { uint32_t tLowNs, tHighNs; @@ -500,6 +508,7 @@ whal_Error whal_Stm32wbI2c_Transfer(whal_I2c *i2cDev, whal_I2c_Msg *msgs, return WHAL_SUCCESS; } +#ifndef WHAL_CFG_I2C_API_MAPPING_STM32WB const whal_I2cDriver whal_Stm32wbI2c_Driver = { .Init = whal_Stm32wbI2c_Init, .Deinit = whal_Stm32wbI2c_Deinit, @@ -507,3 +516,4 @@ const whal_I2cDriver whal_Stm32wbI2c_Driver = { .EndCom = whal_Stm32wbI2c_EndCom, .Transfer = whal_Stm32wbI2c_Transfer, }; +#endif /* !WHAL_CFG_I2C_API_MAPPING_STM32WB */ diff --git a/src/irq/cortex_m4_nvic.c b/src/irq/cortex_m4_nvic.c index 9685f80..a248bf7 100644 --- a/src/irq/cortex_m4_nvic.c +++ b/src/irq/cortex_m4_nvic.c @@ -14,7 +14,14 @@ #define NVIC_IPR_REG(irq) (0x300 + (((irq) >> 2) << 2)) #define NVIC_IPR_SHIFT(irq) (((irq) & 0x3) << 3) -static whal_Error whal_Nvic_Init(whal_Irq *irqDev) +#ifdef WHAL_CFG_IRQ_API_MAPPING_NVIC +#define whal_Nvic_Init whal_Irq_Init +#define whal_Nvic_Deinit whal_Irq_Deinit +#define whal_Nvic_Enable whal_Irq_Enable +#define whal_Nvic_Disable whal_Irq_Disable +#endif /* WHAL_CFG_IRQ_API_MAPPING_NVIC */ + +whal_Error whal_Nvic_Init(whal_Irq *irqDev) { if (!irqDev) { return WHAL_EINVAL; @@ -23,7 +30,7 @@ static whal_Error whal_Nvic_Init(whal_Irq *irqDev) return WHAL_SUCCESS; } -static whal_Error whal_Nvic_Deinit(whal_Irq *irqDev) +whal_Error whal_Nvic_Deinit(whal_Irq *irqDev) { if (!irqDev) { return WHAL_EINVAL; @@ -32,7 +39,7 @@ static whal_Error whal_Nvic_Deinit(whal_Irq *irqDev) return WHAL_SUCCESS; } -static whal_Error whal_Nvic_Enable(whal_Irq *irqDev, size_t irq, +whal_Error whal_Nvic_Enable(whal_Irq *irqDev, size_t irq, const void *irqCfg) { if (!irqDev) { @@ -56,7 +63,7 @@ static whal_Error whal_Nvic_Enable(whal_Irq *irqDev, size_t irq, return WHAL_SUCCESS; } -static whal_Error whal_Nvic_Disable(whal_Irq *irqDev, size_t irq) +whal_Error whal_Nvic_Disable(whal_Irq *irqDev, size_t irq) { if (!irqDev) { return WHAL_EINVAL; @@ -69,9 +76,11 @@ static whal_Error whal_Nvic_Disable(whal_Irq *irqDev, size_t irq) return WHAL_SUCCESS; } +#ifndef WHAL_CFG_IRQ_API_MAPPING_NVIC const whal_IrqDriver whal_Nvic_Driver = { .Init = whal_Nvic_Init, .Deinit = whal_Nvic_Deinit, .Enable = whal_Nvic_Enable, .Disable = whal_Nvic_Disable, }; +#endif /* !WHAL_CFG_IRQ_API_MAPPING_NVIC */ diff --git a/src/rng/rng.c b/src/rng/rng.c index 2682ab4..df18d97 100644 --- a/src/rng/rng.c +++ b/src/rng/rng.c @@ -4,27 +4,30 @@ inline whal_Error whal_Rng_Init(whal_Rng *rngDev) { - if (!rngDev || !rngDev->driver || !rngDev->driver->Init) { + if (!rngDev) return WHAL_EINVAL; - } + if (!rngDev->driver || !rngDev->driver->Init) + return WHAL_ENOTIMPL; return rngDev->driver->Init(rngDev); } inline whal_Error whal_Rng_Deinit(whal_Rng *rngDev) { - if (!rngDev || !rngDev->driver || !rngDev->driver->Deinit) { + if (!rngDev) return WHAL_EINVAL; - } + if (!rngDev->driver || !rngDev->driver->Deinit) + return WHAL_ENOTIMPL; return rngDev->driver->Deinit(rngDev); } inline whal_Error whal_Rng_Generate(whal_Rng *rngDev, void *rngData, size_t rngDataSz) { - if (!rngDev || !rngDev->driver || !rngDev->driver->Generate || !rngData) { + if (!rngDev || !rngData) return WHAL_EINVAL; - } + if (!rngDev->driver || !rngDev->driver->Generate) + return WHAL_ENOTIMPL; return rngDev->driver->Generate(rngDev, rngData, rngDataSz); } diff --git a/src/rng/stm32h5_rng.c b/src/rng/stm32h5_rng.c index 6879e3c..6bdd126 100644 --- a/src/rng/stm32h5_rng.c +++ b/src/rng/stm32h5_rng.c @@ -55,6 +55,12 @@ /* Magic value required to unlock HTCR writes */ #define RNG_HTCR_MAGIC 0x17590ABCUL +#ifdef WHAL_CFG_RNG_API_MAPPING_STM32H5 +#define whal_Stm32h5Rng_Init whal_Rng_Init +#define whal_Stm32h5Rng_Deinit whal_Rng_Deinit +#define whal_Stm32h5Rng_Generate whal_Rng_Generate +#endif /* WHAL_CFG_RNG_API_MAPPING_STM32H5 */ + whal_Error whal_Stm32h5Rng_Init(whal_Rng *rngDev) { whal_Stm32h5Rng_Cfg *cfg; @@ -158,8 +164,10 @@ whal_Error whal_Stm32h5Rng_Generate(whal_Rng *rngDev, void *rngData, return err; } +#ifndef WHAL_CFG_RNG_API_MAPPING_STM32H5 const whal_RngDriver whal_Stm32h5Rng_Driver = { .Init = whal_Stm32h5Rng_Init, .Deinit = whal_Stm32h5Rng_Deinit, .Generate = whal_Stm32h5Rng_Generate, }; +#endif /* !WHAL_CFG_RNG_API_MAPPING_STM32H5 */ diff --git a/src/rng/stm32wb_rng.c b/src/rng/stm32wb_rng.c index 1c2a36c..5cd1218 100644 --- a/src/rng/stm32wb_rng.c +++ b/src/rng/stm32wb_rng.c @@ -41,6 +41,12 @@ /* Data Register - 32-bit random value */ #define RNG_DR_REG 0x08 +#ifdef WHAL_CFG_RNG_API_MAPPING_STM32WB +#define whal_Stm32wbRng_Init whal_Rng_Init +#define whal_Stm32wbRng_Deinit whal_Rng_Deinit +#define whal_Stm32wbRng_Generate whal_Rng_Generate +#endif /* WHAL_CFG_RNG_API_MAPPING_STM32WB */ + whal_Error whal_Stm32wbRng_Init(whal_Rng *rngDev) { if (!rngDev || !rngDev->cfg) { @@ -124,8 +130,10 @@ whal_Error whal_Stm32wbRng_Generate(whal_Rng *rngDev, void *rngData, size_t rngD return err; } +#ifndef WHAL_CFG_RNG_API_MAPPING_STM32WB const whal_RngDriver whal_Stm32wbRng_Driver = { .Init = whal_Stm32wbRng_Init, .Deinit = whal_Stm32wbRng_Deinit, .Generate = whal_Stm32wbRng_Generate, }; +#endif /* !WHAL_CFG_RNG_API_MAPPING_STM32WB */ diff --git a/src/sensor/imu/bmi270_sensor.c b/src/sensor/imu/bmi270_sensor.c index a310ad6..f98c0e5 100644 --- a/src/sensor/imu/bmi270_sensor.c +++ b/src/sensor/imu/bmi270_sensor.c @@ -33,6 +33,12 @@ /* Number of raw data bytes: accel (6) + gyro (6) */ #define BMI270_DATA_LEN 12 +#ifdef WHAL_CFG_SENSOR_API_MAPPING_BMI270 +#define whal_Bmi270_Init whal_Sensor_Init +#define whal_Bmi270_Deinit whal_Sensor_Deinit +#define whal_Bmi270_Read whal_Sensor_Read +#endif /* WHAL_CFG_SENSOR_API_MAPPING_BMI270 */ + whal_Error whal_Bmi270_Init(whal_Sensor *dev) { whal_Bmi270_Cfg *cfg; @@ -210,8 +216,10 @@ whal_Error whal_Bmi270_Read(whal_Sensor *dev, void *data) return WHAL_SUCCESS; } +#ifndef WHAL_CFG_SENSOR_API_MAPPING_BMI270 const whal_SensorDriver whal_Bmi270_Driver = { .Init = whal_Bmi270_Init, .Deinit = whal_Bmi270_Deinit, .Read = whal_Bmi270_Read, }; +#endif /* !WHAL_CFG_SENSOR_API_MAPPING_BMI270 */ diff --git a/src/spi/spi.c b/src/spi/spi.c index a259194..0394b76 100644 --- a/src/spi/spi.c +++ b/src/spi/spi.c @@ -4,45 +4,50 @@ inline whal_Error whal_Spi_Init(whal_Spi *spiDev) { - if (!spiDev || !spiDev->driver || !spiDev->driver->Init) { + if (!spiDev) return WHAL_EINVAL; - } + if (!spiDev->driver || !spiDev->driver->Init) + return WHAL_ENOTIMPL; return spiDev->driver->Init(spiDev); } inline whal_Error whal_Spi_Deinit(whal_Spi *spiDev) { - if (!spiDev || !spiDev->driver || !spiDev->driver->Deinit) { + if (!spiDev) return WHAL_EINVAL; - } + if (!spiDev->driver || !spiDev->driver->Deinit) + return WHAL_ENOTIMPL; return spiDev->driver->Deinit(spiDev); } inline whal_Error whal_Spi_StartCom(whal_Spi *spiDev, whal_Spi_ComCfg *comCfg) { - if (!spiDev || !spiDev->driver || !spiDev->driver->StartCom || !comCfg) { + if (!spiDev || !comCfg) return WHAL_EINVAL; - } + if (!spiDev->driver || !spiDev->driver->StartCom) + return WHAL_ENOTIMPL; return spiDev->driver->StartCom(spiDev, comCfg); } inline whal_Error whal_Spi_EndCom(whal_Spi *spiDev) { - if (!spiDev || !spiDev->driver || !spiDev->driver->EndCom) { + if (!spiDev) return WHAL_EINVAL; - } + if (!spiDev->driver || !spiDev->driver->EndCom) + return WHAL_ENOTIMPL; return spiDev->driver->EndCom(spiDev); } inline whal_Error whal_Spi_SendRecv(whal_Spi *spiDev, const void *tx, size_t txLen, void *rx, size_t rxLen) { - if (!spiDev || !spiDev->driver || !spiDev->driver->SendRecv) { + if (!spiDev) return WHAL_EINVAL; - } + if (!spiDev->driver || !spiDev->driver->SendRecv) + return WHAL_ENOTIMPL; return spiDev->driver->SendRecv(spiDev, tx, txLen, rx, rxLen); } diff --git a/src/spi/stm32f4_spi.c b/src/spi/stm32f4_spi.c index 16e1dd4..4a1ba37 100644 --- a/src/spi/stm32f4_spi.c +++ b/src/spi/stm32f4_spi.c @@ -56,6 +56,14 @@ /* Data Register - 8/16-bit access */ #define SPI_DR_REG 0x0C +#ifdef WHAL_CFG_SPI_API_MAPPING_STM32F4 +#define whal_Stm32f4Spi_Init whal_Spi_Init +#define whal_Stm32f4Spi_Deinit whal_Spi_Deinit +#define whal_Stm32f4Spi_StartCom whal_Spi_StartCom +#define whal_Stm32f4Spi_EndCom whal_Spi_EndCom +#define whal_Stm32f4Spi_SendRecv whal_Spi_SendRecv +#endif /* WHAL_CFG_SPI_API_MAPPING_STM32F4 */ + /* * Calculate the baud rate prescaler index for a target baud rate. * @@ -219,6 +227,7 @@ whal_Error whal_Stm32f4Spi_SendRecv(whal_Spi *spiDev, cfg->timeout); } +#ifndef WHAL_CFG_SPI_API_MAPPING_STM32F4 const whal_SpiDriver whal_Stm32f4Spi_Driver = { .Init = whal_Stm32f4Spi_Init, .Deinit = whal_Stm32f4Spi_Deinit, @@ -226,3 +235,4 @@ const whal_SpiDriver whal_Stm32f4Spi_Driver = { .EndCom = whal_Stm32f4Spi_EndCom, .SendRecv = whal_Stm32f4Spi_SendRecv, }; +#endif /* !WHAL_CFG_SPI_API_MAPPING_STM32F4 */ diff --git a/src/spi/stm32h5_spi.c b/src/spi/stm32h5_spi.c index 150f2d0..9c2ccae 100644 --- a/src/spi/stm32h5_spi.c +++ b/src/spi/stm32h5_spi.c @@ -89,6 +89,14 @@ #define SPI_TXDR_REG 0x020 #define SPI_RXDR_REG 0x030 +#ifdef WHAL_CFG_SPI_API_MAPPING_STM32H5 +#define whal_Stm32h5Spi_Init whal_Spi_Init +#define whal_Stm32h5Spi_Deinit whal_Spi_Deinit +#define whal_Stm32h5Spi_StartCom whal_Spi_StartCom +#define whal_Stm32h5Spi_EndCom whal_Spi_EndCom +#define whal_Stm32h5Spi_SendRecv whal_Spi_SendRecv +#endif /* WHAL_CFG_SPI_API_MAPPING_STM32H5 */ + /* * Calculate the baud rate prescaler index for a target baud rate. * SPI baud rate = fPCLK / (2 ^ (MBR + 1)) @@ -269,6 +277,7 @@ whal_Error whal_Stm32h5Spi_SendRecv(whal_Spi *spiDev, return WHAL_SUCCESS; } +#ifndef WHAL_CFG_SPI_API_MAPPING_STM32H5 const whal_SpiDriver whal_Stm32h5Spi_Driver = { .Init = whal_Stm32h5Spi_Init, .Deinit = whal_Stm32h5Spi_Deinit, @@ -276,3 +285,4 @@ const whal_SpiDriver whal_Stm32h5Spi_Driver = { .EndCom = whal_Stm32h5Spi_EndCom, .SendRecv = whal_Stm32h5Spi_SendRecv, }; +#endif /* !WHAL_CFG_SPI_API_MAPPING_STM32H5 */ diff --git a/src/spi/stm32wb_spi.c b/src/spi/stm32wb_spi.c index b08b8d4..c5e2641 100644 --- a/src/spi/stm32wb_spi.c +++ b/src/spi/stm32wb_spi.c @@ -60,6 +60,15 @@ #define SPI_DR_Pos 0 #define SPI_DR_Msk (WHAL_BITMASK(8) << SPI_DR_Pos) +#if defined(WHAL_CFG_SPI_API_MAPPING_STM32WB) || \ + defined(WHAL_CFG_SPI_API_MAPPING_STM32C0) +#define whal_Stm32wbSpi_Init whal_Spi_Init +#define whal_Stm32wbSpi_Deinit whal_Spi_Deinit +#define whal_Stm32wbSpi_StartCom whal_Spi_StartCom +#define whal_Stm32wbSpi_EndCom whal_Spi_EndCom +#define whal_Stm32wbSpi_SendRecv whal_Spi_SendRecv +#endif /* WHAL_CFG_SPI_API_MAPPING */ + /* * Calculate the baud rate prescaler index for a target baud rate. * @@ -239,6 +248,8 @@ whal_Error whal_Stm32wbSpi_SendRecv(whal_Spi *spiDev, cfg->timeout); } +#if !defined(WHAL_CFG_SPI_API_MAPPING_STM32WB) && \ + !defined(WHAL_CFG_SPI_API_MAPPING_STM32C0) const whal_SpiDriver whal_Stm32wbSpi_Driver = { .Init = whal_Stm32wbSpi_Init, .Deinit = whal_Stm32wbSpi_Deinit, @@ -246,3 +257,4 @@ const whal_SpiDriver whal_Stm32wbSpi_Driver = { .EndCom = whal_Stm32wbSpi_EndCom, .SendRecv = whal_Stm32wbSpi_SendRecv, }; +#endif /* !WHAL_CFG_SPI_API_MAPPING */ diff --git a/src/supply/pic32cz_supc.c b/src/supply/pic32cz_supc.c index 9c31d1e..f57126b 100644 --- a/src/supply/pic32cz_supc.c +++ b/src/supply/pic32cz_supc.c @@ -6,6 +6,12 @@ #define VREGCTRL_AVREGEN_Pos 16 #define VREGCTRL_AVREGEN_Msk (WHAL_BITMASK(3) << VREGCTRL_AVREGEN_Pos) +#ifdef WHAL_CFG_SUPPLY_API_MAPPING_PIC32CZ +#define whal_Pic32czSupc_Init whal_Supply_Init +#define whal_Pic32czSupc_Deinit whal_Supply_Deinit +#define whal_Pic32czSupc_Enable whal_Supply_Enable +#define whal_Pic32czSupc_Disable whal_Supply_Disable +#endif /* WHAL_CFG_SUPPLY_API_MAPPING_PIC32CZ */ whal_Error whal_Pic32czSupc_Init(whal_Supply *supplyCtrl) { @@ -45,9 +51,11 @@ whal_Error whal_Pic32czSupc_Disable(whal_Supply *supplyCtrl, void *supply) return WHAL_SUCCESS; } +#ifndef WHAL_CFG_SUPPLY_API_MAPPING_PIC32CZ const whal_SupplyDriver whal_Pic32czSupc_Driver = { .Init = whal_Pic32czSupc_Init, .Deinit = whal_Pic32czSupc_Deinit, .Enable = whal_Pic32czSupc_Enable, .Disable = whal_Pic32czSupc_Disable, }; +#endif /* !WHAL_CFG_SUPPLY_API_MAPPING_PIC32CZ */ diff --git a/src/timer/systick.c b/src/timer/systick.c index 5dc5917..f4df8d3 100644 --- a/src/timer/systick.c +++ b/src/timer/systick.c @@ -20,7 +20,15 @@ #define SYSTICK_RVR_RELOAD_Pos 0 #define SYSTICK_RVR_RELOAD_Msk (WHAL_BITMASK(24) << SYSTICK_RVR_RELOAD_Pos) -whal_Error SysTick_Init(whal_Timer *timerDev) +#ifdef WHAL_CFG_TIMER_API_MAPPING_SYSTICK +#define whal_SysTick_Init whal_Timer_Init +#define whal_SysTick_Deinit whal_Timer_Deinit +#define whal_SysTick_Start whal_Timer_Start +#define whal_SysTick_Stop whal_Timer_Stop +#define whal_SysTick_Reset whal_Timer_Reset +#endif /* WHAL_CFG_TIMER_API_MAPPING_SYSTICK */ + +whal_Error whal_SysTick_Init(whal_Timer *timerDev) { whal_SysTick_Cfg *cfg; const whal_Regmap *reg = &timerDev->regmap; @@ -43,12 +51,12 @@ whal_Error SysTick_Init(whal_Timer *timerDev) return WHAL_SUCCESS; } -whal_Error SysTick_Deinit(whal_Timer *timerDev) +whal_Error whal_SysTick_Deinit(whal_Timer *timerDev) { return WHAL_SUCCESS; } -whal_Error SysTick_Start(whal_Timer *timerDev) +whal_Error whal_SysTick_Start(whal_Timer *timerDev) { const whal_Regmap *reg = &timerDev->regmap; @@ -62,7 +70,7 @@ whal_Error SysTick_Start(whal_Timer *timerDev) return WHAL_SUCCESS; } -whal_Error SysTick_Stop(whal_Timer *timerDev) +whal_Error whal_SysTick_Stop(whal_Timer *timerDev) { const whal_Regmap *reg = &timerDev->regmap; @@ -76,16 +84,18 @@ whal_Error SysTick_Stop(whal_Timer *timerDev) return WHAL_SUCCESS; } -whal_Error SysTick_Reset(whal_Timer *timerDev) +whal_Error whal_SysTick_Reset(whal_Timer *timerDev) { return WHAL_SUCCESS; } +#ifndef WHAL_CFG_TIMER_API_MAPPING_SYSTICK const whal_TimerDriver whal_SysTick_Driver = { - .Init = SysTick_Init, - .Deinit = SysTick_Deinit, - .Start = SysTick_Start, - .Stop = SysTick_Stop, - .Reset = SysTick_Reset, + .Init = whal_SysTick_Init, + .Deinit = whal_SysTick_Deinit, + .Start = whal_SysTick_Start, + .Stop = whal_SysTick_Stop, + .Reset = whal_SysTick_Reset, }; +#endif /* !WHAL_CFG_TIMER_API_MAPPING_SYSTICK */ diff --git a/src/timer/timer.c b/src/timer/timer.c index c4e1933..c8ef860 100644 --- a/src/timer/timer.c +++ b/src/timer/timer.c @@ -5,45 +5,50 @@ inline whal_Error whal_Timer_Init(whal_Timer *timerDev) { - if (!timerDev || !timerDev->driver || !timerDev->driver->Init) { + if (!timerDev) return WHAL_EINVAL; - } + if (!timerDev->driver || !timerDev->driver->Init) + return WHAL_ENOTIMPL; return timerDev->driver->Init(timerDev); } inline whal_Error whal_Timer_Deinit(whal_Timer *timerDev) { - if (!timerDev || !timerDev->driver || !timerDev->driver->Deinit) { + if (!timerDev) return WHAL_EINVAL; - } + if (!timerDev->driver || !timerDev->driver->Deinit) + return WHAL_ENOTIMPL; return timerDev->driver->Deinit(timerDev); } inline whal_Error whal_Timer_Start(whal_Timer *timerDev) { - if (!timerDev || !timerDev->driver || !timerDev->driver->Start) { + if (!timerDev) return WHAL_EINVAL; - } + if (!timerDev->driver || !timerDev->driver->Start) + return WHAL_ENOTIMPL; return timerDev->driver->Start(timerDev); } inline whal_Error whal_Timer_Stop(whal_Timer *timerDev) { - if (!timerDev || !timerDev->driver || !timerDev->driver->Stop) { + if (!timerDev) return WHAL_EINVAL; - } + if (!timerDev->driver || !timerDev->driver->Stop) + return WHAL_ENOTIMPL; return timerDev->driver->Stop(timerDev); } inline whal_Error whal_Timer_Reset(whal_Timer *timerDev) { - if (!timerDev || !timerDev->driver || !timerDev->driver->Reset) { + if (!timerDev) return WHAL_EINVAL; - } + if (!timerDev->driver || !timerDev->driver->Reset) + return WHAL_ENOTIMPL; return timerDev->driver->Reset(timerDev); } diff --git a/src/uart/pic32cz_uart.c b/src/uart/pic32cz_uart.c index d3e9b47..c87ded4 100644 --- a/src/uart/pic32cz_uart.c +++ b/src/uart/pic32cz_uart.c @@ -159,6 +159,15 @@ #define USART_DATA_Pos 0 #define USART_DATA_Msk (WHAL_BITMASK(9) << USART_DATA_Pos) +#ifdef WHAL_CFG_UART_API_MAPPING_PIC32CZ +#define whal_Pic32czUart_Init whal_Uart_Init +#define whal_Pic32czUart_Deinit whal_Uart_Deinit +#define whal_Pic32czUart_Send whal_Uart_Send +#define whal_Pic32czUart_Recv whal_Uart_Recv +#define whal_Pic32czUart_SendAsync whal_Uart_SendAsync +#define whal_Pic32czUart_RecvAsync whal_Uart_RecvAsync +#endif /* WHAL_CFG_UART_API_MAPPING_PIC32CZ */ + whal_Error whal_Pic32czUart_Init(whal_Uart *uartDev) { whal_Error err; @@ -351,9 +360,29 @@ whal_Error whal_Pic32czUart_Recv(whal_Uart *uartDev, void *data, size_t dataSz) return WHAL_SUCCESS; } +whal_Error whal_Pic32czUart_SendAsync(whal_Uart *uartDev, const void *data, size_t dataSz) +{ + (void)dataSz; + if (!uartDev || !data) + return WHAL_EINVAL; + return WHAL_ENOTIMPL; +} + +whal_Error whal_Pic32czUart_RecvAsync(whal_Uart *uartDev, void *data, size_t dataSz) +{ + (void)dataSz; + if (!uartDev || !data) + return WHAL_EINVAL; + return WHAL_ENOTIMPL; +} + +#ifndef WHAL_CFG_UART_API_MAPPING_PIC32CZ const whal_UartDriver whal_Pic32czUart_Driver = { .Init = whal_Pic32czUart_Init, .Deinit = whal_Pic32czUart_Deinit, .Send = whal_Pic32czUart_Send, .Recv = whal_Pic32czUart_Recv, + .SendAsync = whal_Pic32czUart_SendAsync, + .RecvAsync = whal_Pic32czUart_RecvAsync, }; +#endif /* !WHAL_CFG_UART_API_MAPPING_PIC32CZ */ diff --git a/src/uart/stm32f4_uart.c b/src/uart/stm32f4_uart.c index f5905b4..d35e485 100644 --- a/src/uart/stm32f4_uart.c +++ b/src/uart/stm32f4_uart.c @@ -45,6 +45,15 @@ #define UART_CR1_UE_Pos 13 /* USART enable */ #define UART_CR1_UE_Msk (1UL << UART_CR1_UE_Pos) +#ifdef WHAL_CFG_UART_API_MAPPING_STM32F4 +#define whal_Stm32f4Uart_Init whal_Uart_Init +#define whal_Stm32f4Uart_Deinit whal_Uart_Deinit +#define whal_Stm32f4Uart_Send whal_Uart_Send +#define whal_Stm32f4Uart_Recv whal_Uart_Recv +#define whal_Stm32f4Uart_SendAsync whal_Uart_SendAsync +#define whal_Stm32f4Uart_RecvAsync whal_Uart_RecvAsync +#endif /* WHAL_CFG_UART_API_MAPPING_STM32F4 */ + whal_Error whal_Stm32f4Uart_Init(whal_Uart *uartDev) { whal_Stm32f4Uart_Cfg *cfg; @@ -157,9 +166,29 @@ whal_Error whal_Stm32f4Uart_Recv(whal_Uart *uartDev, void *data, size_t dataSz) return WHAL_SUCCESS; } +whal_Error whal_Stm32f4Uart_SendAsync(whal_Uart *uartDev, const void *data, size_t dataSz) +{ + (void)dataSz; + if (!uartDev || !data) + return WHAL_EINVAL; + return WHAL_ENOTIMPL; +} + +whal_Error whal_Stm32f4Uart_RecvAsync(whal_Uart *uartDev, void *data, size_t dataSz) +{ + (void)dataSz; + if (!uartDev || !data) + return WHAL_EINVAL; + return WHAL_ENOTIMPL; +} + +#ifndef WHAL_CFG_UART_API_MAPPING_STM32F4 const whal_UartDriver whal_Stm32f4Uart_Driver = { .Init = whal_Stm32f4Uart_Init, .Deinit = whal_Stm32f4Uart_Deinit, .Send = whal_Stm32f4Uart_Send, + .SendAsync = whal_Stm32f4Uart_SendAsync, + .RecvAsync = whal_Stm32f4Uart_RecvAsync, .Recv = whal_Stm32f4Uart_Recv, }; +#endif /* !WHAL_CFG_UART_API_MAPPING_STM32F4 */ diff --git a/src/uart/stm32wb_uart.c b/src/uart/stm32wb_uart.c index 75f4b8a..6789872 100644 --- a/src/uart/stm32wb_uart.c +++ b/src/uart/stm32wb_uart.c @@ -38,6 +38,22 @@ #define UART_TDR_Pos 0 #define UART_TDR_Msk (WHAL_BITMASK(9) << UART_TDR_Pos) +#if defined(WHAL_CFG_UART_API_MAPPING_STM32WB) || \ + defined(WHAL_CFG_UART_API_MAPPING_STM32H5) || \ + defined(WHAL_CFG_UART_API_MAPPING_STM32C0) +#define whal_Stm32wbUart_Init whal_Uart_Init +#define whal_Stm32wbUart_Deinit whal_Uart_Deinit +#define whal_Stm32wbUart_Send whal_Uart_Send +#define whal_Stm32wbUart_Recv whal_Uart_Recv +#define whal_Stm32wbUart_SendAsync whal_Uart_SendAsync +#define whal_Stm32wbUart_RecvAsync whal_Uart_RecvAsync +#endif /* WHAL_CFG_UART_API_MAPPING */ + +#ifdef WHAL_CFG_UART_API_MAPPING_STM32WB_DMA +#define whal_Stm32wbUart_Init whal_Uart_Init +#define whal_Stm32wbUart_Deinit whal_Uart_Deinit +#endif /* WHAL_CFG_UART_API_MAPPING_STM32WB_DMA */ + whal_Error whal_Stm32wbUart_Init(whal_Uart *uartDev) { whal_Stm32wbUart_Cfg *cfg; @@ -145,10 +161,33 @@ whal_Error whal_Stm32wbUart_Recv(whal_Uart *uartDev, void *data, size_t dataSz) return WHAL_SUCCESS; } +whal_Error whal_Stm32wbUart_SendAsync(whal_Uart *uartDev, const void *data, size_t dataSz) +{ + (void)dataSz; + if (!uartDev || !data) + return WHAL_EINVAL; + return WHAL_ENOTIMPL; +} + +whal_Error whal_Stm32wbUart_RecvAsync(whal_Uart *uartDev, void *data, size_t dataSz) +{ + (void)dataSz; + if (!uartDev || !data) + return WHAL_EINVAL; + return WHAL_ENOTIMPL; +} + +#if !defined(WHAL_CFG_UART_API_MAPPING_STM32WB) && \ + !defined(WHAL_CFG_UART_API_MAPPING_STM32WB_DMA) && \ + !defined(WHAL_CFG_UART_API_MAPPING_STM32H5) && \ + !defined(WHAL_CFG_UART_API_MAPPING_STM32C0) const whal_UartDriver whal_Stm32wbUart_Driver = { .Init = whal_Stm32wbUart_Init, .Deinit = whal_Stm32wbUart_Deinit, .Send = whal_Stm32wbUart_Send, .Recv = whal_Stm32wbUart_Recv, + .SendAsync = whal_Stm32wbUart_SendAsync, + .RecvAsync = whal_Stm32wbUart_RecvAsync, }; +#endif /* !WHAL_CFG_UART_API_MAPPING */ diff --git a/src/uart/stm32wb_uart_dma.c b/src/uart/stm32wb_uart_dma.c index c6a4bdb..ac9ad42 100644 --- a/src/uart/stm32wb_uart_dma.c +++ b/src/uart/stm32wb_uart_dma.c @@ -22,6 +22,19 @@ #define UART_TDR_REG 0x28 +#if defined(WHAL_CFG_UART_API_MAPPING_STM32WB) || \ + defined(WHAL_CFG_UART_API_MAPPING_STM32WB_DMA) +#define whal_Stm32wbUart_Init whal_Uart_Init +#define whal_Stm32wbUart_Deinit whal_Uart_Deinit +#endif + +#ifdef WHAL_CFG_UART_API_MAPPING_STM32WB_DMA +#define whal_Stm32wbUartDma_Send whal_Uart_Send +#define whal_Stm32wbUartDma_Recv whal_Uart_Recv +#define whal_Stm32wbUartDma_SendAsync whal_Uart_SendAsync +#define whal_Stm32wbUartDma_RecvAsync whal_Uart_RecvAsync +#endif /* WHAL_CFG_UART_API_MAPPING_STM32WB_DMA */ + whal_Error whal_Stm32wbUartDma_SendAsync(whal_Uart *uartDev, const void *data, size_t dataSz) { @@ -190,6 +203,7 @@ void whal_Stm32wbUartDma_RxCallback(void *ctx, whal_Error err) cfg->rxResult = err; } +#ifndef WHAL_CFG_UART_API_MAPPING_STM32WB_DMA const whal_UartDriver whal_Stm32wbUartDma_Driver = { .Init = whal_Stm32wbUart_Init, .Deinit = whal_Stm32wbUart_Deinit, @@ -198,3 +212,5 @@ const whal_UartDriver whal_Stm32wbUartDma_Driver = { .SendAsync = whal_Stm32wbUartDma_SendAsync, .RecvAsync = whal_Stm32wbUartDma_RecvAsync, }; +#endif /* !WHAL_CFG_UART_API_MAPPING_STM32WB_DMA */ + diff --git a/src/uart/uart.c b/src/uart/uart.c index a227459..8ed7a5b 100644 --- a/src/uart/uart.c +++ b/src/uart/uart.c @@ -4,54 +4,60 @@ inline whal_Error whal_Uart_Init(whal_Uart *uartDev) { - if (!uartDev || !uartDev->driver || !uartDev->driver->Init) { + if (!uartDev) return WHAL_EINVAL; - } + if (!uartDev->driver || !uartDev->driver->Init) + return WHAL_ENOTIMPL; return uartDev->driver->Init(uartDev); } inline whal_Error whal_Uart_Deinit(whal_Uart *uartDev) { - if (!uartDev || !uartDev->driver || !uartDev->driver->Deinit) { + if (!uartDev) return WHAL_EINVAL; - } + if (!uartDev->driver || !uartDev->driver->Deinit) + return WHAL_ENOTIMPL; return uartDev->driver->Deinit(uartDev); } inline whal_Error whal_Uart_Send(whal_Uart *uartDev, const void *data, size_t dataSz) { - if (!uartDev || !uartDev->driver || !uartDev->driver->Send || !data) { + if (!uartDev || !data) return WHAL_EINVAL; - } + if (!uartDev->driver || !uartDev->driver->Send) + return WHAL_ENOTIMPL; return uartDev->driver->Send(uartDev, data, dataSz); } inline whal_Error whal_Uart_Recv(whal_Uart *uartDev, void *data, size_t dataSz) { - if (!uartDev || !uartDev->driver || !uartDev->driver->Recv || !data) { + if (!uartDev || !data) return WHAL_EINVAL; - } + if (!uartDev->driver || !uartDev->driver->Recv) + return WHAL_ENOTIMPL; return uartDev->driver->Recv(uartDev, data, dataSz); } inline whal_Error whal_Uart_SendAsync(whal_Uart *uartDev, const void *data, size_t dataSz) { - if (!uartDev || !uartDev->driver || !uartDev->driver->SendAsync || !data) { + if (!uartDev || !data) return WHAL_EINVAL; - } + if (!uartDev->driver || !uartDev->driver->SendAsync) + return WHAL_ENOTIMPL; return uartDev->driver->SendAsync(uartDev, data, dataSz); } inline whal_Error whal_Uart_RecvAsync(whal_Uart *uartDev, void *data, size_t dataSz) { - if (!uartDev || !uartDev->driver || !uartDev->driver->RecvAsync || !data) { + if (!uartDev || !data) return WHAL_EINVAL; - } + if (!uartDev->driver || !uartDev->driver->RecvAsync) + return WHAL_ENOTIMPL; return uartDev->driver->RecvAsync(uartDev, data, dataSz); } diff --git a/src/watchdog/stm32wb_iwdg.c b/src/watchdog/stm32wb_iwdg.c index 1cb40e8..ecb08d5 100644 --- a/src/watchdog/stm32wb_iwdg.c +++ b/src/watchdog/stm32wb_iwdg.c @@ -34,6 +34,12 @@ #define IWDG_SR_RVU_Pos 1 /* Reload value update */ #define IWDG_SR_RVU_Msk (1UL << IWDG_SR_RVU_Pos) +#ifdef WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_IWDG +#define whal_Stm32wbIwdg_Init whal_Watchdog_Init +#define whal_Stm32wbIwdg_Deinit whal_Watchdog_Deinit +#define whal_Stm32wbIwdg_Refresh whal_Watchdog_Refresh +#endif /* WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_IWDG */ + whal_Error whal_Stm32wbIwdg_Init(whal_Watchdog *wdgDev) { const whal_Regmap *reg; @@ -93,8 +99,10 @@ whal_Error whal_Stm32wbIwdg_Refresh(whal_Watchdog *wdgDev) return WHAL_SUCCESS; } +#ifndef WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_IWDG const whal_WatchdogDriver whal_Stm32wbIwdg_Driver = { .Init = whal_Stm32wbIwdg_Init, .Deinit = whal_Stm32wbIwdg_Deinit, .Refresh = whal_Stm32wbIwdg_Refresh, }; +#endif /* !WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_IWDG */ diff --git a/src/watchdog/stm32wb_wwdg.c b/src/watchdog/stm32wb_wwdg.c index 520074b..55eede6 100644 --- a/src/watchdog/stm32wb_wwdg.c +++ b/src/watchdog/stm32wb_wwdg.c @@ -24,6 +24,12 @@ #define CFR_WDGTB_Pos 11 #define CFR_WDGTB_Msk (WHAL_BITMASK(3) << CFR_WDGTB_Pos) +#ifdef WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_WWDG +#define whal_Stm32wbWwdg_Init whal_Watchdog_Init +#define whal_Stm32wbWwdg_Deinit whal_Watchdog_Deinit +#define whal_Stm32wbWwdg_Refresh whal_Watchdog_Refresh +#endif /* WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_WWDG */ + whal_Error whal_Stm32wbWwdg_Init(whal_Watchdog *wdgDev) { size_t base; @@ -74,8 +80,10 @@ whal_Error whal_Stm32wbWwdg_Refresh(whal_Watchdog *wdgDev) return WHAL_SUCCESS; } +#ifndef WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_WWDG const whal_WatchdogDriver whal_Stm32wbWwdg_Driver = { .Init = whal_Stm32wbWwdg_Init, .Deinit = whal_Stm32wbWwdg_Deinit, .Refresh = whal_Stm32wbWwdg_Refresh, }; +#endif /* !WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_WWDG */ diff --git a/tests/core/test_dispatch.c b/tests/core/test_dispatch.c index 4a9f6b7..5385b7f 100644 --- a/tests/core/test_dispatch.c +++ b/tests/core/test_dispatch.c @@ -111,14 +111,14 @@ static void Test_Clock_NullDev(void) static void Test_Clock_NullDriver(void) { whal_Clock dev = { .driver = NULL }; - WHAL_ASSERT_EQ(whal_Clock_Init(&dev), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Clock_Init(&dev), WHAL_ENOTIMPL); } static void Test_Clock_NullVtableEntry(void) { static const whal_ClockDriver emptyDriver = { 0 }; whal_Clock dev = { .driver = &emptyDriver }; - WHAL_ASSERT_EQ(whal_Clock_Init(&dev), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Clock_Init(&dev), WHAL_ENOTIMPL); } static void Test_Clock_ValidDispatch(void) @@ -143,7 +143,7 @@ static void Test_Gpio_NullDev(void) static void Test_Gpio_NullDriver(void) { whal_Gpio dev = { .driver = NULL }; - WHAL_ASSERT_EQ(whal_Gpio_Init(&dev), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Gpio_Init(&dev), WHAL_ENOTIMPL); } static void Test_Gpio_ValidDispatch(void) @@ -171,15 +171,15 @@ static void Test_Uart_NullDev(void) static void Test_Uart_NullDriver(void) { whal_Uart dev = { .driver = NULL }; - WHAL_ASSERT_EQ(whal_Uart_Init(&dev), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Uart_Init(&dev), WHAL_ENOTIMPL); } static void Test_Uart_NullAsyncVtable(void) { whal_Uart dev = { .driver = &mockUartDriver }; uint8_t buf[1] = {0}; - WHAL_ASSERT_EQ(whal_Uart_SendAsync(&dev, buf, 1), WHAL_EINVAL); - WHAL_ASSERT_EQ(whal_Uart_RecvAsync(&dev, buf, 1), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Uart_SendAsync(&dev, buf, 1), WHAL_ENOTIMPL); + WHAL_ASSERT_EQ(whal_Uart_RecvAsync(&dev, buf, 1), WHAL_ENOTIMPL); } static void Test_Uart_ValidDispatch(void) @@ -211,7 +211,7 @@ static void Test_Flash_NullDev(void) static void Test_Flash_NullDriver(void) { whal_Flash dev = { .driver = NULL }; - WHAL_ASSERT_EQ(whal_Flash_Init(&dev), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Flash_Init(&dev), WHAL_ENOTIMPL); } static void Test_Flash_ValidDispatch(void) @@ -239,7 +239,7 @@ static void Test_Timer_NullDev(void) static void Test_Timer_NullDriver(void) { whal_Timer dev = { .driver = NULL }; - WHAL_ASSERT_EQ(whal_Timer_Init(&dev), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Timer_Init(&dev), WHAL_ENOTIMPL); } static void Test_Timer_ValidDispatch(void) @@ -264,7 +264,7 @@ static void Test_Rng_NullDev(void) static void Test_Rng_NullDriver(void) { whal_Rng dev = { .driver = NULL }; - WHAL_ASSERT_EQ(whal_Rng_Init(&dev), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Rng_Init(&dev), WHAL_ENOTIMPL); } static void Test_Rng_ValidDispatch(void) @@ -306,7 +306,7 @@ static void Test_Spi_NullDev(void) static void Test_Spi_NullDriver(void) { whal_Spi dev = { .driver = NULL }; - WHAL_ASSERT_EQ(whal_Spi_Init(&dev), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Spi_Init(&dev), WHAL_ENOTIMPL); } static void Test_Spi_ValidDispatch(void) @@ -350,7 +350,7 @@ static void Test_Block_NullDev(void) static void Test_Block_NullDriver(void) { whal_Block dev = { .driver = NULL }; - WHAL_ASSERT_EQ(whal_Block_Init(&dev), WHAL_EINVAL); + WHAL_ASSERT_EQ(whal_Block_Init(&dev), WHAL_ENOTIMPL); } static void Test_Block_ValidDispatch(void) diff --git a/wolfHAL/block/block.h b/wolfHAL/block/block.h index 75fb377..7df170f 100644 --- a/wolfHAL/block/block.h +++ b/wolfHAL/block/block.h @@ -48,7 +48,8 @@ struct whal_Block { * @param blockDev Block device instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ #ifdef WHAL_CFG_DIRECT_CALLBACKS #define whal_Block_Init(blockDev) ((blockDev)->driver->Init((blockDev))) @@ -63,7 +64,8 @@ struct whal_Block { * @param blockDev Block device instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Block_Init(whal_Block *blockDev); /* @@ -72,7 +74,8 @@ whal_Error whal_Block_Init(whal_Block *blockDev); * @param blockDev Block device instance to deinitialize. * * @retval WHAL_SUCCESS Driver-specific deinit completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Block_Deinit(whal_Block *blockDev); /* @@ -84,7 +87,8 @@ whal_Error whal_Block_Deinit(whal_Block *blockDev); * @param blockCount Number of blocks to read. * * @retval WHAL_SUCCESS Read completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Block_Read(whal_Block *blockDev, uint32_t block, void *data, uint32_t blockCount); @@ -97,7 +101,8 @@ whal_Error whal_Block_Read(whal_Block *blockDev, uint32_t block, void *data, * @param blockCount Number of blocks to write. * * @retval WHAL_SUCCESS Write accepted or completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Block_Write(whal_Block *blockDev, uint32_t block, const void *data, uint32_t blockCount); @@ -109,7 +114,8 @@ whal_Error whal_Block_Write(whal_Block *blockDev, uint32_t block, * @param blockCount Number of blocks to erase. * * @retval WHAL_SUCCESS Erase accepted or completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Block_Erase(whal_Block *blockDev, uint32_t block, uint32_t blockCount); diff --git a/wolfHAL/block/sdhc_spi_block.h b/wolfHAL/block/sdhc_spi_block.h index 3ab4bd2..737abf1 100644 --- a/wolfHAL/block/sdhc_spi_block.h +++ b/wolfHAL/block/sdhc_spi_block.h @@ -32,6 +32,7 @@ typedef struct whal_SdhcSpi_Cfg { whal_Timeout *timeout; } whal_SdhcSpi_Cfg; +#ifndef WHAL_CFG_BLOCK_API_MAPPING_SDHC_SPI extern const whal_BlockDriver whal_SdhcSpi_Driver; whal_Error whal_SdhcSpi_Init(whal_Block *blockDev); @@ -42,5 +43,6 @@ whal_Error whal_SdhcSpi_Write(whal_Block *blockDev, uint32_t block, const void *data, uint32_t blockCount); whal_Error whal_SdhcSpi_Erase(whal_Block *blockDev, uint32_t block, uint32_t blockCount); +#endif /* !WHAL_CFG_BLOCK_API_MAPPING_SDHC_SPI */ #endif /* WHAL_SDHC_SPI_H */ diff --git a/wolfHAL/clock/clock.h b/wolfHAL/clock/clock.h index fa686cc..64fb957 100644 --- a/wolfHAL/clock/clock.h +++ b/wolfHAL/clock/clock.h @@ -40,8 +40,9 @@ struct whal_Clock { * * @param clkDev Pointer to the clock instance to bring up. * - * @retval WHAL_SUCCESS Driver-specific init routine ran successfully. - * @retval WHAL_EINVAL Null pointer or driver rejected the configuration. + * @retval WHAL_SUCCESS Driver-specific init routine ran successfully. + * @retval WHAL_EINVAL Null pointer or driver rejected the configuration. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ #ifdef WHAL_CFG_DIRECT_CALLBACKS #define whal_Clock_Init(clkDev) ((clkDev)->driver->Init((clkDev))) @@ -54,8 +55,9 @@ struct whal_Clock { * * @param clkDev Pointer to the clock instance to bring up. * - * @retval WHAL_SUCCESS Driver-specific init routine ran successfully. - * @retval WHAL_EINVAL Null pointer or driver rejected the configuration. + * @retval WHAL_SUCCESS Driver-specific init routine ran successfully. + * @retval WHAL_EINVAL Null pointer or driver rejected the configuration. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Clock_Init(whal_Clock *clkDev); /* @@ -63,8 +65,9 @@ whal_Error whal_Clock_Init(whal_Clock *clkDev); * * @param clkDev Pointer to the clock instance to tear down. * - * @retval WHAL_SUCCESS Driver-specific deinit routine ran successfully. - * @retval WHAL_EINVAL Null pointer or driver refused to deinitialize. + * @retval WHAL_SUCCESS Driver-specific deinit routine ran successfully. + * @retval WHAL_EINVAL Null pointer or driver refused to deinitialize. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Clock_Deinit(whal_Clock *clkDev); /* @@ -72,8 +75,9 @@ whal_Error whal_Clock_Deinit(whal_Clock *clkDev); * * @param clkDev Pointer to the clock instance to enable. * - * @retval WHAL_SUCCESS Clock was enabled (or already running). - * @retval WHAL_EINVAL Null pointer or driver-specific enable failed. + * @retval WHAL_SUCCESS Clock was enabled (or already running). + * @retval WHAL_EINVAL Null pointer or driver-specific enable failed. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Clock_Enable(whal_Clock *clkDev, const void *clk); /* @@ -81,8 +85,9 @@ whal_Error whal_Clock_Enable(whal_Clock *clkDev, const void *clk); * * @param clkDev Pointer to the clock instance to disable. * - * @retval WHAL_SUCCESS Clock was disabled (or already stopped). - * @retval WHAL_EINVAL Null pointer or driver-specific disable failed. + * @retval WHAL_SUCCESS Clock was disabled (or already stopped). + * @retval WHAL_EINVAL Null pointer or driver-specific disable failed. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Clock_Disable(whal_Clock *clkDev, const void *clk); #endif diff --git a/wolfHAL/clock/pic32cz_clock.h b/wolfHAL/clock/pic32cz_clock.h index 59dbb99..25ec7f4 100644 --- a/wolfHAL/clock/pic32cz_clock.h +++ b/wolfHAL/clock/pic32cz_clock.h @@ -205,6 +205,7 @@ typedef struct whal_Pic32czClock_Clk { size_t mclkEnablePos; /* Bit position within the MCLK mask register */ } whal_Pic32czClock_Clk; +#ifndef WHAL_CFG_CLOCK_API_MAPPING_PIC32CZ_PLL /* * @brief Driver instance for PIC32CZ oscillator clock. */ @@ -248,5 +249,6 @@ whal_Error whal_Pic32czClock_Enable(whal_Clock *clkDev, const void *clk); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Pic32czClock_Disable(whal_Clock *clkDev, const void *clk); +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_PIC32CZ_PLL */ #endif /* WHAL_PIC32CZ_CLOCK_H */ diff --git a/wolfHAL/clock/stm32c0_rcc.h b/wolfHAL/clock/stm32c0_rcc.h index b3047f1..5acd622 100644 --- a/wolfHAL/clock/stm32c0_rcc.h +++ b/wolfHAL/clock/stm32c0_rcc.h @@ -60,6 +60,7 @@ typedef struct whal_Stm32c0Rcc_Cfg { whal_Stm32c0Rcc_HsiDiv hsidiv; /* HSI divider for HSISYS frequency */ } whal_Stm32c0Rcc_Cfg; +#ifndef WHAL_CFG_CLOCK_API_MAPPING_STM32C0 /* * @brief Driver instance for the STM32C0 RCC clock controller. */ @@ -110,5 +111,6 @@ whal_Error whal_Stm32c0Rcc_Enable(whal_Clock *clkDev, const void *clk); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32c0Rcc_Disable(whal_Clock *clkDev, const void *clk); +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_STM32C0 */ #endif /* WHAL_STM32C0_RCC_H */ diff --git a/wolfHAL/clock/stm32f4_rcc.h b/wolfHAL/clock/stm32f4_rcc.h index f7f92c5..c4449d7 100644 --- a/wolfHAL/clock/stm32f4_rcc.h +++ b/wolfHAL/clock/stm32f4_rcc.h @@ -94,6 +94,7 @@ typedef struct whal_Stm32f4Rcc_Cfg { uint8_t ppre2; /* APB2 prescaler (0=/1, 4=/2, 5=/4, 6=/8, 7=/16) */ } whal_Stm32f4Rcc_Cfg; +#ifndef WHAL_CFG_CLOCK_API_MAPPING_STM32F4_PLL /* * @brief Driver instance for the STM32F4 RCC PLL clock controller. */ @@ -145,5 +146,6 @@ whal_Error whal_Stm32f4Rcc_Enable(whal_Clock *clkDev, const void *clk); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32f4Rcc_Disable(whal_Clock *clkDev, const void *clk); +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_STM32F4_PLL */ #endif /* WHAL_STM32F4_RCC_H */ diff --git a/wolfHAL/clock/stm32h5_rcc.h b/wolfHAL/clock/stm32h5_rcc.h index e7aa8f7..910bd30 100644 --- a/wolfHAL/clock/stm32h5_rcc.h +++ b/wolfHAL/clock/stm32h5_rcc.h @@ -104,6 +104,7 @@ typedef struct whal_Stm32h5Rcc_Cfg { void *sysClkCfg; /* Pointer to PllClkCfg or HsiClkCfg based on driver */ } whal_Stm32h5Rcc_Cfg; +#if !defined(WHAL_CFG_CLOCK_API_MAPPING_STM32H5_PLL) && !defined(WHAL_CFG_CLOCK_API_MAPPING_STM32H5_HSI) /* * @brief Driver instance for PLL1 clock source. */ @@ -184,6 +185,7 @@ whal_Error whal_Stm32h5Rcc_Enable(whal_Clock *clkDev, const void *clk); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32h5Rcc_Disable(whal_Clock *clkDev, const void *clk); +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_STM32H5_PLL && !WHAL_CFG_CLOCK_API_MAPPING_STM32H5_HSI */ /* * @brief Enable or disable the HSI48 oscillator. diff --git a/wolfHAL/clock/stm32wb_rcc.h b/wolfHAL/clock/stm32wb_rcc.h index 8d563b5..b097edf 100644 --- a/wolfHAL/clock/stm32wb_rcc.h +++ b/wolfHAL/clock/stm32wb_rcc.h @@ -126,6 +126,7 @@ typedef struct whal_Stm32wbRcc_Cfg { void *sysClkCfg; /* Pointer to PllClkCfg or MsiClkCfg based on driver */ } whal_Stm32wbRcc_Cfg; +#if !defined(WHAL_CFG_CLOCK_API_MAPPING_STM32WB_PLL) && !defined(WHAL_CFG_CLOCK_API_MAPPING_STM32WB_MSI) /* * @brief Driver instance for the STM32 RCC clock controller. */ @@ -188,6 +189,7 @@ whal_Error whal_Stm32wbRcc_Enable(whal_Clock *clkDev, const void *clk); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32wbRcc_Disable(whal_Clock *clkDev, const void *clk); +#endif /* !WHAL_CFG_CLOCK_API_MAPPING_STM32WB_PLL && !WHAL_CFG_CLOCK_API_MAPPING_STM32WB_MSI */ /* * @brief Enable or disable the HSI48 oscillator required by the RNG peripheral. * diff --git a/wolfHAL/crypto/stm32wb_aes.h b/wolfHAL/crypto/stm32wb_aes.h index faeab83..c781e29 100644 --- a/wolfHAL/crypto/stm32wb_aes.h +++ b/wolfHAL/crypto/stm32wb_aes.h @@ -21,6 +21,7 @@ typedef struct { whal_Timeout *timeout; } whal_Stm32wbAes_Cfg; +#ifndef WHAL_CFG_CRYPTO_API_MAPPING_STM32WB_AES /* * @brief Driver instance for STM32WB AES peripheral. */ @@ -45,6 +46,7 @@ whal_Error whal_Stm32wbAes_Init(whal_Crypto *cryptoDev); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32wbAes_Deinit(whal_Crypto *cryptoDev); +#endif /* !WHAL_CFG_CRYPTO_API_MAPPING_STM32WB_AES */ /* diff --git a/wolfHAL/dma/stm32wb_dma.h b/wolfHAL/dma/stm32wb_dma.h index 11e6188..70ae230 100644 --- a/wolfHAL/dma/stm32wb_dma.h +++ b/wolfHAL/dma/stm32wb_dma.h @@ -76,11 +76,39 @@ typedef struct { uint8_t numChannels; /* Number of channels (7 for DMA1, 5 for DMA2) */ } whal_Stm32wbDma_Cfg; +#ifndef WHAL_CFG_DMA_API_MAPPING_STM32WB /* * @brief Driver instance for STM32WB DMA. */ extern const whal_DmaDriver whal_Stm32wbDma_Driver; +/* + * @brief Initialize the STM32WB DMA controller. + */ +whal_Error whal_Stm32wbDma_Init(whal_Dma *dmaDev); + +/* + * @brief Deinitialize the STM32WB DMA controller. + */ +whal_Error whal_Stm32wbDma_Deinit(whal_Dma *dmaDev); + +/* + * @brief Configure a DMA channel with platform-specific settings. + */ +whal_Error whal_Stm32wbDma_Configure(whal_Dma *dmaDev, size_t ch, + const void *chCfg); + +/* + * @brief Start a previously configured DMA channel. + */ +whal_Error whal_Stm32wbDma_Start(whal_Dma *dmaDev, size_t ch); + +/* + * @brief Stop a DMA channel. + */ +whal_Error whal_Stm32wbDma_Stop(whal_Dma *dmaDev, size_t ch); +#endif /* !WHAL_CFG_DMA_API_MAPPING_STM32WB */ + /* * @brief DMA callback type. * diff --git a/wolfHAL/error.h b/wolfHAL/error.h index 5e8e03a..388a069 100644 --- a/wolfHAL/error.h +++ b/wolfHAL/error.h @@ -13,7 +13,7 @@ typedef int whal_Error; enum { /* Operation completed successfully. */ WHAL_SUCCESS = 0, - /* Invalid argument or unsupported operation. */ + /* Invalid argument (null pointer, bad configuration). */ WHAL_EINVAL = -4000, /* Resource not ready or busy. */ WHAL_ENOTREADY = -4001, @@ -21,6 +21,8 @@ enum { WHAL_EHARDWARE = -4002, /* Operation timed out. */ WHAL_ETIMEOUT = -4003, + /* Operation not implemented by the selected driver. */ + WHAL_ENOTIMPL = -4004, }; #endif /* WHAL_ERROR_H */ diff --git a/wolfHAL/eth/stm32h5_eth.h b/wolfHAL/eth/stm32h5_eth.h index 11e1cf4..01c5642 100644 --- a/wolfHAL/eth/stm32h5_eth.h +++ b/wolfHAL/eth/stm32h5_eth.h @@ -46,6 +46,7 @@ typedef struct whal_Stm32h5Eth_Cfg { size_t rxHead; /* Next RX descriptor to check */ } whal_Stm32h5Eth_Cfg; +#ifndef WHAL_CFG_ETH_API_MAPPING_STM32H5 /* * @brief Driver instance for STM32H5 Ethernet MAC. */ @@ -163,6 +164,7 @@ whal_Error whal_Stm32h5Eth_MdioRead(whal_Eth *ethDev, uint8_t phyAddr, */ whal_Error whal_Stm32h5Eth_MdioWrite(whal_Eth *ethDev, uint8_t phyAddr, uint8_t reg, uint16_t val); +#endif /* !WHAL_CFG_ETH_API_MAPPING_STM32H5 */ /* * @brief Enable or disable MAC-internal loopback. diff --git a/wolfHAL/eth_phy/lan8742a_eth_phy.h b/wolfHAL/eth_phy/lan8742a_eth_phy.h index fb054a7..e008756 100644 --- a/wolfHAL/eth_phy/lan8742a_eth_phy.h +++ b/wolfHAL/eth_phy/lan8742a_eth_phy.h @@ -20,6 +20,7 @@ typedef struct whal_Lan8742a_Cfg { whal_Timeout *timeout; } whal_Lan8742a_Cfg; +#ifndef WHAL_CFG_ETH_PHY_API_MAPPING_LAN8742A /* * @brief Driver instance for LAN8742A PHY. */ @@ -62,5 +63,6 @@ whal_Error whal_Lan8742a_Deinit(whal_EthPhy *phyDev); */ whal_Error whal_Lan8742a_GetLinkState(whal_EthPhy *phyDev, uint8_t *up, uint8_t *speed, uint8_t *duplex); +#endif /* !WHAL_CFG_ETH_PHY_API_MAPPING_LAN8742A */ #endif /* WHAL_LAN8742A_H */ diff --git a/wolfHAL/flash/flash.h b/wolfHAL/flash/flash.h index d8fc702..9101540 100644 --- a/wolfHAL/flash/flash.h +++ b/wolfHAL/flash/flash.h @@ -48,7 +48,8 @@ struct whal_Flash { * @param flashDev Flash instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ #ifdef WHAL_CFG_DIRECT_CALLBACKS #define whal_Flash_Init(flashDev) ((flashDev)->driver->Init((flashDev))) @@ -65,7 +66,8 @@ struct whal_Flash { * @param flashDev Flash instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Flash_Init(whal_Flash *flashDev); /* @@ -74,7 +76,8 @@ whal_Error whal_Flash_Init(whal_Flash *flashDev); * @param flashDev Flash instance to deinitialize. * * @retval WHAL_SUCCESS Driver-specific deinit completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Flash_Deinit(whal_Flash *flashDev); /* @@ -85,7 +88,8 @@ whal_Error whal_Flash_Deinit(whal_Flash *flashDev); * @param len Number of bytes to lock. * * @retval WHAL_SUCCESS Lock applied. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Flash_Lock(whal_Flash *flashDev, size_t addr, size_t len); /* @@ -96,7 +100,8 @@ whal_Error whal_Flash_Lock(whal_Flash *flashDev, size_t addr, size_t len); * @param len Number of bytes to unlock. * * @retval WHAL_SUCCESS Unlock applied. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Flash_Unlock(whal_Flash *flashDev, size_t addr, size_t len); /* @@ -108,7 +113,8 @@ whal_Error whal_Flash_Unlock(whal_Flash *flashDev, size_t addr, size_t len); * @param dataSz Number of bytes to read. * * @retval WHAL_SUCCESS Read completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Flash_Read(whal_Flash *flashDev, size_t addr, void *data, size_t dataSz); /* @@ -120,7 +126,8 @@ whal_Error whal_Flash_Read(whal_Flash *flashDev, size_t addr, void *data, size_t * @param dataSz Number of bytes to write. * * @retval WHAL_SUCCESS Write accepted or completed. - * @retval WHAL_EINVAL Null pointer, missing driver function, or bad arguments. + * @retval WHAL_EINVAL Null pointer or bad arguments. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Flash_Write(whal_Flash *flashDev, size_t addr, const void *data, size_t dataSz); /* @@ -131,7 +138,8 @@ whal_Error whal_Flash_Write(whal_Flash *flashDev, size_t addr, const void *data, * @param dataSz Number of bytes (or sector-aligned size) to erase. * * @retval WHAL_SUCCESS Erase accepted or completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Flash_Erase(whal_Flash *flashDev, size_t addr, size_t dataSz); #endif diff --git a/wolfHAL/flash/pic32cz_flash.h b/wolfHAL/flash/pic32cz_flash.h index da01fcb..fa0f778 100644 --- a/wolfHAL/flash/pic32cz_flash.h +++ b/wolfHAL/flash/pic32cz_flash.h @@ -32,6 +32,7 @@ typedef struct whal_Pic32czFlash_Cfg { whal_Timeout *timeout; } whal_Pic32czFlash_Cfg; +#ifndef WHAL_CFG_FLASH_API_MAPPING_PIC32CZ /* * @brief Driver instance for PIC32CZ flash. */ @@ -120,5 +121,6 @@ whal_Error whal_Pic32czFlash_Write(whal_Flash *flashDev, size_t addr, const void * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Pic32czFlash_Erase(whal_Flash *flashDev, size_t addr, size_t dataSz); +#endif /* !WHAL_CFG_FLASH_API_MAPPING_PIC32CZ */ #endif /* WHAL_PIC32CZ_FLASH_H */ diff --git a/wolfHAL/flash/spi_nor_flash.h b/wolfHAL/flash/spi_nor_flash.h index d108f64..2006c64 100644 --- a/wolfHAL/flash/spi_nor_flash.h +++ b/wolfHAL/flash/spi_nor_flash.h @@ -53,10 +53,6 @@ typedef struct whal_SpiNor_Cfg { */ extern const whal_FlashDriver whal_SpiNor_Driver; -/* -------------------------------------------------------------------- */ -/* Init / Deinit */ -/* -------------------------------------------------------------------- */ - /* * @brief Initialize a SPI-NOR device in 3-byte address mode. * @@ -72,22 +68,6 @@ extern const whal_FlashDriver whal_SpiNor_Driver; */ whal_Error whal_SpiNor_Init(whal_Flash *flashDev); -/* - * @brief Initialize a SPI-NOR device and enter 4-byte address mode. - * - * Performs standard initialization via whal_SpiNor_Init(), then sends the - * Enter 4-Byte Address Mode command (0xB7). After this call, all 4bMode - * variant functions can be used. The device remains in 4-byte mode until - * power cycle or an explicit exit command. - * - * @param flashDev Flash device instance. - * - * @retval WHAL_SUCCESS Device initialized and 4-byte mode command sent. - * @retval WHAL_EINVAL Null pointer or invalid configuration. - * @retval WHAL_EHARDWARE No device detected. - */ -whal_Error whal_SpiNor4bMode_Init(whal_Flash *flashDev); - /* * @brief Deinitialize a SPI-NOR device. * @@ -100,10 +80,6 @@ whal_Error whal_SpiNor4bMode_Init(whal_Flash *flashDev); */ whal_Error whal_SpiNor_Deinit(whal_Flash *flashDev); -/* -------------------------------------------------------------------- */ -/* Lock / Unlock */ -/* -------------------------------------------------------------------- */ - /* * @brief Lock the entire device by setting all block protect bits. * @@ -136,6 +112,26 @@ whal_Error whal_SpiNor_Lock(whal_Flash *flashDev, size_t addr, size_t len); */ whal_Error whal_SpiNor_Unlock(whal_Flash *flashDev, size_t addr, size_t len); +/* -------------------------------------------------------------------- */ +/* Init / Deinit — 4-byte address mode */ +/* -------------------------------------------------------------------- */ + +/* + * @brief Initialize a SPI-NOR device and enter 4-byte address mode. + * + * Performs standard initialization via whal_SpiNor_Init(), then sends the + * Enter 4-Byte Address Mode command (0xB7). After this call, all 4bMode + * variant functions can be used. The device remains in 4-byte mode until + * power cycle or an explicit exit command. + * + * @param flashDev Flash device instance. + * + * @retval WHAL_SUCCESS Device initialized and 4-byte mode command sent. + * @retval WHAL_EINVAL Null pointer or invalid configuration. + * @retval WHAL_EHARDWARE No device detected. + */ +whal_Error whal_SpiNor4bMode_Init(whal_Flash *flashDev); + /* -------------------------------------------------------------------- */ /* Read — 3-byte address */ /* -------------------------------------------------------------------- */ diff --git a/wolfHAL/flash/stm32c0_flash.h b/wolfHAL/flash/stm32c0_flash.h index 7663245..ee08654 100644 --- a/wolfHAL/flash/stm32c0_flash.h +++ b/wolfHAL/flash/stm32c0_flash.h @@ -40,6 +40,7 @@ typedef enum whal_Stm32c0Flash_Latency { WHAL_STM32C0_FLASH_LATENCY_1, /* 1 wait state */ } whal_Stm32c0Flash_Latency; +#ifndef WHAL_CFG_FLASH_API_MAPPING_STM32C0 /* * @brief Driver instance for STM32C0 flash. */ @@ -132,6 +133,7 @@ whal_Error whal_Stm32c0Flash_Write(whal_Flash *flashDev, size_t addr, const void * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32c0Flash_Erase(whal_Flash *flashDev, size_t addr, size_t dataSz); +#endif /* !WHAL_CFG_FLASH_API_MAPPING_STM32C0 */ /* * @brief Update flash latency wait states. diff --git a/wolfHAL/flash/stm32f4_flash.h b/wolfHAL/flash/stm32f4_flash.h index 83bc9f8..1980ef0 100644 --- a/wolfHAL/flash/stm32f4_flash.h +++ b/wolfHAL/flash/stm32f4_flash.h @@ -61,6 +61,7 @@ typedef enum whal_Stm32f4Flash_Latency { WHAL_STM32F4_FLASH_LATENCY_3, /* 3 wait states */ } whal_Stm32f4Flash_Latency; +#ifndef WHAL_CFG_FLASH_API_MAPPING_STM32F4 /* * @brief Driver instance for STM32F4 flash. */ @@ -158,6 +159,7 @@ whal_Error whal_Stm32f4Flash_Write(whal_Flash *flashDev, size_t addr, */ whal_Error whal_Stm32f4Flash_Erase(whal_Flash *flashDev, size_t addr, size_t dataSz); +#endif /* !WHAL_CFG_FLASH_API_MAPPING_STM32F4 */ /* * @brief Update flash latency wait states. diff --git a/wolfHAL/flash/stm32h5_flash.h b/wolfHAL/flash/stm32h5_flash.h index 4631e3b..6289fb3 100644 --- a/wolfHAL/flash/stm32h5_flash.h +++ b/wolfHAL/flash/stm32h5_flash.h @@ -24,6 +24,7 @@ typedef struct whal_Stm32h5Flash_Cfg { whal_Timeout *timeout; } whal_Stm32h5Flash_Cfg; +#ifndef WHAL_CFG_FLASH_API_MAPPING_STM32H5 /* * @brief Driver instance for STM32H5 flash. */ @@ -121,6 +122,7 @@ whal_Error whal_Stm32h5Flash_Write(whal_Flash *flashDev, size_t addr, */ whal_Error whal_Stm32h5Flash_Erase(whal_Flash *flashDev, size_t addr, size_t dataSz); +#endif /* !WHAL_CFG_FLASH_API_MAPPING_STM32H5 */ /* * @brief Set flash access latency (wait states) and write high-frequency mode. diff --git a/wolfHAL/flash/stm32wb_flash.h b/wolfHAL/flash/stm32wb_flash.h index 56fb5ad..afb84fc 100644 --- a/wolfHAL/flash/stm32wb_flash.h +++ b/wolfHAL/flash/stm32wb_flash.h @@ -48,6 +48,7 @@ typedef enum whal_Stm32wbFlash_Latency { WHAL_STM32WB_FLASH_LATENCY_3, /* 3 wait states */ } whal_Stm32wbFlash_Latency; +#ifndef WHAL_CFG_FLASH_API_MAPPING_STM32WB /* * @brief Driver instance for STM32 flash. */ @@ -130,6 +131,7 @@ whal_Error whal_Stm32wbFlash_Write(whal_Flash *flashDev, size_t addr, const void * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32wbFlash_Erase(whal_Flash *flashDev, size_t addr, size_t dataSz); +#endif /* !WHAL_CFG_FLASH_API_MAPPING_STM32WB */ /* * @brief Update flash latency wait states. * diff --git a/wolfHAL/gpio/gpio.h b/wolfHAL/gpio/gpio.h index 8f89b6a..2b65c7f 100644 --- a/wolfHAL/gpio/gpio.h +++ b/wolfHAL/gpio/gpio.h @@ -41,7 +41,8 @@ struct whal_Gpio { * @param gpioDev GPIO instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ #ifdef WHAL_CFG_DIRECT_CALLBACKS #define whal_Gpio_Init(gpioDev) ((gpioDev)->driver->Init((gpioDev))) @@ -55,7 +56,8 @@ struct whal_Gpio { * @param gpioDev GPIO instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Gpio_Init(whal_Gpio *gpioDev); /* @@ -64,7 +66,8 @@ whal_Error whal_Gpio_Init(whal_Gpio *gpioDev); * @param gpioDev GPIO instance to deinitialize. * * @retval WHAL_SUCCESS Driver-specific deinit completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Gpio_Deinit(whal_Gpio *gpioDev); /* @@ -75,7 +78,8 @@ whal_Error whal_Gpio_Deinit(whal_Gpio *gpioDev); * @param value Storage for the sampled pin value. * * @retval WHAL_SUCCESS Pin value stored in @p value. - * @retval WHAL_EINVAL Null pointer, missing driver function, or bad pin. + * @retval WHAL_EINVAL Null pointer or bad pin. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Gpio_Get(whal_Gpio *gpioDev, size_t pin, size_t *value); /* @@ -86,7 +90,8 @@ whal_Error whal_Gpio_Get(whal_Gpio *gpioDev, size_t pin, size_t *value); * @param value Output value to drive (typically 0 or 1). * * @retval WHAL_SUCCESS Pin updated. - * @retval WHAL_EINVAL Null pointer, missing driver function, or bad pin. + * @retval WHAL_EINVAL Null pointer or bad pin. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Gpio_Set(whal_Gpio *gpioDev, size_t pin, size_t value); #endif diff --git a/wolfHAL/gpio/pic32cz_gpio.h b/wolfHAL/gpio/pic32cz_gpio.h index 9b9956e..0d9e9c3 100644 --- a/wolfHAL/gpio/pic32cz_gpio.h +++ b/wolfHAL/gpio/pic32cz_gpio.h @@ -89,6 +89,7 @@ typedef struct whal_Pic32czGpio_Cfg { whal_Pic32czGpio_PinCfg *pinCfg; /* Array of pin configurations */ } whal_Pic32czGpio_Cfg; +#ifndef WHAL_CFG_GPIO_API_MAPPING_PIC32CZ /* * @brief Driver instance for PIC32CZ GPIO. */ @@ -134,5 +135,6 @@ whal_Error whal_Pic32czGpio_Get(whal_Gpio *gpioDev, size_t pin, size_t *value); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Pic32czGpio_Set(whal_Gpio *gpioDev, size_t pin, size_t value); +#endif /* !WHAL_CFG_GPIO_API_MAPPING_PIC32CZ */ #endif /* WHAL_PIC32CZ_GPIO_H */ diff --git a/wolfHAL/gpio/stm32c0_gpio.h b/wolfHAL/gpio/stm32c0_gpio.h index b263761..729c67a 100644 --- a/wolfHAL/gpio/stm32c0_gpio.h +++ b/wolfHAL/gpio/stm32c0_gpio.h @@ -15,11 +15,13 @@ typedef whal_Stm32wbGpio_Cfg whal_Stm32c0Gpio_Cfg; typedef whal_Stm32wbGpio_PinCfg whal_Stm32c0Gpio_PinCfg; +#ifndef WHAL_CFG_GPIO_API_MAPPING_STM32C0 #define whal_Stm32c0Gpio_Driver whal_Stm32wbGpio_Driver #define whal_Stm32c0Gpio_Init whal_Stm32wbGpio_Init #define whal_Stm32c0Gpio_Deinit whal_Stm32wbGpio_Deinit #define whal_Stm32c0Gpio_Get whal_Stm32wbGpio_Get #define whal_Stm32c0Gpio_Set whal_Stm32wbGpio_Set +#endif /* !WHAL_CFG_GPIO_API_MAPPING_STM32C0 */ /* * @brief GPIO mode selection (re-exported from STM32WB). diff --git a/wolfHAL/gpio/stm32f4_gpio.h b/wolfHAL/gpio/stm32f4_gpio.h index 79c0905..d8ac28b 100644 --- a/wolfHAL/gpio/stm32f4_gpio.h +++ b/wolfHAL/gpio/stm32f4_gpio.h @@ -15,11 +15,13 @@ typedef whal_Stm32wbGpio_Cfg whal_Stm32f4Gpio_Cfg; typedef whal_Stm32wbGpio_PinCfg whal_Stm32f4Gpio_PinCfg; +#ifndef WHAL_CFG_GPIO_API_MAPPING_STM32F4 #define whal_Stm32f4Gpio_Driver whal_Stm32wbGpio_Driver #define whal_Stm32f4Gpio_Init whal_Stm32wbGpio_Init #define whal_Stm32f4Gpio_Deinit whal_Stm32wbGpio_Deinit #define whal_Stm32f4Gpio_Get whal_Stm32wbGpio_Get #define whal_Stm32f4Gpio_Set whal_Stm32wbGpio_Set +#endif /* !WHAL_CFG_GPIO_API_MAPPING_STM32F4 */ /* * @brief GPIO mode selection (re-exported from STM32WB). diff --git a/wolfHAL/gpio/stm32h5_gpio.h b/wolfHAL/gpio/stm32h5_gpio.h index 56c8a0d..7be8b80 100644 --- a/wolfHAL/gpio/stm32h5_gpio.h +++ b/wolfHAL/gpio/stm32h5_gpio.h @@ -15,11 +15,13 @@ typedef whal_Stm32wbGpio_Cfg whal_Stm32h5Gpio_Cfg; typedef whal_Stm32wbGpio_PinCfg whal_Stm32h5Gpio_PinCfg; +#ifndef WHAL_CFG_GPIO_API_MAPPING_STM32H5 #define whal_Stm32h5Gpio_Driver whal_Stm32wbGpio_Driver #define whal_Stm32h5Gpio_Init whal_Stm32wbGpio_Init #define whal_Stm32h5Gpio_Deinit whal_Stm32wbGpio_Deinit #define whal_Stm32h5Gpio_Get whal_Stm32wbGpio_Get #define whal_Stm32h5Gpio_Set whal_Stm32wbGpio_Set +#endif /* !WHAL_CFG_GPIO_API_MAPPING_STM32H5 */ /* * @brief GPIO mode selection (re-exported from STM32WB). diff --git a/wolfHAL/gpio/stm32wb_gpio.h b/wolfHAL/gpio/stm32wb_gpio.h index f89f3fa..a3a9461 100644 --- a/wolfHAL/gpio/stm32wb_gpio.h +++ b/wolfHAL/gpio/stm32wb_gpio.h @@ -107,6 +107,10 @@ typedef struct { size_t pinCount; /* Number of pins to configure */ } whal_Stm32wbGpio_Cfg; +#if !defined(WHAL_CFG_GPIO_API_MAPPING_STM32WB) && \ + !defined(WHAL_CFG_GPIO_API_MAPPING_STM32F4) && \ + !defined(WHAL_CFG_GPIO_API_MAPPING_STM32H5) && \ + !defined(WHAL_CFG_GPIO_API_MAPPING_STM32C0) /* * @brief Driver instance for STM32 GPIO. */ @@ -152,5 +156,6 @@ whal_Error whal_Stm32wbGpio_Get(whal_Gpio *gpioDev, size_t pin, size_t *value); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32wbGpio_Set(whal_Gpio *gpioDev, size_t pin, size_t value); +#endif /* !WHAL_CFG_GPIO_API_MAPPING */ #endif /* WHAL_STM32WB_GPIO_H */ diff --git a/wolfHAL/i2c/stm32wb_i2c.h b/wolfHAL/i2c/stm32wb_i2c.h index 059144e..aefdc1a 100644 --- a/wolfHAL/i2c/stm32wb_i2c.h +++ b/wolfHAL/i2c/stm32wb_i2c.h @@ -27,6 +27,7 @@ typedef struct whal_Stm32wbI2c_Cfg { whal_Timeout *timeout; } whal_Stm32wbI2c_Cfg; +#ifndef WHAL_CFG_I2C_API_MAPPING_STM32WB /* * @brief Driver instance for STM32WB I2C peripheral. */ @@ -96,5 +97,6 @@ whal_Error whal_Stm32wbI2c_EndCom(whal_I2c *i2cDev); */ whal_Error whal_Stm32wbI2c_Transfer(whal_I2c *i2cDev, whal_I2c_Msg *msgs, size_t numMsgs); +#endif /* !WHAL_CFG_I2C_API_MAPPING_STM32WB */ #endif /* WHAL_STM32WB_I2C_H */ diff --git a/wolfHAL/irq/cortex_m4_nvic.h b/wolfHAL/irq/cortex_m4_nvic.h index 43c8f80..46a5565 100644 --- a/wolfHAL/irq/cortex_m4_nvic.h +++ b/wolfHAL/irq/cortex_m4_nvic.h @@ -21,9 +21,16 @@ typedef struct { uint8_t priority; } whal_Nvic_Cfg; +#ifndef WHAL_CFG_IRQ_API_MAPPING_NVIC /* * @brief Driver instance for Cortex-M4 NVIC. */ extern const whal_IrqDriver whal_Nvic_Driver; +whal_Error whal_Nvic_Init(whal_Irq *irqDev); +whal_Error whal_Nvic_Deinit(whal_Irq *irqDev); +whal_Error whal_Nvic_Enable(whal_Irq *irqDev, size_t irq, const void *irqCfg); +whal_Error whal_Nvic_Disable(whal_Irq *irqDev, size_t irq); +#endif /* !WHAL_CFG_IRQ_API_MAPPING_NVIC */ + #endif /* WHAL_CORTEX_M4_NVIC_H */ diff --git a/wolfHAL/platform/arm/cortex_m0plus.h b/wolfHAL/platform/arm/cortex_m0plus.h index 802179f..f97dcb3 100644 --- a/wolfHAL/platform/arm/cortex_m0plus.h +++ b/wolfHAL/platform/arm/cortex_m0plus.h @@ -3,11 +3,9 @@ #include -#define WHAL_CORTEX_M0PLUS_SYSTICK_DEVICE \ - .regmap = { \ - .base = 0xE000E010, \ - .size = 0x400, \ - }, \ - .driver = &whal_SysTick_Driver +#define WHAL_CORTEX_M0PLUS_SYSTICK_REGMAP \ + .base = 0xE000E010, \ + .size = 0x400 +#define WHAL_CORTEX_M0PLUS_SYSTICK_DRIVER &whal_SysTick_Driver #endif /* WHAL_CORTEX_M0PLUS_H */ diff --git a/wolfHAL/platform/arm/cortex_m33.h b/wolfHAL/platform/arm/cortex_m33.h index 50c6312..9ab025a 100644 --- a/wolfHAL/platform/arm/cortex_m33.h +++ b/wolfHAL/platform/arm/cortex_m33.h @@ -3,11 +3,9 @@ #include -#define WHAL_CORTEX_M33_SYSTICK_DEVICE \ - .regmap = { \ - .base = 0xE000E010, \ - .size = 0x400, \ - }, \ - .driver = &whal_SysTick_Driver +#define WHAL_CORTEX_M33_SYSTICK_REGMAP \ + .base = 0xE000E010, \ + .size = 0x400 +#define WHAL_CORTEX_M33_SYSTICK_DRIVER &whal_SysTick_Driver #endif /* WHAL_CORTEX_M33_H */ diff --git a/wolfHAL/platform/arm/cortex_m4.h b/wolfHAL/platform/arm/cortex_m4.h index e90d266..b60dd92 100644 --- a/wolfHAL/platform/arm/cortex_m4.h +++ b/wolfHAL/platform/arm/cortex_m4.h @@ -4,18 +4,14 @@ #include #include -#define WHAL_CORTEX_M4_SYSTICK_DEVICE \ - .regmap = { \ - .base = 0xE000E010, \ - .size = 0x400, \ - }, \ - .driver = &whal_SysTick_Driver +#define WHAL_CORTEX_M4_SYSTICK_REGMAP \ + .base = 0xE000E010, \ + .size = 0x400 +#define WHAL_CORTEX_M4_SYSTICK_DRIVER &whal_SysTick_Driver -#define WHAL_CORTEX_M4_NVIC_DEVICE \ - .regmap = { \ - .base = 0xE000E100, \ - .size = 0x400, \ - }, \ - .driver = &whal_Nvic_Driver +#define WHAL_CORTEX_M4_NVIC_REGMAP \ + .base = 0xE000E100, \ + .size = 0x400 +#define WHAL_CORTEX_M4_NVIC_DRIVER &whal_Nvic_Driver #endif /* WHAL_CORTEX_M4_H */ diff --git a/wolfHAL/platform/arm/cortex_m7.h b/wolfHAL/platform/arm/cortex_m7.h index 4906015..5583100 100644 --- a/wolfHAL/platform/arm/cortex_m7.h +++ b/wolfHAL/platform/arm/cortex_m7.h @@ -3,11 +3,9 @@ #include -#define WHAL_CORTEX_M7_SYSTICK_DEVICE \ - .regmap = { \ - .base = 0xE000E010, \ - .size = 0x400, \ - }, \ - .driver = &whal_SysTick_Driver +#define WHAL_CORTEX_M7_SYSTICK_REGMAP \ + .base = 0xE000E010, \ + .size = 0x400 +#define WHAL_CORTEX_M7_SYSTICK_DRIVER &whal_SysTick_Driver #endif /* WHAL_CORTEX_M7_H */ diff --git a/wolfHAL/platform/microchip/pic32cz.h b/wolfHAL/platform/microchip/pic32cz.h index 6cac3eb..43d2421 100644 --- a/wolfHAL/platform/microchip/pic32cz.h +++ b/wolfHAL/platform/microchip/pic32cz.h @@ -8,40 +8,30 @@ #include #include -#define WHAL_PIC32CZ_FLASH_DEVICE \ - .regmap = { \ - .base = 0x44002000, \ - .size = 0x4000, \ - }, \ - .driver = &whal_Pic32czFlash_Driver - -#define WHAL_PIC32CZ_SUPPLY_DEVICE \ - .regmap = { \ - .base = 0x44020000, \ - .size = 0x2000, \ - }, \ - .driver = &whal_Pic32czSupc_Driver - -#define WHAL_PIC32CZ_CLOCK_PLL_DEVICE \ - .regmap = { \ - .base = 0x44040000, \ - .size = 0x14000, \ - }, \ - .driver = &whal_Pic32czClockPll_Driver - -#define WHAL_PIC32CZ_GPIO_DEVICE \ - .regmap = { \ - .base = 0x44840000, \ - .size = 0x2000, \ - }, \ - .driver = &whal_Pic32czGpio_Driver - -#define WHAL_PIC32CZ_SERCOM4_UART_DEVICE \ - .regmap = { \ - .base = 0x46004000, \ - .size = 0x2000, \ - }, \ - .driver = &whal_Pic32czUart_Driver +#define WHAL_PIC32CZ_FLASH_REGMAP \ + .base = 0x44002000, \ + .size = 0x4000 +#define WHAL_PIC32CZ_FLASH_DRIVER &whal_Pic32czFlash_Driver + +#define WHAL_PIC32CZ_SUPPLY_REGMAP \ + .base = 0x44020000, \ + .size = 0x2000 +#define WHAL_PIC32CZ_SUPPLY_DRIVER &whal_Pic32czSupc_Driver + +#define WHAL_PIC32CZ_CLOCK_PLL_REGMAP \ + .base = 0x44040000, \ + .size = 0x14000 +#define WHAL_PIC32CZ_CLOCK_PLL_DRIVER &whal_Pic32czClockPll_Driver + +#define WHAL_PIC32CZ_GPIO_REGMAP \ + .base = 0x44840000, \ + .size = 0x2000 +#define WHAL_PIC32CZ_GPIO_DRIVER &whal_Pic32czGpio_Driver + +#define WHAL_PIC32CZ_SERCOM4_UART_REGMAP \ + .base = 0x46004000, \ + .size = 0x2000 +#define WHAL_PIC32CZ_SERCOM4_UART_DRIVER &whal_Pic32czUart_Driver #define WHAL_PIC32CZ_SUPPLY_PLL \ .enableMask = (1UL << 18), \ diff --git a/wolfHAL/platform/st/stm32c031xx.h b/wolfHAL/platform/st/stm32c031xx.h index 5843bbb..9a5d35e 100644 --- a/wolfHAL/platform/st/stm32c031xx.h +++ b/wolfHAL/platform/st/stm32c031xx.h @@ -25,47 +25,35 @@ /* --- Device macros --- */ -#define WHAL_STM32C031_RCC_DEVICE \ - .regmap = { \ - .base = 0x40021000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32c0Rcc_Driver - -#define WHAL_STM32C031_GPIO_DEVICE \ - .regmap = { \ - .base = 0x50000000, \ - .size = 0x1800, \ - }, \ - .driver = &whal_Stm32c0Gpio_Driver - -#define WHAL_STM32C031_USART1_DEVICE \ - .regmap = { \ - .base = 0x40013800, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32c0Uart_Driver - -#define WHAL_STM32C031_USART2_DEVICE \ - .regmap = { \ - .base = 0x40004400, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32c0Uart_Driver - -#define WHAL_STM32C031_SPI1_DEVICE \ - .regmap = { \ - .base = 0x40013000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32c0Spi_Driver - -#define WHAL_STM32C031_FLASH_DEVICE \ - .regmap = { \ - .base = 0x40022000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32c0Flash_Driver +#define WHAL_STM32C031_RCC_REGMAP \ + .base = 0x40021000, \ + .size = 0x400 +#define WHAL_STM32C031_RCC_DRIVER &whal_Stm32c0Rcc_Driver + +#define WHAL_STM32C031_GPIO_REGMAP \ + .base = 0x50000000, \ + .size = 0x1800 +#define WHAL_STM32C031_GPIO_DRIVER &whal_Stm32c0Gpio_Driver + +#define WHAL_STM32C031_USART1_REGMAP \ + .base = 0x40013800, \ + .size = 0x400 +#define WHAL_STM32C031_USART1_DRIVER &whal_Stm32c0Uart_Driver + +#define WHAL_STM32C031_USART2_REGMAP \ + .base = 0x40004400, \ + .size = 0x400 +#define WHAL_STM32C031_USART2_DRIVER &whal_Stm32c0Uart_Driver + +#define WHAL_STM32C031_SPI1_REGMAP \ + .base = 0x40013000, \ + .size = 0x400 +#define WHAL_STM32C031_SPI1_DRIVER &whal_Stm32c0Spi_Driver + +#define WHAL_STM32C031_FLASH_REGMAP \ + .base = 0x40022000, \ + .size = 0x400 +#define WHAL_STM32C031_FLASH_DRIVER &whal_Stm32c0Flash_Driver /* --- Clock gate macros --- */ diff --git a/wolfHAL/platform/st/stm32f411xx.h b/wolfHAL/platform/st/stm32f411xx.h index 1b36b7c..7cfcc06 100644 --- a/wolfHAL/platform/st/stm32f411xx.h +++ b/wolfHAL/platform/st/stm32f411xx.h @@ -28,40 +28,30 @@ /* --- Device macros --- */ -#define WHAL_STM32F411_RCC_PLL_DEVICE \ - .regmap = { \ - .base = 0x40023800, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32f4RccPll_Driver - -#define WHAL_STM32F411_GPIO_DEVICE \ - .regmap = { \ - .base = 0x40020000, \ - .size = 0x2000, \ - }, \ - .driver = &whal_Stm32f4Gpio_Driver - -#define WHAL_STM32F411_USART1_DEVICE \ - .regmap = { \ - .base = 0x40011000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32f4Uart_Driver - -#define WHAL_STM32F411_USART2_DEVICE \ - .regmap = { \ - .base = 0x40004400, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32f4Uart_Driver - -#define WHAL_STM32F411_USART6_DEVICE \ - .regmap = { \ - .base = 0x40011400, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32f4Uart_Driver +#define WHAL_STM32F411_RCC_PLL_REGMAP \ + .base = 0x40023800, \ + .size = 0x400 +#define WHAL_STM32F411_RCC_PLL_DRIVER &whal_Stm32f4RccPll_Driver + +#define WHAL_STM32F411_GPIO_REGMAP \ + .base = 0x40020000, \ + .size = 0x2000 +#define WHAL_STM32F411_GPIO_DRIVER &whal_Stm32f4Gpio_Driver + +#define WHAL_STM32F411_USART1_REGMAP \ + .base = 0x40011000, \ + .size = 0x400 +#define WHAL_STM32F411_USART1_DRIVER &whal_Stm32f4Uart_Driver + +#define WHAL_STM32F411_USART2_REGMAP \ + .base = 0x40004400, \ + .size = 0x400 +#define WHAL_STM32F411_USART2_DRIVER &whal_Stm32f4Uart_Driver + +#define WHAL_STM32F411_USART6_REGMAP \ + .base = 0x40011400, \ + .size = 0x400 +#define WHAL_STM32F411_USART6_DRIVER &whal_Stm32f4Uart_Driver /* --- Clock gate macros --- */ /* RCC_AHB1ENR (offset 0x030) */ @@ -134,27 +124,21 @@ /* SPI device macros */ -#define WHAL_STM32F411_SPI1_DEVICE \ - .regmap = { \ - .base = 0x40013000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32f4Spi_Driver +#define WHAL_STM32F411_SPI1_REGMAP \ + .base = 0x40013000, \ + .size = 0x400 +#define WHAL_STM32F411_SPI1_DRIVER &whal_Stm32f4Spi_Driver -#define WHAL_STM32F411_SPI2_DEVICE \ - .regmap = { \ - .base = 0x40003800, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32f4Spi_Driver +#define WHAL_STM32F411_SPI2_REGMAP \ + .base = 0x40003800, \ + .size = 0x400 +#define WHAL_STM32F411_SPI2_DRIVER &whal_Stm32f4Spi_Driver /* Flash device macros */ -#define WHAL_STM32F411_FLASH_DEVICE \ - .regmap = { \ - .base = 0x40023C00, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32f4Flash_Driver +#define WHAL_STM32F411_FLASH_REGMAP \ + .base = 0x40023C00, \ + .size = 0x400 +#define WHAL_STM32F411_FLASH_DRIVER &whal_Stm32f4Flash_Driver #endif /* WHAL_STM32F411XX_H */ diff --git a/wolfHAL/platform/st/stm32h563xx.h b/wolfHAL/platform/st/stm32h563xx.h index 57f4b81..ab6fc15 100644 --- a/wolfHAL/platform/st/stm32h563xx.h +++ b/wolfHAL/platform/st/stm32h563xx.h @@ -27,47 +27,35 @@ /* --- Device macros --- */ -#define WHAL_STM32H563_RCC_PLL_DEVICE \ - .regmap = { \ - .base = 0x44020C00, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32h5RccPll_Driver - -#define WHAL_STM32H563_RCC_HSI_DEVICE \ - .regmap = { \ - .base = 0x44020C00, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32h5RccHsi_Driver - -#define WHAL_STM32H563_GPIO_DEVICE \ - .regmap = { \ - .base = 0x42020000, \ - .size = 0x2400, \ - }, \ - .driver = &whal_Stm32h5Gpio_Driver - -#define WHAL_STM32H563_USART1_DEVICE \ - .regmap = { \ - .base = 0x40013800, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32h5Uart_Driver - -#define WHAL_STM32H563_USART2_DEVICE \ - .regmap = { \ - .base = 0x40004400, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32h5Uart_Driver - -#define WHAL_STM32H563_USART3_DEVICE \ - .regmap = { \ - .base = 0x40004800, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32h5Uart_Driver +#define WHAL_STM32H563_RCC_PLL_REGMAP \ + .base = 0x44020C00, \ + .size = 0x400 +#define WHAL_STM32H563_RCC_PLL_DRIVER &whal_Stm32h5RccPll_Driver + +#define WHAL_STM32H563_RCC_HSI_REGMAP \ + .base = 0x44020C00, \ + .size = 0x400 +#define WHAL_STM32H563_RCC_HSI_DRIVER &whal_Stm32h5RccHsi_Driver + +#define WHAL_STM32H563_GPIO_REGMAP \ + .base = 0x42020000, \ + .size = 0x2400 +#define WHAL_STM32H563_GPIO_DRIVER &whal_Stm32h5Gpio_Driver + +#define WHAL_STM32H563_USART1_REGMAP \ + .base = 0x40013800, \ + .size = 0x400 +#define WHAL_STM32H563_USART1_DRIVER &whal_Stm32h5Uart_Driver + +#define WHAL_STM32H563_USART2_REGMAP \ + .base = 0x40004400, \ + .size = 0x400 +#define WHAL_STM32H563_USART2_DRIVER &whal_Stm32h5Uart_Driver + +#define WHAL_STM32H563_USART3_REGMAP \ + .base = 0x40004800, \ + .size = 0x400 +#define WHAL_STM32H563_USART3_DRIVER &whal_Stm32h5Uart_Driver /* --- Clock gate macros --- */ /* RCC_AHB2ENR (offset 0x08C) */ @@ -150,21 +138,17 @@ /* SPI device macros */ -#define WHAL_STM32H563_SPI1_DEVICE \ - .regmap = { \ - .base = 0x40013000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32h5Spi_Driver +#define WHAL_STM32H563_SPI1_REGMAP \ + .base = 0x40013000, \ + .size = 0x400 +#define WHAL_STM32H563_SPI1_DRIVER &whal_Stm32h5Spi_Driver /* RNG device macros */ -#define WHAL_STM32H563_RNG_DEVICE \ - .regmap = { \ - .base = 0x420C0800, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32h5Rng_Driver +#define WHAL_STM32H563_RNG_REGMAP \ + .base = 0x420C0800, \ + .size = 0x400 +#define WHAL_STM32H563_RNG_DRIVER &whal_Stm32h5Rng_Driver /* RCC_AHB2ENR (offset 0x08C), bit 18 */ #define WHAL_STM32H563_RNG_CLOCK \ @@ -174,12 +158,10 @@ /* Flash device macros */ -#define WHAL_STM32H563_FLASH_DEVICE \ - .regmap = { \ - .base = 0x40022000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32h5Flash_Driver +#define WHAL_STM32H563_FLASH_REGMAP \ + .base = 0x40022000, \ + .size = 0x400 +#define WHAL_STM32H563_FLASH_DRIVER &whal_Stm32h5Flash_Driver /* RCC_APB3ENR (offset 0x0A8), bit 1 */ #define WHAL_STM32H563_SBS_CLOCK \ @@ -189,12 +171,10 @@ /* Ethernet device macros */ -#define WHAL_STM32H563_ETH_DEVICE \ - .regmap = { \ - .base = 0x40028000, \ - .size = 0x1200, \ - }, \ - .driver = &whal_Stm32h5Eth_Driver +#define WHAL_STM32H563_ETH_REGMAP \ + .base = 0x40028000, \ + .size = 0x1200 +#define WHAL_STM32H563_ETH_DRIVER &whal_Stm32h5Eth_Driver /* RCC_AHB1ENR (offset 0x088), bit 19 */ #define WHAL_STM32H563_ETH_CLOCK \ diff --git a/wolfHAL/platform/st/stm32wb55xx.h b/wolfHAL/platform/st/stm32wb55xx.h index f4ee4ca..942d276 100644 --- a/wolfHAL/platform/st/stm32wb55xx.h +++ b/wolfHAL/platform/st/stm32wb55xx.h @@ -21,110 +21,80 @@ * @brief Convenience initializers for STM32WB55xx device instances. */ -#define WHAL_STM32WB55_LPUART1_DEVICE \ - .regmap = { \ - .base = 0x40008000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbUart_Driver - -#define WHAL_STM32WB55_SPI1_DEVICE \ - .regmap = { \ - .base = 0x40013000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbSpi_Driver - -#define WHAL_STM32WB55_UART1_DEVICE \ - .regmap = { \ - .base = 0x40013800, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbUart_Driver - -#define WHAL_STM32WB55_GPIO_DEVICE \ - .regmap = { \ - .base = 0x48000000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbGpio_Driver - -#define WHAL_STM32WB55_RCC_PLL_DEVICE \ - .regmap = { \ - .base = 0x58000000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbRccPll_Driver - -#define WHAL_STM32WB55_RCC_MSI_DEVICE \ - .regmap = { \ - .base = 0x58000000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbRccPll_Driver - -#define WHAL_STM32WB55_RNG_DEVICE \ - .regmap = { \ - .base = 0x58001000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbRng_Driver - -#define WHAL_STM32WB55_AES1_DEVICE \ - .regmap = { \ - .base = 0x50060000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbAes_Driver - -#define WHAL_STM32WB55_I2C1_DEVICE \ - .regmap = { \ - .base = 0x40005400, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbI2c_Driver - -#define WHAL_STM32WB55_I2C3_DEVICE \ - .regmap = { \ - .base = 0x40005C00, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbI2c_Driver - -#define WHAL_STM32WB55_IWDG_DEVICE \ - .regmap = { \ - .base = 0x40003000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbIwdg_Driver - -#define WHAL_STM32WB55_WWDG_DEVICE \ - .regmap = { \ - .base = 0x40002C00, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbWwdg_Driver - -#define WHAL_STM32WB55_FLASH_DEVICE \ - .regmap = { \ - .base = 0x58004000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbFlash_Driver - -#define WHAL_STM32WB55_DMA1_DEVICE \ - .regmap = { \ - .base = 0x40020000, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbDma_Driver - -#define WHAL_STM32WB55_DMA2_DEVICE \ - .regmap = { \ - .base = 0x40020400, \ - .size = 0x400, \ - }, \ - .driver = &whal_Stm32wbDma_Driver +#define WHAL_STM32WB55_LPUART1_REGMAP \ + .base = 0x40008000, \ + .size = 0x400 +#define WHAL_STM32WB55_LPUART1_DRIVER &whal_Stm32wbUart_Driver + +#define WHAL_STM32WB55_SPI1_REGMAP \ + .base = 0x40013000, \ + .size = 0x400 +#define WHAL_STM32WB55_SPI1_DRIVER &whal_Stm32wbSpi_Driver + +#define WHAL_STM32WB55_UART1_REGMAP \ + .base = 0x40013800, \ + .size = 0x400 +#define WHAL_STM32WB55_UART1_DRIVER &whal_Stm32wbUart_Driver + +#define WHAL_STM32WB55_GPIO_REGMAP \ + .base = 0x48000000, \ + .size = 0x400 +#define WHAL_STM32WB55_GPIO_DRIVER &whal_Stm32wbGpio_Driver + +#define WHAL_STM32WB55_RCC_PLL_REGMAP \ + .base = 0x58000000, \ + .size = 0x400 +#define WHAL_STM32WB55_RCC_PLL_DRIVER &whal_Stm32wbRccPll_Driver + +#define WHAL_STM32WB55_RCC_MSI_REGMAP \ + .base = 0x58000000, \ + .size = 0x400 +#define WHAL_STM32WB55_RCC_MSI_DRIVER &whal_Stm32wbRccMsi_Driver + +#define WHAL_STM32WB55_RNG_REGMAP \ + .base = 0x58001000, \ + .size = 0x400 +#define WHAL_STM32WB55_RNG_DRIVER &whal_Stm32wbRng_Driver + +#define WHAL_STM32WB55_AES1_REGMAP \ + .base = 0x50060000, \ + .size = 0x400 +#define WHAL_STM32WB55_AES1_DRIVER &whal_Stm32wbAes_Driver + +#define WHAL_STM32WB55_I2C1_REGMAP \ + .base = 0x40005400, \ + .size = 0x400 +#define WHAL_STM32WB55_I2C1_DRIVER &whal_Stm32wbI2c_Driver + +#define WHAL_STM32WB55_I2C3_REGMAP \ + .base = 0x40005C00, \ + .size = 0x400 +#define WHAL_STM32WB55_I2C3_DRIVER &whal_Stm32wbI2c_Driver + +#define WHAL_STM32WB55_IWDG_REGMAP \ + .base = 0x40003000, \ + .size = 0x400 +#define WHAL_STM32WB55_IWDG_DRIVER &whal_Stm32wbIwdg_Driver + +#define WHAL_STM32WB55_WWDG_REGMAP \ + .base = 0x40002C00, \ + .size = 0x400 +#define WHAL_STM32WB55_WWDG_DRIVER &whal_Stm32wbWwdg_Driver + +#define WHAL_STM32WB55_FLASH_REGMAP \ + .base = 0x58004000, \ + .size = 0x400 +#define WHAL_STM32WB55_FLASH_DRIVER &whal_Stm32wbFlash_Driver + +#define WHAL_STM32WB55_DMA1_REGMAP \ + .base = 0x40020000, \ + .size = 0x400 +#define WHAL_STM32WB55_DMA1_DRIVER &whal_Stm32wbDma_Driver + +#define WHAL_STM32WB55_DMA2_REGMAP \ + .base = 0x40020400, \ + .size = 0x400 +#define WHAL_STM32WB55_DMA2_DRIVER &whal_Stm32wbDma_Driver #define WHAL_STM32WB55_DMA1_CFG \ .dmamuxBase = 0x40020800, \ diff --git a/wolfHAL/rng/rng.h b/wolfHAL/rng/rng.h index d1906ec..9227f55 100644 --- a/wolfHAL/rng/rng.h +++ b/wolfHAL/rng/rng.h @@ -40,7 +40,8 @@ struct whal_Rng { * @param rngDev RNG instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ #ifdef WHAL_CFG_DIRECT_CALLBACKS #define whal_Rng_Init(rngDev) ((rngDev)->driver->Init((rngDev))) @@ -54,7 +55,8 @@ struct whal_Rng { * @param rngDev RNG instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Rng_Init(whal_Rng *rngDev); /* @@ -63,7 +65,8 @@ whal_Error whal_Rng_Init(whal_Rng *rngDev); * @param rngDev RNG instance to deinitialize. * * @retval WHAL_SUCCESS Driver-specific deinit completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Rng_Deinit(whal_Rng *rngDev); /* @@ -74,7 +77,8 @@ whal_Error whal_Rng_Deinit(whal_Rng *rngDev); * @param rngDataSz Number of random bytes to generate. * * @retval WHAL_SUCCESS Buffer filled with random data. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Rng_Generate(whal_Rng *rngDev, void *rngData, size_t rngDataSz); #endif diff --git a/wolfHAL/rng/stm32h5_rng.h b/wolfHAL/rng/stm32h5_rng.h index 5afec3e..a89ccf6 100644 --- a/wolfHAL/rng/stm32h5_rng.h +++ b/wolfHAL/rng/stm32h5_rng.h @@ -22,6 +22,7 @@ typedef struct whal_Stm32h5Rng_Cfg { whal_Timeout *timeout; } whal_Stm32h5Rng_Cfg; +#ifndef WHAL_CFG_RNG_API_MAPPING_STM32H5 /* * @brief Driver instance for STM32H5 RNG peripheral. */ @@ -64,5 +65,6 @@ whal_Error whal_Stm32h5Rng_Deinit(whal_Rng *rngDev); */ whal_Error whal_Stm32h5Rng_Generate(whal_Rng *rngDev, void *rngData, size_t rngDataSz); +#endif /* !WHAL_CFG_RNG_API_MAPPING_STM32H5 */ #endif /* WHAL_STM32H5_RNG_H */ diff --git a/wolfHAL/rng/stm32wb_rng.h b/wolfHAL/rng/stm32wb_rng.h index 61c3313..3680595 100644 --- a/wolfHAL/rng/stm32wb_rng.h +++ b/wolfHAL/rng/stm32wb_rng.h @@ -21,6 +21,7 @@ typedef struct whal_Stm32wbRng_Cfg { whal_Timeout *timeout; } whal_Stm32wbRng_Cfg; +#ifndef WHAL_CFG_RNG_API_MAPPING_STM32WB /* * @brief Driver instance for STM32WB RNG peripheral. */ @@ -55,5 +56,6 @@ whal_Error whal_Stm32wbRng_Deinit(whal_Rng *rngDev); * @retval WHAL_EINVAL Invalid arguments or seed/clock error detected. */ whal_Error whal_Stm32wbRng_Generate(whal_Rng *rngDev, void *rngData, size_t rngDataSz); +#endif /* !WHAL_CFG_RNG_API_MAPPING_STM32WB */ #endif /* WHAL_STM32WB_RNG_H */ diff --git a/wolfHAL/sensor/imu/bmi270_sensor.h b/wolfHAL/sensor/imu/bmi270_sensor.h index 4d70966..6c54c96 100644 --- a/wolfHAL/sensor/imu/bmi270_sensor.h +++ b/wolfHAL/sensor/imu/bmi270_sensor.h @@ -46,6 +46,7 @@ typedef struct { void (*DelayMs)(size_t ms); /* Millisecond delay function */ } whal_Bmi270_Cfg; +#ifndef WHAL_CFG_SENSOR_API_MAPPING_BMI270 /* * @brief Driver instance for the BMI270. */ @@ -90,5 +91,6 @@ whal_Error whal_Bmi270_Deinit(whal_Sensor *dev); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Bmi270_Read(whal_Sensor *dev, void *data); +#endif /* !WHAL_CFG_SENSOR_API_MAPPING_BMI270 */ #endif /* WHAL_IMU_BMI270_H */ diff --git a/wolfHAL/spi/spi.h b/wolfHAL/spi/spi.h index f93db06..931fcdb 100644 --- a/wolfHAL/spi/spi.h +++ b/wolfHAL/spi/spi.h @@ -64,7 +64,8 @@ struct whal_Spi { * @param spiDev Pointer to the SPI instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or driver rejected configuration. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ #ifdef WHAL_CFG_DIRECT_CALLBACKS #define whal_Spi_Init(spiDev) ((spiDev)->driver->Init((spiDev))) @@ -81,7 +82,8 @@ struct whal_Spi { * @param spiDev Pointer to the SPI instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or driver rejected configuration. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Spi_Init(whal_Spi *spiDev); /* @@ -90,7 +92,8 @@ whal_Error whal_Spi_Init(whal_Spi *spiDev); * @param spiDev Pointer to the SPI instance to deinitialize. * * @retval WHAL_SUCCESS Driver-specific deinit completed. - * @retval WHAL_EINVAL Null pointer or driver refused to deinit. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Spi_Deinit(whal_Spi *spiDev); /* @@ -103,7 +106,8 @@ whal_Error whal_Spi_Deinit(whal_Spi *spiDev); * @param comCfg Per-session communication parameters. * * @retval WHAL_SUCCESS Communication session started. - * @retval WHAL_EINVAL Null pointer or invalid parameters. + * @retval WHAL_EINVAL Null pointer or invalid parameters. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Spi_StartCom(whal_Spi *spiDev, whal_Spi_ComCfg *comCfg); /* @@ -115,7 +119,8 @@ whal_Error whal_Spi_StartCom(whal_Spi *spiDev, whal_Spi_ComCfg *comCfg); * @param spiDev Pointer to the SPI instance. * * @retval WHAL_SUCCESS Communication session ended. - * @retval WHAL_EINVAL Null pointer or driver error. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Spi_EndCom(whal_Spi *spiDev); /* @@ -133,7 +138,8 @@ whal_Error whal_Spi_EndCom(whal_Spi *spiDev); * @param rxLen Number of bytes to receive (0 when rx is NULL). * * @retval WHAL_SUCCESS Transfer completed. - * @retval WHAL_EINVAL Null spiDev or driver failed to transfer. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Spi_SendRecv(whal_Spi *spiDev, const void *tx, size_t txLen, void *rx, size_t rxLen); #endif diff --git a/wolfHAL/spi/stm32c0_spi.h b/wolfHAL/spi/stm32c0_spi.h index f63f1bb..8a513f7 100644 --- a/wolfHAL/spi/stm32c0_spi.h +++ b/wolfHAL/spi/stm32c0_spi.h @@ -14,11 +14,13 @@ typedef whal_Stm32wbSpi_Cfg whal_Stm32c0Spi_Cfg; +#ifndef WHAL_CFG_SPI_API_MAPPING_STM32C0 #define whal_Stm32c0Spi_Driver whal_Stm32wbSpi_Driver #define whal_Stm32c0Spi_Init whal_Stm32wbSpi_Init #define whal_Stm32c0Spi_Deinit whal_Stm32wbSpi_Deinit #define whal_Stm32c0Spi_StartCom whal_Stm32wbSpi_StartCom #define whal_Stm32c0Spi_EndCom whal_Stm32wbSpi_EndCom #define whal_Stm32c0Spi_SendRecv whal_Stm32wbSpi_SendRecv +#endif /* !WHAL_CFG_SPI_API_MAPPING_STM32C0 */ #endif /* WHAL_STM32C0_SPI_H */ diff --git a/wolfHAL/spi/stm32f4_spi.h b/wolfHAL/spi/stm32f4_spi.h index 808abb9..c59f469 100644 --- a/wolfHAL/spi/stm32f4_spi.h +++ b/wolfHAL/spi/stm32f4_spi.h @@ -31,6 +31,7 @@ typedef struct whal_Stm32f4Spi_Cfg { whal_Timeout *timeout; } whal_Stm32f4Spi_Cfg; +#ifndef WHAL_CFG_SPI_API_MAPPING_STM32F4 /* * @brief Driver instance for STM32F4 SPI peripheral. */ @@ -97,5 +98,6 @@ whal_Error whal_Stm32f4Spi_EndCom(whal_Spi *spiDev); whal_Error whal_Stm32f4Spi_SendRecv(whal_Spi *spiDev, const void *tx, size_t txLen, void *rx, size_t rxLen); +#endif /* !WHAL_CFG_SPI_API_MAPPING_STM32F4 */ #endif /* WHAL_STM32F4_SPI_H */ diff --git a/wolfHAL/spi/stm32h5_spi.h b/wolfHAL/spi/stm32h5_spi.h index f604662..ccf0cfc 100644 --- a/wolfHAL/spi/stm32h5_spi.h +++ b/wolfHAL/spi/stm32h5_spi.h @@ -25,6 +25,7 @@ typedef struct whal_Stm32h5Spi_Cfg { whal_Timeout *timeout; } whal_Stm32h5Spi_Cfg; +#ifndef WHAL_CFG_SPI_API_MAPPING_STM32H5 /* * @brief Driver instance for STM32H5 SPI peripheral. */ @@ -96,5 +97,6 @@ whal_Error whal_Stm32h5Spi_EndCom(whal_Spi *spiDev); */ whal_Error whal_Stm32h5Spi_SendRecv(whal_Spi *spiDev, const void *tx, size_t txLen, void *rx, size_t rxLen); +#endif /* !WHAL_CFG_SPI_API_MAPPING_STM32H5 */ #endif /* WHAL_STM32H5_SPI_H */ diff --git a/wolfHAL/spi/stm32wb_spi.h b/wolfHAL/spi/stm32wb_spi.h index f2d555b..8dd24d8 100644 --- a/wolfHAL/spi/stm32wb_spi.h +++ b/wolfHAL/spi/stm32wb_spi.h @@ -27,6 +27,8 @@ typedef struct whal_Stm32wbSpi_Cfg { whal_Timeout *timeout; } whal_Stm32wbSpi_Cfg; +#if !defined(WHAL_CFG_SPI_API_MAPPING_STM32WB) && \ + !defined(WHAL_CFG_SPI_API_MAPPING_STM32C0) /* * @brief Driver instance for STM32 SPI peripheral. */ @@ -93,5 +95,6 @@ whal_Error whal_Stm32wbSpi_EndCom(whal_Spi *spiDev); whal_Error whal_Stm32wbSpi_SendRecv(whal_Spi *spiDev, const void *tx, size_t txLen, void *rx, size_t rxLen); +#endif /* !WHAL_CFG_SPI_API_MAPPING */ #endif /* WHAL_STM32WB_SPI_H */ diff --git a/wolfHAL/supply/pic32cz_supc.h b/wolfHAL/supply/pic32cz_supc.h index b5053e2..a82555b 100644 --- a/wolfHAL/supply/pic32cz_supc.h +++ b/wolfHAL/supply/pic32cz_supc.h @@ -20,6 +20,7 @@ typedef struct whal_Pic32czSupc_Supply { size_t enablePos; } whal_Pic32czSupc_Supply; +#ifndef WHAL_CFG_SUPPLY_API_MAPPING_PIC32CZ /* * @brief Driver instance for PIC32CZ SUPC peripheral. */ @@ -61,5 +62,6 @@ whal_Error whal_Pic32czSupc_Enable(whal_Supply *supplyCtrl, void *supply); * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Pic32czSupc_Disable(whal_Supply *supplyCtrl, void *supply); +#endif /* !WHAL_CFG_SUPPLY_API_MAPPING_PIC32CZ */ #endif /* WHAL_PIC32CZ_SUPC_H */ diff --git a/wolfHAL/timer/systick.h b/wolfHAL/timer/systick.h index bcdb4db..5f056e2 100644 --- a/wolfHAL/timer/systick.h +++ b/wolfHAL/timer/systick.h @@ -34,6 +34,7 @@ typedef struct { whal_SysTick_TickInt tickInt; } whal_SysTick_Cfg; +#ifndef WHAL_CFG_TIMER_API_MAPPING_SYSTICK /* * @brief Driver instance for the Cortex-M SysTick timer. */ @@ -47,7 +48,7 @@ extern const whal_TimerDriver whal_SysTick_Driver; * @retval WHAL_SUCCESS Initialization completed. * @retval WHAL_EINVAL Invalid arguments. */ -whal_Error SysTick_Init(whal_Timer *timerDev); +whal_Error whal_SysTick_Init(whal_Timer *timerDev); /* * @brief Deinitialize the SysTick timer. * @@ -56,7 +57,7 @@ whal_Error SysTick_Init(whal_Timer *timerDev); * @retval WHAL_SUCCESS Deinit completed. * @retval WHAL_EINVAL Invalid arguments. */ -whal_Error SysTick_Deinit(whal_Timer *timerDev); +whal_Error whal_SysTick_Deinit(whal_Timer *timerDev); /* * @brief Start the SysTick counter. * @@ -65,7 +66,7 @@ whal_Error SysTick_Deinit(whal_Timer *timerDev); * @retval WHAL_SUCCESS Timer started. * @retval WHAL_EINVAL Invalid arguments. */ -whal_Error SysTick_Start(whal_Timer *timerDev); +whal_Error whal_SysTick_Start(whal_Timer *timerDev); /* * @brief Stop the SysTick counter. * @@ -74,7 +75,7 @@ whal_Error SysTick_Start(whal_Timer *timerDev); * @retval WHAL_SUCCESS Timer stopped. * @retval WHAL_EINVAL Invalid arguments. */ -whal_Error SysTick_Stop(whal_Timer *timerDev); +whal_Error whal_SysTick_Stop(whal_Timer *timerDev); /* * @brief Reset the SysTick counter state. * @@ -83,6 +84,7 @@ whal_Error SysTick_Stop(whal_Timer *timerDev); * @retval WHAL_SUCCESS Timer reset. * @retval WHAL_EINVAL Invalid arguments. */ -whal_Error SysTick_Reset(whal_Timer *timerDev); +whal_Error whal_SysTick_Reset(whal_Timer *timerDev); +#endif /* !WHAL_CFG_TIMER_API_MAPPING_SYSTICK */ #endif /* WHAL_SYSTICK_H */ diff --git a/wolfHAL/timer/timer.h b/wolfHAL/timer/timer.h index c6d7049..cbdc43c 100644 --- a/wolfHAL/timer/timer.h +++ b/wolfHAL/timer/timer.h @@ -43,7 +43,8 @@ struct whal_Timer{ * @param timerDev Timer instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ #ifdef WHAL_CFG_DIRECT_CALLBACKS #define whal_Timer_Init(timerDev) ((timerDev)->driver->Init((timerDev))) @@ -58,7 +59,8 @@ struct whal_Timer{ * @param timerDev Timer instance to initialize. * * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Timer_Init(whal_Timer *timerDev); /* @@ -67,7 +69,8 @@ whal_Error whal_Timer_Init(whal_Timer *timerDev); * @param timerDev Timer instance to deinitialize. * * @retval WHAL_SUCCESS Driver-specific deinit completed. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Timer_Deinit(whal_Timer *timerDev); /* @@ -76,7 +79,8 @@ whal_Error whal_Timer_Deinit(whal_Timer *timerDev); * @param timerDev Timer instance to start. * * @retval WHAL_SUCCESS Timer started. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Timer_Start(whal_Timer *timerDev); /* @@ -85,7 +89,8 @@ whal_Error whal_Timer_Start(whal_Timer *timerDev); * @param timerDev Timer instance to stop. * * @retval WHAL_SUCCESS Timer stopped. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Timer_Stop(whal_Timer *timerDev); /* @@ -94,7 +99,8 @@ whal_Error whal_Timer_Stop(whal_Timer *timerDev); * @param timerDev Timer instance to reset. * * @retval WHAL_SUCCESS Timer reset. - * @retval WHAL_EINVAL Null pointer or missing driver function. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Timer_Reset(whal_Timer *timerDev); #endif diff --git a/wolfHAL/uart/pic32cz_uart.h b/wolfHAL/uart/pic32cz_uart.h index d13071d..dd550d7 100644 --- a/wolfHAL/uart/pic32cz_uart.h +++ b/wolfHAL/uart/pic32cz_uart.h @@ -43,6 +43,7 @@ typedef struct whal_Pic32czUart_Cfg { whal_Timeout *timeout; } whal_Pic32czUart_Cfg; +#ifndef WHAL_CFG_UART_API_MAPPING_PIC32CZ /* * @brief Driver instance for PIC32CZ UART. */ @@ -88,5 +89,6 @@ whal_Error whal_Pic32czUart_Send(whal_Uart *uartDev, const void *data, size_t da * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Pic32czUart_Recv(whal_Uart *uartDev, void *data, size_t dataSz); +#endif /* !WHAL_CFG_UART_API_MAPPING_PIC32CZ */ #endif /* WHAL_PIC32CZ_UART_H */ diff --git a/wolfHAL/uart/stm32c0_uart.h b/wolfHAL/uart/stm32c0_uart.h index edcc0fc..eb8dd84 100644 --- a/wolfHAL/uart/stm32c0_uart.h +++ b/wolfHAL/uart/stm32c0_uart.h @@ -30,10 +30,12 @@ typedef whal_Stm32wbUart_Cfg whal_Stm32c0Uart_Cfg; */ #define WHAL_STM32C0_LPUART_BRR(clk, baud) WHAL_STM32WB_LPUART_BRR(clk, baud) +#ifndef WHAL_CFG_UART_API_MAPPING_STM32C0 #define whal_Stm32c0Uart_Driver whal_Stm32wbUart_Driver #define whal_Stm32c0Uart_Init whal_Stm32wbUart_Init #define whal_Stm32c0Uart_Deinit whal_Stm32wbUart_Deinit #define whal_Stm32c0Uart_Send whal_Stm32wbUart_Send #define whal_Stm32c0Uart_Recv whal_Stm32wbUart_Recv +#endif /* !WHAL_CFG_UART_API_MAPPING_STM32C0 */ #endif /* WHAL_STM32C0_UART_H */ diff --git a/wolfHAL/uart/stm32f4_uart.h b/wolfHAL/uart/stm32f4_uart.h index bc123f8..9ecd713 100644 --- a/wolfHAL/uart/stm32f4_uart.h +++ b/wolfHAL/uart/stm32f4_uart.h @@ -42,6 +42,7 @@ typedef struct whal_Stm32f4Uart_Cfg { whal_Timeout *timeout; } whal_Stm32f4Uart_Cfg; +#ifndef WHAL_CFG_UART_API_MAPPING_STM32F4 /* * @brief Driver instance for STM32F4 UART peripheral. */ @@ -90,5 +91,6 @@ whal_Error whal_Stm32f4Uart_Send(whal_Uart *uartDev, const void *data, size_t da * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32f4Uart_Recv(whal_Uart *uartDev, void *data, size_t dataSz); +#endif /* !WHAL_CFG_UART_API_MAPPING_STM32F4 */ #endif /* WHAL_STM32F4_UART_H */ diff --git a/wolfHAL/uart/stm32h5_uart.h b/wolfHAL/uart/stm32h5_uart.h index ebaa139..d4e40e0 100644 --- a/wolfHAL/uart/stm32h5_uart.h +++ b/wolfHAL/uart/stm32h5_uart.h @@ -30,10 +30,12 @@ typedef whal_Stm32wbUart_Cfg whal_Stm32h5Uart_Cfg; */ #define WHAL_STM32H5_LPUART_BRR(clk, baud) WHAL_STM32WB_LPUART_BRR(clk, baud) +#ifndef WHAL_CFG_UART_API_MAPPING_STM32H5 #define whal_Stm32h5Uart_Driver whal_Stm32wbUart_Driver #define whal_Stm32h5Uart_Init whal_Stm32wbUart_Init #define whal_Stm32h5Uart_Deinit whal_Stm32wbUart_Deinit #define whal_Stm32h5Uart_Send whal_Stm32wbUart_Send #define whal_Stm32h5Uart_Recv whal_Stm32wbUart_Recv +#endif /* !WHAL_CFG_UART_API_MAPPING_STM32H5 */ #endif /* WHAL_STM32H5_UART_H */ diff --git a/wolfHAL/uart/stm32wb_uart.h b/wolfHAL/uart/stm32wb_uart.h index 637836e..75eaa84 100644 --- a/wolfHAL/uart/stm32wb_uart.h +++ b/wolfHAL/uart/stm32wb_uart.h @@ -30,6 +30,10 @@ typedef struct whal_Stm32wbUart_Cfg { whal_Timeout *timeout; } whal_Stm32wbUart_Cfg; +#if !defined(WHAL_CFG_UART_API_MAPPING_STM32WB) && \ + !defined(WHAL_CFG_UART_API_MAPPING_STM32WB_DMA) && \ + !defined(WHAL_CFG_UART_API_MAPPING_STM32H5) && \ + !defined(WHAL_CFG_UART_API_MAPPING_STM32C0) /* * @brief Polled UART driver. Implements Init, Deinit, Send, Recv. */ @@ -78,5 +82,6 @@ whal_Error whal_Stm32wbUart_Send(whal_Uart *uartDev, const void *data, size_t da * @retval WHAL_EINVAL Invalid arguments. */ whal_Error whal_Stm32wbUart_Recv(whal_Uart *uartDev, void *data, size_t dataSz); +#endif /* !WHAL_CFG_UART_API_MAPPING */ #endif /* WHAL_STM32WB_UART_H */ diff --git a/wolfHAL/uart/stm32wb_uart_dma.h b/wolfHAL/uart/stm32wb_uart_dma.h index e883e41..e1a3d4e 100644 --- a/wolfHAL/uart/stm32wb_uart_dma.h +++ b/wolfHAL/uart/stm32wb_uart_dma.h @@ -29,6 +29,7 @@ typedef struct { volatile whal_Error rxResult; } whal_Stm32wbUartDma_Cfg; +#ifndef WHAL_CFG_UART_API_MAPPING_STM32WB_DMA /* * @brief DMA-backed UART driver. Implements Init, Deinit, Send, Recv, * SendAsync, RecvAsync. @@ -100,6 +101,7 @@ whal_Error whal_Stm32wbUartDma_SendAsync(whal_Uart *uartDev, const void *data, */ whal_Error whal_Stm32wbUartDma_RecvAsync(whal_Uart *uartDev, void *data, size_t dataSz); +#endif /* !WHAL_CFG_UART_API_MAPPING_STM32WB_DMA */ /* * @brief DMA TX completion callback for use with whal_Stm32wbDma_IRQHandler. diff --git a/wolfHAL/uart/uart.h b/wolfHAL/uart/uart.h index 36b8a85..65bb4a9 100644 --- a/wolfHAL/uart/uart.h +++ b/wolfHAL/uart/uart.h @@ -25,9 +25,9 @@ typedef struct { whal_Error (*Send)(whal_Uart *uartDev, const void *data, size_t dataSz); /* Receive into a buffer. */ whal_Error (*Recv)(whal_Uart *uartDev, void *data, size_t dataSz); - /* Start an asynchronous transmit. Returns immediately. */ + /* Start an asynchronous transmit. NULL if not supported. */ whal_Error (*SendAsync)(whal_Uart *uartDev, const void *data, size_t dataSz); - /* Start an asynchronous receive. Returns immediately. */ + /* Start an asynchronous receive. NULL if not supported. */ whal_Error (*RecvAsync)(whal_Uart *uartDev, void *data, size_t dataSz); } whal_UartDriver; @@ -53,8 +53,9 @@ struct whal_Uart { * * @param uartDev Pointer to the UART instance to initialize. * - * @retval WHAL_SUCCESS Driver-specific init completed. - * @retval WHAL_EINVAL Null pointer or driver rejected configuration. + * @retval WHAL_SUCCESS Driver-specific init completed. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Uart_Init(whal_Uart *uartDev); @@ -63,8 +64,9 @@ whal_Error whal_Uart_Init(whal_Uart *uartDev); * * @param uartDev Pointer to the UART instance to deinitialize. * - * @retval WHAL_SUCCESS Driver-specific deinit completed. - * @retval WHAL_EINVAL Null pointer or driver refused to deinit. + * @retval WHAL_SUCCESS Driver-specific deinit completed. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Uart_Deinit(whal_Uart *uartDev); @@ -75,8 +77,9 @@ whal_Error whal_Uart_Deinit(whal_Uart *uartDev); * @param data Buffer to transmit. * @param dataSz Number of bytes to send. * - * @retval WHAL_SUCCESS Buffer was queued or transmitted. - * @retval WHAL_EINVAL Null pointer or driver failed to send. + * @retval WHAL_SUCCESS Buffer was queued or transmitted. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Uart_Send(whal_Uart *uartDev, const void *data, size_t dataSz); @@ -87,8 +90,9 @@ whal_Error whal_Uart_Send(whal_Uart *uartDev, const void *data, size_t dataSz); * @param data Destination buffer. * @param dataSz Maximum number of bytes to read. * - * @retval WHAL_SUCCESS Buffer was filled or receive started. - * @retval WHAL_EINVAL Null pointer or driver failed to receive. + * @retval WHAL_SUCCESS Buffer was filled or receive started. + * @retval WHAL_EINVAL Null pointer. + * @retval WHAL_ENOTIMPL Operation not implemented by this driver. */ whal_Error whal_Uart_Recv(whal_Uart *uartDev, void *data, size_t dataSz); @@ -97,15 +101,15 @@ whal_Error whal_Uart_Recv(whal_Uart *uartDev, void *data, size_t dataSz); * * Returns immediately. The buffer must remain valid until the transfer * completes. Completion signaling is driver-specific (e.g., a status - * field in the driver config). Drivers that do not support async return - * WHAL_EINVAL. + * field in the driver config). * * @param uartDev Pointer to the UART instance. * @param data Buffer to transmit. Must remain valid until completion. * @param dataSz Number of bytes to send. * - * @retval WHAL_SUCCESS Transfer started. - * @retval WHAL_EINVAL Null pointer or async not supported. + * @retval WHAL_SUCCESS Transfer started. + * @retval WHAL_EINVAL Invalid arguments. + * @retval WHAL_ENOTIMPL Async not supported by this driver. */ whal_Error whal_Uart_SendAsync(whal_Uart *uartDev, const void *data, size_t dataSz); @@ -114,15 +118,15 @@ whal_Error whal_Uart_SendAsync(whal_Uart *uartDev, const void *data, size_t data * * Returns immediately. The buffer must remain valid until the transfer * completes. Completion signaling is driver-specific (e.g., a status - * field in the driver config). Drivers that do not support async return - * WHAL_EINVAL. + * field in the driver config). * * @param uartDev Pointer to the UART instance. * @param data Receive buffer. Must remain valid until completion. * @param dataSz Number of bytes to receive. * - * @retval WHAL_SUCCESS Receive started. - * @retval WHAL_EINVAL Null pointer or async not supported. + * @retval WHAL_SUCCESS Receive started. + * @retval WHAL_EINVAL Invalid arguments. + * @retval WHAL_ENOTIMPL Async not supported by this driver. */ whal_Error whal_Uart_RecvAsync(whal_Uart *uartDev, void *data, size_t dataSz); #endif diff --git a/wolfHAL/watchdog/stm32wb_iwdg.h b/wolfHAL/watchdog/stm32wb_iwdg.h index 9701206..dad52e2 100644 --- a/wolfHAL/watchdog/stm32wb_iwdg.h +++ b/wolfHAL/watchdog/stm32wb_iwdg.h @@ -35,6 +35,7 @@ typedef struct { whal_Timeout *timeout; } whal_Stm32wbIwdg_Cfg; +#ifndef WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_IWDG /* * @brief Driver instance for STM32WB IWDG. */ @@ -76,5 +77,6 @@ whal_Error whal_Stm32wbIwdg_Deinit(whal_Watchdog *wdgDev); * @retval WHAL_EINVAL Null pointer. */ whal_Error whal_Stm32wbIwdg_Refresh(whal_Watchdog *wdgDev); +#endif /* !WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_IWDG */ #endif /* WHAL_STM32WB_IWDG_H */ diff --git a/wolfHAL/watchdog/stm32wb_wwdg.h b/wolfHAL/watchdog/stm32wb_wwdg.h index f1d2000..b772b25 100644 --- a/wolfHAL/watchdog/stm32wb_wwdg.h +++ b/wolfHAL/watchdog/stm32wb_wwdg.h @@ -36,6 +36,7 @@ typedef struct { uint8_t counter; /* 7-bit counter value (must be > 0x3F) */ } whal_Stm32wbWwdg_Cfg; +#ifndef WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_WWDG /* * @brief Driver instance for STM32WB WWDG. */ @@ -76,5 +77,6 @@ whal_Error whal_Stm32wbWwdg_Deinit(whal_Watchdog *wdgDev); * @retval WHAL_EINVAL Null pointer. */ whal_Error whal_Stm32wbWwdg_Refresh(whal_Watchdog *wdgDev); +#endif /* !WHAL_CFG_WATCHDOG_API_MAPPING_STM32WB_WWDG */ #endif /* WHAL_STM32WB_WWDG_H */