/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : hal_i2c.c * @brief : I2C hardware abstraction layer source file ****************************************************************************** */ /* USER CODE END Header */ #include "hal.h" #include "hal_i2c.h" /** * @brief Initialize I2C hardware * @param config: I2C configuration structure * @retval HAL status code */ hal_status_t hal_i2c_init(const hal_i2c_config_t *config) { if (config == NULL) { return HAL_INVALID_PARAM; } if (config->instance >= HAL_I2C_INSTANCE_MAX) { return HAL_INVALID_PARAM; } /* Call architecture specific I2C initialization */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 /* TODO: Implement STM32F1 I2C initialization */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 /* TODO: Implement STM32F4 I2C initialization */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 /* TODO: Implement STM32F7 I2C initialization */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 /* TODO: Implement STM32L4 I2C initialization */ return HAL_OK; #else #error "Unsupported HAL architecture" return HAL_ERROR; #endif } /** * @brief Deinitialize I2C hardware * @param instance: I2C instance identifier * @retval HAL status code */ hal_status_t hal_i2c_deinit(hal_i2c_instance_t instance) { if (instance >= HAL_I2C_INSTANCE_MAX) { return HAL_INVALID_PARAM; } /* Call architecture specific I2C deinitialization */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 /* TODO: Implement STM32F1 I2C deinitialization */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 /* TODO: Implement STM32F4 I2C deinitialization */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 /* TODO: Implement STM32F7 I2C deinitialization */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 /* TODO: Implement STM32L4 I2C deinitialization */ return HAL_OK; #else #error "Unsupported HAL architecture" return HAL_ERROR; #endif } /** * @brief Transmit data to I2C slave * @param instance: I2C instance identifier * @param dev_address: Slave device address * @param data: Pointer to data buffer * @param length: Data length in bytes * @param timeout: Timeout in milliseconds * @retval HAL status code */ hal_status_t hal_i2c_master_transmit(hal_i2c_instance_t instance, uint16_t dev_address, const uint8_t *data, uint16_t length, uint32_t timeout) { if (data == NULL || length == 0) { return HAL_INVALID_PARAM; } if (instance >= HAL_I2C_INSTANCE_MAX) { return HAL_INVALID_PARAM; } /* Call architecture specific I2C transmit implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 /* TODO: Implement STM32F1 I2C transmit */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 /* TODO: Implement STM32F4 I2C transmit */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 /* TODO: Implement STM32F7 I2C transmit */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 /* TODO: Implement STM32L4 I2C transmit */ return HAL_OK; #else #error "Unsupported HAL architecture" return HAL_ERROR; #endif } /** * @brief Receive data from I2C slave * @param instance: I2C instance identifier * @param dev_address: Slave device address * @param data: Pointer to data buffer * @param length: Data length to receive in bytes * @param timeout: Timeout in milliseconds * @retval HAL status code */ hal_status_t hal_i2c_master_receive(hal_i2c_instance_t instance, uint16_t dev_address, uint8_t *data, uint16_t length, uint32_t timeout) { if (data == NULL || length == 0) { return HAL_INVALID_PARAM; } if (instance >= HAL_I2C_INSTANCE_MAX) { return HAL_INVALID_PARAM; } /* Call architecture specific I2C receive implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 /* TODO: Implement STM32F1 I2C receive */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 /* TODO: Implement STM32F4 I2C receive */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 /* TODO: Implement STM32F7 I2C receive */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 /* TODO: Implement STM32L4 I2C receive */ return HAL_OK; #else #error "Unsupported HAL architecture" return HAL_ERROR; #endif } /** * @brief Transmit and receive data from I2C slave * @param instance: I2C instance identifier * @param dev_address: Slave device address * @param tx_data: Pointer to transmit data buffer * @param tx_length: Transmit data length in bytes * @param rx_data: Pointer to receive data buffer * @param rx_length: Receive data length in bytes * @param timeout: Timeout in milliseconds * @retval HAL status code */ hal_status_t hal_i2c_master_transmit_receive(hal_i2c_instance_t instance, uint16_t dev_address, const uint8_t *tx_data, uint16_t tx_length, uint8_t *rx_data, uint16_t rx_length, uint32_t timeout) { if (tx_data == NULL || rx_data == NULL || tx_length == 0 || rx_length == 0) { return HAL_INVALID_PARAM; } if (instance >= HAL_I2C_INSTANCE_MAX) { return HAL_INVALID_PARAM; } /* Call architecture specific I2C transmit and receive implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 /* TODO: Implement STM32F1 I2C transmit and receive */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 /* TODO: Implement STM32F4 I2C transmit and receive */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 /* TODO: Implement STM32F7 I2C transmit and receive */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 /* TODO: Implement STM32L4 I2C transmit and receive */ return HAL_OK; #else #error "Unsupported HAL architecture" return HAL_ERROR; #endif } /** * @brief Check if I2C bus is ready * @param instance: I2C instance identifier * @param dev_address: Slave device address * @param trials: Number of trials * @param timeout: Timeout in milliseconds * @retval HAL status code */ hal_status_t hal_i2c_is_device_ready(hal_i2c_instance_t instance, uint16_t dev_address, uint32_t trials, uint32_t timeout) { if (instance >= HAL_I2C_INSTANCE_MAX) { return HAL_INVALID_PARAM; } /* Call architecture specific I2C device ready check implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 /* TODO: Implement STM32F1 I2C device ready check */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 /* TODO: Implement STM32F4 I2C device ready check */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 /* TODO: Implement STM32F7 I2C device ready check */ return HAL_OK; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 /* TODO: Implement STM32L4 I2C device ready check */ return HAL_OK; #else #error "Unsupported HAL architecture" return HAL_ERROR; #endif }