15#include <i2c_spi_interface.h>
19#define BMP3_SHUTTLE_ID 0xD3
22static uint8_t dev_addr;
27BMP3_INTF_RET_TYPE bmp3_i2c_read(uint8_t reg_addr, uint8_t *reg_data, uint32_t len,
void *intf_ptr)
29 HAL_StatusTypeDef halStatus = HAL_OK;
31 uint32_t devAddr = i2cSpiPtr->i2cAddress;
32 int8_t rslt = BMP3_OK;
34 halStatus = HAL_I2C_Mem_Read(i2cSpiPtr->i2c, devAddr, reg_addr, I2C_MEMADD_SIZE_8BIT, reg_data, len, HAL_MAX_DELAY);
36 if (halStatus != HAL_OK) {
37 rslt = BMP3_E_COMM_FAIL;
46BMP3_INTF_RET_TYPE bmp3_i2c_write(uint8_t reg_addr,
const uint8_t *reg_data, uint32_t len,
void *intf_ptr)
48 HAL_StatusTypeDef halStatus = HAL_OK;
50 uint32_t devAddr = i2cSpiPtr->i2cAddress;
51 int8_t rslt = BMP3_OK;
53 halStatus = HAL_I2C_Mem_Write(i2cSpiPtr->i2c, devAddr, reg_addr, I2C_MEMADD_SIZE_8BIT, (uint8_t *)reg_data, len, HAL_MAX_DELAY);
55 if (halStatus != HAL_OK) {
56 rslt = BMP3_E_COMM_FAIL;
58 halStatus = HAL_I2C_Mem_Write(i2cSpiPtr->i2c, devAddr, reg_addr, I2C_MEMADD_SIZE_8BIT, (uint8_t *)reg_data, len, HAL_MAX_DELAY);
60 if (halStatus != HAL_OK) {
61 rslt = BMP3_E_COMM_FAIL;
71BMP3_INTF_RET_TYPE bmp3_spi_read(uint8_t reg_addr, uint8_t *reg_data, uint32_t len,
void *intf_ptr)
73#ifdef __STM32F4xx_HAL_SPI_H
74 uint8_t device_addr = *(uint8_t*)intf_ptr;
85BMP3_INTF_RET_TYPE bmp3_spi_write(uint8_t reg_addr,
const uint8_t *reg_data, uint32_t len,
void *intf_ptr)
87#ifdef __STM32F4xx_HAL_SPI_H
88 uint8_t device_addr = *(uint8_t*)intf_ptr;
99void bmp3_delay_us(uint32_t period,
void *intf_ptr)
108void bmp3_check_rslt(
const char api_name[], int8_t rslt)
116 case BMP3_E_NULL_PTR:
117 printf(
"API [%s] Error [%d] : Null pointer\r\n", api_name, rslt);
119 case BMP3_W_MIN_PRES:
120 printf(
"API [%s] Error [%d] : Minimum Pressure LT 30000\r\n", api_name, rslt);
122 case BMP3_W_MAX_PRES:
123 printf(
"API [%s] Error [%d] : Maximum Pressure GT 125000\r\n", api_name, rslt);
125 case BMP3_E_COMM_FAIL:
126 printf(
"API [%s] Error [%d] : Communication failure\r\n", api_name, rslt);
128 case BMP3_E_INVALID_LEN:
129 printf(
"API [%s] Error [%d] : Incorrect length parameter\r\n", api_name, rslt);
131 case BMP3_E_DEV_NOT_FOUND:
132 printf(
"API [%s] Error [%d] : Device not found\r\n", api_name, rslt);
134 case BMP3_E_CONFIGURATION_ERR:
135 printf(
"API [%s] Error [%d] : Configuration Error\r\n", api_name, rslt);
137 case BMP3_W_SENSOR_NOT_ENABLED:
138 printf(
"API [%s] Error [%d] : Warning when Sensor not enabled\r\n", api_name, rslt);
140 case BMP3_W_INVALID_FIFO_REQ_FRAME_CNT:
141 printf(
"API [%s] Error [%d] : Warning when Fifo watermark level is not in limit\r\n", api_name, rslt);
144 printf(
"API [%s] Error [%d] : Unknown error code\r\n", api_name, rslt);
149BMP3_INTF_RET_TYPE bmp3_interface_init(
struct bmp3_dev *bmp3, uint8_t intf)
151 int8_t rslt = BMP3_OK;
156 if (intf == BMP3_I2C_INTF)
158 printf(
"I2C Interface\n");
159 dev_addr = (BMP3_ADDR_I2C_SEC << 1);
160 bmp3->read = bmp3_i2c_read;
161 bmp3->write = bmp3_i2c_write;
162 bmp3->intf = BMP3_I2C_INTF;
165 i2cPtr->i2cAddress = dev_addr;
168 else if (intf == BMP3_SPI_INTF)
170 printf(
"SPI Interface\n");
172 bmp3->read = bmp3_spi_read;
173 bmp3->write = bmp3_spi_write;
174 bmp3->intf = BMP3_SPI_INTF;
177 bmp3->delay_us = bmp3_delay_us;
181 rslt = BMP3_E_NULL_PTR;
187void bmp3_coines_deinit(
void)
189 (void)fflush(stdout);
191 (void)coines_set_shuttleboard_vdd_vddio_config(0, 0);
192 coines_delay_msec(1000);
196 coines_delay_msec(1000);
197 (void)coines_close_comm_intf(COINES_COMM_INTF_USB, NULL);
: Header for main.c file. This file contains the common defines of the application.
void delayUS(uint16_t us)
Busy-waits for the given number of microseconds using TIM1 (1 MHz counter – see MX_TIM1_Init()'s pres...