33#include "freertos/FreeRTOS.h"
34#include "driver/spi_master.h"
35#include "driver/gpio.h"
43#define BOSCH_APP30_SHUTTLE_BHI260_FW
68static const char *TAG =
"BHI";
74static volatile bool dataReady =
false;
76static bool init_done =
false;
78#if CONFIG_SENSOR_IRQ != -1
79static void IRAM_ATTR bhi260_set_flag(
void *arg)
85static void bhi260_isr_init()
87#if CONFIG_SENSOR_IRQ != -1
88 gpio_config_t io_conf;
89 io_conf.intr_type = GPIO_INTR_NEGEDGE;
90 io_conf.mode = GPIO_MODE_INPUT;
91 io_conf.pin_bit_mask = (1ULL << CONFIG_SENSOR_IRQ);
92 io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
93 io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
94 gpio_config(&io_conf);
95 gpio_set_intr_type((gpio_num_t)CONFIG_SENSOR_IRQ, GPIO_INTR_POSEDGE);
97 gpio_install_isr_service(0);
99 gpio_isr_handler_add((gpio_num_t)CONFIG_SENSOR_IRQ, bhi260_set_flag, NULL);
103static void accel_process_callback(uint8_t sensor_id,
const uint8_t *data_ptr, uint32_t len, uint64_t *
timestamp,
void *user_data)
105 struct bhy2_data_xyz data;
106 float scaling_factor = BoschSensorUtils::get_sensor_default_scaling(sensor_id);
107 bhy2_parse_xyz(data_ptr, &data);
108 ESP_LOGI(TAG,
"%s: x: %f, y: %f, z: %f;",
bhy.getSensorName(sensor_id),
109 data.x * scaling_factor,
110 data.y * scaling_factor,
111 data.z * scaling_factor);
114static void gyro_process_callback(uint8_t sensor_id,
const uint8_t *data_ptr, uint32_t len, uint64_t *
timestamp,
void *user_data)
116 struct bhy2_data_xyz data;
117 float scaling_factor = BoschSensorUtils::get_sensor_default_scaling(sensor_id);
118 bhy2_parse_xyz(data_ptr, &data);
119 ESP_LOGI(TAG,
"%s: x: %f, y: %f, z: %f;",
bhy.getSensorName(sensor_id),
120 data.x * scaling_factor,
121 data.y * scaling_factor,
122 data.z * scaling_factor);
125esp_err_t bhi260_init()
127 ESP_LOGI(TAG,
"----DRIVER BHI260AP----");
130 bhy.setPins(CONFIG_SENSOR_RST);
132#if CONFIG_USE_I2C_INTERFACE
135 uint8_t address = BHI260AP_SLAVE_ADDRESS_L;
138#if CONFIG_I2C_COMMUNICATION_METHOD_CALLBACK_RW
141 i2c_drv_device_init(address);
143 ESP_LOGI(TAG,
"Implemented using read and write callback methods");
145 ESP_LOGI(TAG,
"Initialize BHI260AP using I2C interface");
147 ESP_LOGE(TAG,
"Failed to initialize the BHI260AP !");
153#if CONFIG_I2C_COMMUNICATION_METHOD_BUILTIN_RW
154#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5,0,0)) && defined(CONFIG_SENSORLIB_ESP_IDF_NEW_API)
156 ESP_LOGI(TAG,
"Implemented using built-in read and write methods (Use higher version >= 5.0 API)");
160 extern i2c_master_bus_handle_t bus_handle;
162 if (
bhy.begin(bus_handle, address)) {
163 ESP_LOGI(TAG,
"Initialize BHI260AP using I2C interface");
165 ESP_LOGE(TAG,
"Failed to initialize the BHI260AP !");
171 ESP_LOGI(TAG,
"Implemented using built-in read and write methods (Use lower version < 5.0 API)");
172 if (
bhy.begin((i2c_port_t)CONFIG_I2C_MASTER_PORT_NUM, address, CONFIG_SENSOR_SDA, CONFIG_SENSOR_SCL)) {
173 ESP_LOGI(TAG,
"Initialize BHI260AP using I2C interface");
175 ESP_LOGE(TAG,
"Failed to initialize the BHI260AP !");
185 spi_device_handle_t spi = NULL;
188 if (
bhy.begin(SPI2_HOST, spi, CONFIG_SPI_CS, CONFIG_SPI_MOSI, CONFIG_SPI_MISO, CONFIG_SPI_SCK)) {
189 ESP_LOGI(TAG,
"Initialize BHI260AP using SPI interface");
191 ESP_LOGE(TAG,
"Failed to initialize the BHI260AP !");
197 BoschSensorInfo info =
bhy.getSensorInfo();
200 float sample_rate = 1.0;
201 uint32_t report_latency_ms = 0;
204 bhy.configure(BoschSensorID::ACCEL_PASSTHROUGH, sample_rate, report_latency_ms);
206 bhy.configure(BoschSensorID::GYRO_PASSTHROUGH, sample_rate, report_latency_ms);
209 bhy.onResultEvent(BoschSensorID::ACCEL_PASSTHROUGH, accel_process_callback);
212 bhy.onResultEvent(BoschSensorID::GYRO_PASSTHROUGH, gyro_process_callback);
227#if CONFIG_SENSOR_IRQ != -1
232#if CONFIG_SENSOR_IRQ != -1
uint32_t hal_callback(SensorCommCustomHal::Operation op, void *param1, void *param2)
bool i2c_wr_function(uint8_t addr, uint8_t reg, uint8_t *buf, size_t len, bool writeReg, bool isWrite)