8 Commits

5 changed files with 41 additions and 20 deletions
+17 -2
View File
@@ -1,7 +1,22 @@
cmake_minimum_required(VERSION 3.1) cmake_minimum_required(VERSION 3.17)
set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11)
if ("${CONFIG_USE_I2C_LEGACY_DRIVER}")
if ("$ENV{IDF_VERSION}" VERSION_GREATER_EQUAL "7.0.0")
message(SEND_ERROR "[ BMX280 ] The legacy I2C driver has been removed since version 7.0.0. Unless you intended to compile for older IDF versions, change your build configuration to use the I2C master driver.")
else()
message(WARNING "[ BMX280 ] The legacy I2C driver has been deprecated since version 6.0.0. The driver will not compile with the legacy I2C driver enabled in version 7.0.0 or later.")
endif()
message(STATUS "[ BMX280 ] Using the legacy I2C driver.")
set(BMX280_I2C_DRIVER_REQUIRE "driver")
else()
message(STATUS "[ BMX280 ] Using the new I2C master driver.")
set(BMX280_I2C_DRIVER_REQUIRE "esp_driver_i2c")
endif()
idf_component_register( idf_component_register(
SRCS bmx280.c SRCS bmx280.c
INCLUDE_DIRS "include" INCLUDE_DIRS "include"
REQUIRES driver REQUIRES "${BMX280_I2C_DRIVER_REQUIRE}"
) )
+8 -7
View File
@@ -12,14 +12,15 @@ menu "BMX280 Options"
bool "I2C Master Driver (i2c_master.h)" bool "I2C Master Driver (i2c_master.h)"
help help
Use I2C Master Driver (i2c_master.h) for ESP-IDF >= 5.3. Use I2C Master Driver (i2c_master.h) for ESP-IDF >= 5.3.
config BMX280_I2C_CLK_SPEED_HZ
int "I2C Clock Speed (Hz)"
default 100000
range 1000 400000
help
Set the I2C clock speed in Hz.
endchoice endchoice
config BMX280_I2C_CLK_SPEED_HZ
int "I2C Clock Speed (Hz)"
default 100000
range 1000 400000
help
Set the I2C clock speed in Hz. Only applies to the new I2C Master driver.
choice BMX280_EXPECT_DEVICE choice BMX280_EXPECT_DEVICE
prompt "Installed Sensor Model" prompt "Installed Sensor Model"
help help
+9 -9
View File
@@ -338,12 +338,6 @@ static esp_err_t bmx280_probe(bmx280_t *bmx280)
#endif #endif
} }
static esp_err_t bmx280_reset(bmx280_t *bmx280)
{
const static uint8_t din[] = { BMX280_RESET_VEC };
return bmx280_write(bmx280, BMX280_REG_RESET, din, sizeof din);
}
static esp_err_t bmx280_calibrate(bmx280_t *bmx280) static esp_err_t bmx280_calibrate(bmx280_t *bmx280)
{ {
// Honestly, the best course of action is to read the high and low banks // Honestly, the best course of action is to read the high and low banks
@@ -448,10 +442,16 @@ bmx280_t* bmx280_create_master(i2c_master_bus_handle_t bus_handle)
} }
#endif #endif
esp_err_t bmx280_reset(bmx280_t *bmx280)
{
const static uint8_t din[] = { BMX280_RESET_VEC };
return bmx280_write(bmx280, BMX280_REG_RESET, din, sizeof din);
}
void bmx280_close(bmx280_t *bmx280) void bmx280_close(bmx280_t *bmx280)
{ {
#if CONFIG_USE_I2C_MASTER_DRIVER #if CONFIG_USE_I2C_MASTER_DRIVER
if(bmx280->i2c_dev!=NULL) if(bmx280 != NULL && bmx280->i2c_dev != NULL)
i2c_master_bus_rm_device(bmx280->i2c_dev); i2c_master_bus_rm_device(bmx280->i2c_dev);
#endif #endif
free(bmx280); free(bmx280);
@@ -634,7 +634,7 @@ esp_err_t bmx280_readout(bmx280_t *bmx280, int32_t *temperature, uint32_t *press
return error; return error;
*temperature = BME280_compensate_T_int32(bmx280, *temperature = BME280_compensate_T_int32(bmx280,
(buffer[0] << 12) | (buffer[1] << 4) | (buffer[0] >> 4) (buffer[0] << 12) | (buffer[1] << 4) | (buffer[2] >> 4)
); );
} }
@@ -644,7 +644,7 @@ esp_err_t bmx280_readout(bmx280_t *bmx280, int32_t *temperature, uint32_t *press
return error; return error;
*pressure = BME280_compensate_P_int64(bmx280, *pressure = BME280_compensate_P_int64(bmx280,
(buffer[0] << 12) | (buffer[1] << 4) | (buffer[0] >> 4) (buffer[0] << 12) | (buffer[1] << 4) | (buffer[2] >> 4)
); );
} }
+6
View File
@@ -57,6 +57,12 @@ BMXAPI bmx280_t* bmx280_create_legacy(i2c_port_t port);
#define bmx280_create_master(port) static_assert(0, "You have the wrong driver configuration for using the new I2C master driver.") #define bmx280_create_master(port) static_assert(0, "You have the wrong driver configuration for using the new I2C master driver.")
#endif #endif
/**
* Restart the sensor, effectively puting it into sleep mode.
* @param bmx280 The instance to reset.
*/
esp_err_t bmx280_reset(bmx280_t *bmx280);
/** /**
* Destroy your the instance. * Destroy your the instance.
* @param bmx280 The instance to destroy. * @param bmx280 The instance to destroy.
+1 -2
View File
@@ -57,7 +57,6 @@ typedef enum bmx280_tstby_t {
typedef enum bmx280_iirf_t { typedef enum bmx280_iirf_t {
BMX280_IIR_NONE = 0x0, BMX280_IIR_NONE = 0x0,
BMX280_IIR_X1,
BMX280_IIR_X2, BMX280_IIR_X2,
BMX280_IIR_X4, BMX280_IIR_X4,
BMX280_IIR_X8, BMX280_IIR_X8,
@@ -126,7 +125,7 @@ typedef struct bmx280_config_t {
#elif (CONFIG_BMX280_DEFAULT_STANDBY_10M) #elif (CONFIG_BMX280_DEFAULT_STANDBY_10M)
#define BMX280_DEFAULT_STANDBY BME280_STANDBY_10M #define BMX280_DEFAULT_STANDBY BME280_STANDBY_10M
#else #else
#define BMX280_DEFAULT_STANDBY BMX280_STANDBY_20M #define BMX280_DEFAULT_STANDBY BME280_STANDBY_20M
#endif #endif
#if (CONFIG_BMX280_DEFAULT_IIR_NONE) #if (CONFIG_BMX280_DEFAULT_IIR_NONE)