diff --git a/README.md b/README.md
index 7c506897b..94e48ec56 100644
--- a/README.md
+++ b/README.md
@@ -43,7 +43,7 @@ The following table shows the compatibility of this BSP with different ESP-IDF v
| [M5 Atom S3](bsp/m5_atom_s3) | esp32s3 | :radio_button: Button
:pager: LCD Display (gc9a01)
|
|
| [M5Dial](bsp/m5dial) | esp32s3 | :radio_button: Button
:pager: LCD Display (gc9a01)
:white_circle: Knob
:point_up: Display Touch (ft5x06)
|
|
| [M5Stack Core](bsp/m5stack_core) | esp32 | :speaker: Audio Speaker
:radio_button: Button
:pager: LCD Display (ili9341)
:floppy_disk: uSD Card
|
|
-| [M5Stack Core2](bsp/m5stack_core_2) | esp32 | :musical_note: Audio
:speaker: Audio Speaker
:pager: LCD Display (ili9341)
:floppy_disk: uSD Card
:point_up: Display Touch (ft5x06)
|
|
+| [M5Stack Core2](bsp/m5stack_core_2) | esp32 | :musical_note: Audio
:speaker: Audio Speaker
:pager: LCD Display (ili9341)
:video_game: IMU
:floppy_disk: uSD Card
:point_up: Display Touch (ft5x06)
|
|
| [M5Stack CoreS3](bsp/m5stack_core_s3) | esp32s3 | :musical_note: Audio
:microphone: Audio Microphone (es7210)
:speaker: Audio Speaker (aw88298)
:camera: Camera
:pager: LCD Display (ili9341)
:floppy_disk: uSD Card
:point_up: Display Touch (ft5x06)
|
|
| [m5stack_tab5](bsp/m5stack_tab5) | esp32p4 | :musical_note: Audio
:microphone: Audio Microphone (es7210)
:speaker: Audio Speaker (es8388)
:camera: Camera (SC202CS)
:pager: LCD Display (ili9881c)
:floppy_disk: uSD Card
:point_up: Display Touch (gt911)
|
|
@@ -76,7 +76,7 @@ Here is a summary of the available examples:
| [Camera Example](examples/display_camera_video) | Stream camera output to display (LVGL) | 4 boards
[esp32_p4_eye](bsp/esp32_p4_eye)
[esp32_p4_function_ev_board](bsp/esp32_p4_function_ev_board)
[esp32_s3_eye](bsp/esp32_s3_eye)
[m5stack_tab5](bsp/m5stack_tab5) | [Flash Example](https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display_camera_video) |
| [LVGL Benchmark Example](examples/display_lvgl_benchmark) | Run LVGL benchmark tests | 10 boards
[esp-box](bsp/esp-box)
[esp-box-3](bsp/esp-box-3)
[esp-box-lite](bsp/esp-box-lite)
[esp32_p4_function_ev_board](bsp/esp32_p4_function_ev_board)
[esp32_s2_kaluga_kit](bsp/esp32_s2_kaluga_kit)
[esp32_s3_eye](bsp/esp32_s3_eye)
[esp32_s3_korvo_2](bsp/esp32_s3_korvo_2)
[esp32_s3_lcd_ev_board](bsp/esp32_s3_lcd_ev_board)
[m5dial](bsp/m5dial)
[m5stack_core_s3](bsp/m5stack_core_s3) | - |
| [LVGL Demos Example](examples/display_lvgl_demos) | Run the LVGL demo player - all LVGL examples are included (LVGL) | 11 boards
[esp-box](bsp/esp-box)
[esp-box-3](bsp/esp-box-3)
[esp-box-lite](bsp/esp-box-lite)
[esp32_p4_function_ev_board](bsp/esp32_p4_function_ev_board)
[esp32_s2_kaluga_kit](bsp/esp32_s2_kaluga_kit)
[esp32_s3_eye](bsp/esp32_s3_eye)
[esp32_s3_korvo_2](bsp/esp32_s3_korvo_2)
[esp32_s3_lcd_ev_board](bsp/esp32_s3_lcd_ev_board)
[m5dial](bsp/m5dial)
[m5stack_core_s3](bsp/m5stack_core_s3)
[m5stack_tab5](bsp/m5stack_tab5) | [Flash Example](https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display_lvgl_demos-) |
-| [Display Rotation Example](examples/display_rotation) | Rotate screen using buttons or an accelerometer (`BSP_CAPS_IMU`, if available) | 11 boards
[esp-box](bsp/esp-box)
[esp-box-3](bsp/esp-box-3)
[esp-box-lite](bsp/esp-box-lite)
[esp32_p4_eye](bsp/esp32_p4_eye)
[esp32_p4_function_ev_board](bsp/esp32_p4_function_ev_board)
[esp32_s3_korvo_2](bsp/esp32_s3_korvo_2)
[esp32_s3_lcd_ev_board](bsp/esp32_s3_lcd_ev_board)
[m5dial](bsp/m5dial)
[m5stack_core](bsp/m5stack_core)
[m5stack_core_s3](bsp/m5stack_core_s3)
[m5stack_tab5](bsp/m5stack_tab5) | [Flash Example](https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display_rotation-) |
+| [Display Rotation Example](examples/display_rotation) | Rotate screen using buttons or an accelerometer (`BSP_CAPS_IMU`, if available) | 12 boards
[esp-box](bsp/esp-box)
[esp-box-3](bsp/esp-box-3)
[esp-box-lite](bsp/esp-box-lite)
[esp32_p4_eye](bsp/esp32_p4_eye)
[esp32_p4_function_ev_board](bsp/esp32_p4_function_ev_board)
[esp32_s3_korvo_2](bsp/esp32_s3_korvo_2)
[esp32_s3_lcd_ev_board](bsp/esp32_s3_lcd_ev_board)
[m5dial](bsp/m5dial)
[m5stack_core](bsp/m5stack_core)
[m5stack_core_2](bsp/m5stack_core_2)
[m5stack_core_s3](bsp/m5stack_core_s3)
[m5stack_tab5](bsp/m5stack_tab5) | [Flash Example](https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display_rotation-) |
| [Display SD card Example](examples/display_sdcard) | Example of mounting an SD card using SD-MMC/SPI with display interaction. This example is also supported on boards without a display. | 4 boards
[esp-box-3](bsp/esp-box-3)
[esp32_p4_function_ev_board](bsp/esp32_p4_function_ev_board)
[esp32_s3_korvo_2](bsp/esp32_s3_korvo_2)
[m5stack_tab5](bsp/m5stack_tab5) | [Flash Example](https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display_sdcard) |
| [Sensors Example](examples/display_sensors) | Display sensor data on a monochrome screen (LVGL) | 1 board
[esp32_azure_iot_kit](bsp/esp32_azure_iot_kit) | [Flash Example](https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display_sensors-) |
| [USB HID Example](examples/display_usb_hid) | USB HID demo (keyboard, mouse, or gamepad visualization using LVGL) | 3 boards
[esp32_p4_function_ev_board](bsp/esp32_p4_function_ev_board)
[esp32_s3_usb_otg](bsp/esp32_s3_usb_otg)
[m5stack_tab5](bsp/m5stack_tab5) | - |
diff --git a/bsp/esp-box-3/API.md b/bsp/esp-box-3/API.md
index 211f4dbca..8964e42ec 100644
--- a/bsp/esp-box-3/API.md
+++ b/bsp/esp-box-3/API.md
@@ -361,9 +361,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount micorSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -405,7 +405,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@174131247247055153101226240333375213242264326064 slot
## Functions Documentation
@@ -492,7 +492,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -533,7 +533,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -706,7 +706,7 @@ esp_codec_dev_close(mic_codec_dev);
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -753,7 +753,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -931,7 +931,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
| esp\_err\_t | [**bsp\_display\_enter\_sleep**](#function-bsp_display_enter_sleep) (void)
_Set display enter sleep mode._ |
| esp\_err\_t | [**bsp\_display\_exit\_sleep**](#function-bsp_display_exit_sleep) (void)
_Set display exit sleep mode._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_disp\_rotation\_t rotation)
_Rotate screen._ |
@@ -979,7 +979,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@162353266256110021144121070106066250353172262057 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -1130,7 +1130,7 @@ All the display (LCD, backlight, touch) will exit sleep mode.
* ESP\_ERR\_NOT\_SUPPORTED if this function is not supported by the panel
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/esp-box-lite/API.md b/bsp/esp-box-lite/API.md
index cefe3735a..edbf1fb64 100644
--- a/bsp/esp-box-lite/API.md
+++ b/bsp/esp-box-lite/API.md
@@ -533,7 +533,7 @@ esp_codec_dev_close(mic_codec_dev);
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -579,7 +579,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -760,7 +760,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_disp\_rotation\_t rotation)
_Rotate screen._ |
@@ -806,7 +806,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@057075243115011177151225015352142366254316103165 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -909,7 +909,7 @@ Brightness is controlled with PWM signal to a pin controlling backlight. Brightn
* ESP\_ERR\_INVALID\_ARG Parameter error
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/esp-box/API.md b/bsp/esp-box/API.md
index 816767b23..ffa753d43 100644
--- a/bsp/esp-box/API.md
+++ b/bsp/esp-box/API.md
@@ -475,7 +475,7 @@ esp_codec_dev_close(mic_codec_dev);
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -522,7 +522,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -704,7 +704,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_disp\_rotation\_t rotation)
_Rotate screen._ |
@@ -752,7 +752,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@253222174100052000363137251127170007250356221316 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -863,7 +863,7 @@ Brightness is controlled with PWM signal to a pin controlling backlight. Brightn
* ESP\_ERR\_INVALID\_ARG Parameter error
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/esp32_azure_iot_kit/API.md b/bsp/esp32_azure_iot_kit/API.md
index 1aec16f70..2ff6bca18 100644
--- a/bsp/esp32_azure_iot_kit/API.md
+++ b/bsp/esp32_azure_iot_kit/API.md
@@ -353,9 +353,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount micorSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -393,7 +393,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@354020064273004034125150362017366357007152002366 slot
## Functions Documentation
@@ -480,7 +480,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -521,7 +521,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -733,7 +733,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
|
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
|
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
|
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_disp\_rotation\_t rotation)
_Rotate screen._ |
@@ -775,7 +775,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@132246350373227251107362040047056327304373171205 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -824,7 +824,7 @@ esp_err_t bsp_display_brightness_set (
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/esp32_c3_lcdkit/API.md b/bsp/esp32_c3_lcdkit/API.md
index 8eed6e527..5d740e871 100644
--- a/bsp/esp32_c3_lcdkit/API.md
+++ b/bsp/esp32_c3_lcdkit/API.md
@@ -380,7 +380,7 @@ esp_codec_dev_close(mic_codec_dev);
| Type | Name |
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -411,7 +411,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -591,7 +591,7 @@ Below are some of the most relevant predefined constants:
| void | [**bsp\_display\_delete**](#function-bsp_display_delete) (void)
_Delete display panel._ |
| esp\_err\_t | [**bsp\_display\_enter\_sleep**](#function-bsp_display_enter_sleep) (void)
_Set display enter sleep mode._ |
| esp\_err\_t | [**bsp\_display\_exit\_sleep**](#function-bsp_display_exit_sleep) (void)
_Set display exit sleep mode._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| esp\_err\_t | [**bsp\_display\_new\_with\_handles**](#function-bsp_display_new_with_handles) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, [**bsp\_lcd\_handles\_t**](#struct-bsp_lcd_handles_t) \*ret\_handles)
_Create new display panel._ |
@@ -638,7 +638,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@125046010247036331076054016160075074254342053321 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -820,7 +820,7 @@ All the display (LCD, backlight, touch) will exit sleep mode.
* ESP\_ERR\_NOT\_SUPPORTED if this function is not supported by the panel
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/esp32_lyrat/API.md b/bsp/esp32_lyrat/API.md
index 9000d8d11..7d11fb9ba 100644
--- a/bsp/esp32_lyrat/API.md
+++ b/bsp/esp32_lyrat/API.md
@@ -324,9 +324,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount microSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -363,7 +363,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@150323276305060271130345245334261241313134327134 slot
## Functions Documentation
@@ -450,7 +450,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -491,7 +491,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -664,7 +664,7 @@ esp_codec_dev_close(mic_codec_dev);
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -710,7 +710,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
diff --git a/bsp/esp32_p4_eye/API.md b/bsp/esp32_p4_eye/API.md
index 0ad28bab5..d4b8cc610 100644
--- a/bsp/esp32_p4_eye/API.md
+++ b/bsp/esp32_p4_eye/API.md
@@ -385,9 +385,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount micorSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -429,7 +429,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@176273346050055366206363164150140264044224330356 slot
## Functions Documentation
@@ -516,7 +516,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -557,7 +557,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -729,7 +729,7 @@ esp_codec_dev_close(mic_codec_dev);
| Type | Name |
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -759,7 +759,7 @@ esp_codec_dev_handle_t bsp_audio_codec_microphone_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -936,7 +936,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
| esp\_err\_t | [**bsp\_display\_enter\_sleep**](#function-bsp_display_enter_sleep) (void)
_Set display enter sleep mode._ |
| esp\_err\_t | [**bsp\_display\_exit\_sleep**](#function-bsp_display_exit_sleep) (void)
_Set display exit sleep mode._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_disp\_rotation\_t rotation)
_Rotate screen._ |
@@ -983,7 +983,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@152154047334064045030230336070200115125317134024 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -1126,7 +1126,7 @@ All the display (LCD, backlight, touch) will exit sleep mode.
* ESP\_ERR\_NOT\_SUPPORTED if this function is not supported by the panel
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
@@ -1639,7 +1639,7 @@ Camera usage can be quite complex. For a complete example, refer to the [`displa
| Type | Name |
| ---: | :--- |
-| struct | [**bsp\_camera\_cfg\_t**](#struct-bsp_camera_cfg_t)
_BSP camera configuration structure (for future use)_ |
+| struct | [**bsp\_camera\_cfg\_t**](#struct-bsp_camera_cfg_t)
_BSP camera configuration structure (for future use)._ |
## Functions
@@ -1663,7 +1663,7 @@ Camera usage can be quite complex. For a complete example, refer to the [`displa
### struct `bsp_camera_cfg_t`
-_BSP camera configuration structure (for future use)_
+_BSP camera configuration structure (for future use)._
Variables:
diff --git a/bsp/esp32_p4_function_ev_board/API.md b/bsp/esp32_p4_function_ev_board/API.md
index 5ccbb3ce6..ee00cf307 100644
--- a/bsp/esp32_p4_function_ev_board/API.md
+++ b/bsp/esp32_p4_function_ev_board/API.md
@@ -324,9 +324,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount microSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -366,7 +366,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@045343360220276315262105036155214057070000234336 slot
## Functions Documentation
@@ -453,7 +453,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -494,7 +494,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -883,7 +883,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
| void | [**bsp\_display\_delete**](#function-bsp_display_delete) (void)
_Delete display panel._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| esp\_err\_t | [**bsp\_display\_new\_with\_handles**](#function-bsp_display_new_with_handles) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, [**bsp\_lcd\_handles\_t**](#struct-bsp_lcd_handles_t) \*ret\_handles)
_Create new display panel._ |
@@ -936,7 +936,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@115033147126261326050136253257316030030056275134 flags
- [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) hw_cfg
Display HW configuration
@@ -950,7 +950,7 @@ _BSP display configuration structure._
Variables:
-- struct [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) dsi_bus
+- struct bsp\_display\_config\_t::@244221147217214117241201215350221306174174200170 dsi_bus
- [**bsp\_hdmi\_resolution\_t**](#enum-bsp_hdmi_resolution_t) hdmi_resolution
HDMI resolution selection
@@ -1103,7 +1103,7 @@ void bsp_display_delete (
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
@@ -1496,7 +1496,7 @@ Camera usage can be quite complex. For a complete example, refer to the [`displa
| Type | Name |
| ---: | :--- |
-| struct | [**bsp\_camera\_cfg\_t**](#struct-bsp_camera_cfg_t)
_BSP camera configuration structure (for future use)_ |
+| struct | [**bsp\_camera\_cfg\_t**](#struct-bsp_camera_cfg_t)
_BSP camera configuration structure (for future use)._ |
## Functions
@@ -1518,7 +1518,7 @@ Camera usage can be quite complex. For a complete example, refer to the [`displa
### struct `bsp_camera_cfg_t`
-_BSP camera configuration structure (for future use)_
+_BSP camera configuration structure (for future use)._
Variables:
diff --git a/bsp/esp32_s2_kaluga_kit/API.md b/bsp/esp32_s2_kaluga_kit/API.md
index ef82667a6..2fe9039ad 100644
--- a/bsp/esp32_s2_kaluga_kit/API.md
+++ b/bsp/esp32_s2_kaluga_kit/API.md
@@ -516,7 +516,7 @@ esp_codec_dev_close(mic_codec_dev);
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -562,7 +562,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -743,7 +743,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
|
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
|
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
|
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_disp\_rotation\_t rotation)
_Rotate screen._ |
@@ -790,7 +790,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@012316310200124265365361236220347067115054162122 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -839,7 +839,7 @@ esp_err_t bsp_display_brightness_set (
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/esp32_s3_eye/API.md b/bsp/esp32_s3_eye/API.md
index 16c7edab4..9038b360f 100644
--- a/bsp/esp32_s3_eye/API.md
+++ b/bsp/esp32_s3_eye/API.md
@@ -385,9 +385,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount microSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -423,7 +423,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@057237240374372231100272165106142303235104117241 slot
## Functions Documentation
@@ -510,7 +510,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -551,7 +551,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -723,7 +723,7 @@ esp_codec_dev_close(mic_codec_dev);
| Type | Name |
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -755,7 +755,7 @@ esp_codec_dev_handle_t bsp_audio_codec_microphone_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -935,7 +935,7 @@ Below are some of the most relevant predefined constants:
| void | [**bsp\_display\_delete**](#function-bsp_display_delete) (void)
_Delete display panel._ |
| esp\_err\_t | [**bsp\_display\_enter\_sleep**](#function-bsp_display_enter_sleep) (void)
_Set display enter sleep mode._ |
| esp\_err\_t | [**bsp\_display\_exit\_sleep**](#function-bsp_display_exit_sleep) (void)
_Set display exit sleep mode._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| esp\_err\_t | [**bsp\_display\_new\_with\_handles**](#function-bsp_display_new_with_handles) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, [**bsp\_lcd\_handles\_t**](#struct-bsp_lcd_handles_t) \*ret\_handles)
_Create new display panel._ |
@@ -982,7 +982,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@312172167147241066240210311110337104361250063307 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -1164,7 +1164,7 @@ All the display (LCD, backlight, touch) will exit sleep mode.
* ESP\_ERR\_NOT\_SUPPORTED if this function is not supported by the panel
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
@@ -1617,7 +1617,7 @@ Camera usage can be quite complex. For a complete example, refer to the [`displa
| Type | Name |
| ---: | :--- |
-| struct | [**bsp\_camera\_cfg\_t**](#struct-bsp_camera_cfg_t)
_BSP camera configuration structure (for future use)_ |
+| struct | [**bsp\_camera\_cfg\_t**](#struct-bsp_camera_cfg_t)
_BSP camera configuration structure (for future use)._ |
## Functions
@@ -1652,7 +1652,7 @@ Camera usage can be quite complex. For a complete example, refer to the [`displa
### struct `bsp_camera_cfg_t`
-_BSP camera configuration structure (for future use)_
+_BSP camera configuration structure (for future use)._
Variables:
diff --git a/bsp/esp32_s3_korvo_1/API.md b/bsp/esp32_s3_korvo_1/API.md
index de50f59a0..2a00f81de 100644
--- a/bsp/esp32_s3_korvo_1/API.md
+++ b/bsp/esp32_s3_korvo_1/API.md
@@ -382,9 +382,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount microSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -422,7 +422,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@373335067016377073117336262023232341206022073103 slot
## Functions Documentation
@@ -509,7 +509,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -550,7 +550,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -723,8 +723,8 @@ esp_codec_dev_close(mic_codec_dev);
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf\_mic**](#function-bsp_audio_get_codec_itf_mic) (void)
_Get es7210 codec I2S interface (initialized in bsp\_audio\_init)_ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf\_spk**](#function-bsp_audio_get_codec_itf_spk) (void)
_Get es8311 codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf\_mic**](#function-bsp_audio_get_codec_itf_mic) (void)
_Get es7210 codec I2S interface (initialized in bsp\_audio\_init)._ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf\_spk**](#function-bsp_audio_get_codec_itf_spk) (void)
_Get es8311 codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -775,7 +775,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf_mic`
-_Get es7210 codec I2S interface (initialized in bsp\_audio\_init)_
+_Get es7210 codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf_mic (
void
@@ -790,7 +790,7 @@ const audio_codec_data_if_t * bsp_audio_get_codec_itf_mic (
* Pointer to codec I2S interface handle or NULL when error occured
### function `bsp_audio_get_codec_itf_spk`
-_Get es8311 codec I2S interface (initialized in bsp\_audio\_init)_
+_Get es8311 codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf_spk (
void
diff --git a/bsp/esp32_s3_korvo_2/API.md b/bsp/esp32_s3_korvo_2/API.md
index d12856b33..d660b84dd 100644
--- a/bsp/esp32_s3_korvo_2/API.md
+++ b/bsp/esp32_s3_korvo_2/API.md
@@ -383,9 +383,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount microSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -418,7 +418,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@016240370273072060146312157307134034233262154266 slot
## Functions Documentation
@@ -505,7 +505,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -546,7 +546,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -719,7 +719,7 @@ esp_codec_dev_close(mic_codec_dev);
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -765,7 +765,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -941,7 +941,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
|
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
|
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_disp\_rotation\_t rotation)
_Rotate screen._ |
@@ -994,7 +994,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@122262007316057173021315105074304304333001037225 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -1075,7 +1075,7 @@ esp_err_t bsp_display_brightness_set (
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/esp32_s3_lcd_ev_board/API.md b/bsp/esp32_s3_lcd_ev_board/API.md
index 604a9ab02..276e7b9a5 100644
--- a/bsp/esp32_s3_lcd_ev_board/API.md
+++ b/bsp/esp32_s3_lcd_ev_board/API.md
@@ -517,7 +517,7 @@ esp_codec_dev_close(mic_codec_dev);
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
-| esp\_err\_t | [**bsp\_audio\_poweramp\_enable**](#function-bsp_audio_poweramp_enable) (bool enable)
_Enable/disable audio power amplifier (deprecated)_ |
+| esp\_err\_t | [**bsp\_audio\_poweramp\_enable**](#function-bsp_audio_poweramp_enable) (bool enable)
_Enable/disable audio power amplifier (deprecated)._ |
## Macros
@@ -619,7 +619,7 @@ This function will be called in `bsp_audio_codec_speaker_init()` and`bsp_audio_c
* other error codes
### function `bsp_audio_poweramp_enable`
-_Enable/disable audio power amplifier (deprecated)_
+_Enable/disable audio power amplifier (deprecated)._
```c
esp_err_t bsp_audio_poweramp_enable (
bool enable
@@ -766,12 +766,12 @@ Below are some of the most relevant predefined constants:
| Type | Name |
| ---: | :--- |
-| esp\_err\_t | [**bsp\_display\_backlight\_off**](#function-bsp_display_backlight_off) (void)
_Turn off display backlight (Useless, just for compatibility)_ |
-| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight (Useless, just for compatibility)_ |
-| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness (Useless, just for compatibility)_ |
-| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness (Useless, just for compatibility)_ |
+| esp\_err\_t | [**bsp\_display\_backlight\_off**](#function-bsp_display_backlight_off) (void)
_Turn off display backlight (Useless, just for compatibility)._ |
+| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight (Useless, just for compatibility)._ |
+| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness (Useless, just for compatibility)._ |
+| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness (Useless, just for compatibility)._ |
| uint16\_t | [**bsp\_display\_get\_h\_res**](#function-bsp_display_get_h_res) (void)
_Get display horizontal resolution._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| uint16\_t | [**bsp\_display\_get\_v\_res**](#function-bsp_display_get_v_res) (void)
_Get display vertical resolution._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
@@ -855,7 +855,7 @@ Variables:
### function `bsp_display_backlight_off`
-_Turn off display backlight (Useless, just for compatibility)_
+_Turn off display backlight (Useless, just for compatibility)._
```c
esp_err_t bsp_display_backlight_off (
void
@@ -870,7 +870,7 @@ esp_err_t bsp_display_backlight_off (
* ESP\_ERR\_NOT\_SUPPORTED: Always
### function `bsp_display_backlight_on`
-_Turn on display backlight (Useless, just for compatibility)_
+_Turn on display backlight (Useless, just for compatibility)._
```c
esp_err_t bsp_display_backlight_on (
void
@@ -885,7 +885,7 @@ esp_err_t bsp_display_backlight_on (
* ESP\_ERR\_NOT\_SUPPORTED: Always
### function `bsp_display_brightness_init`
-_Initialize display's brightness (Useless, just for compatibility)_
+_Initialize display's brightness (Useless, just for compatibility)._
```c
esp_err_t bsp_display_brightness_init (
void
@@ -900,7 +900,7 @@ esp_err_t bsp_display_brightness_init (
* ESP\_ERR\_NOT\_SUPPORTED: Always
### function `bsp_display_brightness_set`
-_Set display's brightness (Useless, just for compatibility)_
+_Set display's brightness (Useless, just for compatibility)._
```c
esp_err_t bsp_display_brightness_set (
int brightness_percent
@@ -940,7 +940,7 @@ This function should be called after calling `bsp_display_new()` or`bsp_display_
Horizontal resolution. Return 0 if error occurred.
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/esp32_s3_usb_otg/API.md b/bsp/esp32_s3_usb_otg/API.md
index 953ab5156..885d552f2 100644
--- a/bsp/esp32_s3_usb_otg/API.md
+++ b/bsp/esp32_s3_usb_otg/API.md
@@ -304,9 +304,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount microSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -346,7 +346,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@156355232134201107124006315226324213302265315072 slot
## Functions Documentation
@@ -433,7 +433,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -474,7 +474,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -686,7 +686,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_disp\_rotation\_t rotation)
_Rotate screen._ |
@@ -734,7 +734,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@061110005037323322145071060013172206021243210140 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -837,7 +837,7 @@ Brightness is controlled with PWM signal to a pin controlling backlight. Brightn
* ESP\_ERR\_INVALID\_ARG Parameter error
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/esp_wrover_kit/API.md b/bsp/esp_wrover_kit/API.md
index d1a2c5701..d2742c019 100644
--- a/bsp/esp_wrover_kit/API.md
+++ b/bsp/esp_wrover_kit/API.md
@@ -246,9 +246,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount micorSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -289,7 +289,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@350121005006057213043213060362232376152032151172 slot
## Functions Documentation
@@ -376,7 +376,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -417,7 +417,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -629,7 +629,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_disp\_rotation\_t rotation)
_Rotate screen._ |
@@ -678,7 +678,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@322312353151144171256135245047112104343323311031 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -781,7 +781,7 @@ Brightness is controlled with PWM signal to a pin controlling backlight. Brightn
* ESP\_ERR\_INVALID\_ARG Parameter error
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/m5_atom_s3/API.md b/bsp/m5_atom_s3/API.md
index abc2601cf..901844bd9 100644
--- a/bsp/m5_atom_s3/API.md
+++ b/bsp/m5_atom_s3/API.md
@@ -496,7 +496,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_display\_rotation\_t rotation)
_Rotate screen._ |
@@ -545,7 +545,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@252043215315011101223226070256317112332311023057 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -648,7 +648,7 @@ Brightness is controlled with PWM signal to a pin controlling backlight. Brightn
* ESP\_ERR\_INVALID\_ARG Parameter error
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/m5dial/API.md b/bsp/m5dial/API.md
index d6a68ccc2..60c46f993 100644
--- a/bsp/m5dial/API.md
+++ b/bsp/m5dial/API.md
@@ -497,7 +497,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_display\_rotation\_t rotation)
_Rotate screen._ |
@@ -548,7 +548,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@062305036263101015145357066171331323375237132115 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -659,7 +659,7 @@ Brightness is controlled with PWM signal to a pin controlling backlight. Brightn
* ESP\_ERR\_INVALID\_ARG Parameter error
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/m5stack_core/API.md b/bsp/m5stack_core/API.md
index 086da343e..f8a93cd08 100644
--- a/bsp/m5stack_core/API.md
+++ b/bsp/m5stack_core/API.md
@@ -307,9 +307,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount micorSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -343,7 +343,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@236241121206362277264335151253073323046241266320 slot
## Functions Documentation
@@ -430,7 +430,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -471,7 +471,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -800,7 +800,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_display\_rotation\_t rotation)
_Rotate screen._ |
@@ -849,7 +849,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@145311233264376227326315352110016343022171067206 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -952,7 +952,7 @@ Brightness is controlled with AXP2101 via I2C. Backlight must be already initial
* ESP\_ERR\_INVALID\_ARG Parameter error
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/m5stack_core_2/API.md b/bsp/m5stack_core_2/API.md
index 81932f265..333402d98 100644
--- a/bsp/m5stack_core_2/API.md
+++ b/bsp/m5stack_core_2/API.md
@@ -149,7 +149,7 @@ You can use these macros to conditionally compile code depending on feature avai
| define | [**BSP\_CAPS\_AUDIO\_SPEAKER**](#define-bsp_caps_audio_speaker) 1
|
| define | [**BSP\_CAPS\_BUTTONS**](#define-bsp_caps_buttons) 0
|
| define | [**BSP\_CAPS\_DISPLAY**](#define-bsp_caps_display) 1
|
-| define | [**BSP\_CAPS\_IMU**](#define-bsp_caps_imu) 0
|
+| define | [**BSP\_CAPS\_IMU**](#define-bsp_caps_imu) 1
|
| define | [**BSP\_CAPS\_SDCARD**](#define-bsp_caps_sdcard) 1
|
| define | [**BSP\_CAPS\_TOUCH**](#define-bsp_caps_touch) 1
|
@@ -323,9 +323,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount micorSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -359,7 +359,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@132350041170260133155121317013073035053147032164 slot
## Functions Documentation
@@ -446,7 +446,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -487,7 +487,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -659,7 +659,7 @@ esp_codec_dev_close(mic_codec_dev);
| Type | Name |
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -693,7 +693,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occured
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -875,7 +875,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_display\_rotation\_t rotation)
_Rotate screen._ |
@@ -926,7 +926,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@006210011313305032011122352263337253262106231226 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -1037,7 +1037,7 @@ Brightness is controlled with AXP2101 via I2C. Backlight must be already initial
* ESP\_ERR\_INVALID\_ARG Parameter error
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/m5stack_core_2/README.md b/bsp/m5stack_core_2/README.md
index 711550e15..5d5395460 100644
--- a/bsp/m5stack_core_2/README.md
+++ b/bsp/m5stack_core_2/README.md
@@ -57,7 +57,7 @@ Core2 V1.1 is an iterative version of Core2 with the following upgrades and addi
|:heavy_check_mark:| :speaker: AUDIO_SPEAKER| | | |
| :x: | :microphone: AUDIO_MIC | | | |
|:heavy_check_mark:| :floppy_disk: SDCARD | | idf | >=5.3 |
-| :x: | :video_game: IMU | | | |
+|:heavy_check_mark:| :video_game: IMU | | | |
@@ -71,9 +71,10 @@ Core2 V1.1 is an iterative version of Core2 with the following upgrades and addi
| ------- | ----------- | ---------------------- |
| [Display Example](https://github.com/espressif/esp-bsp/tree/master/examples/display) | Show an image on the screen with a simple startup animation (LVGL) | [Flash Example](https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display-) |
| [Display, Audio and Photo Example](https://github.com/espressif/esp-bsp/tree/master/examples/display_audio_photo) | Complex demo: browse files from filesystem and play/display JPEG, WAV, or TXT files (LVGL) | [Flash Example](https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display_audio_photo-) |
+| [Display Rotation Example](https://github.com/espressif/esp-bsp/tree/master/examples/display_rotation) | Rotate screen using buttons or an accelerometer (`BSP_CAPS_IMU`, if available) | [Flash Example](https://espressif.github.io/esp-launchpad/?flashConfigURL=https://espressif.github.io/esp-bsp/config.toml&app=display_rotation-) |
-
+
\ No newline at end of file
diff --git a/bsp/m5stack_core_2/idf_component.yml b/bsp/m5stack_core_2/idf_component.yml
index bfc10ff98..4902810fc 100644
--- a/bsp/m5stack_core_2/idf_component.yml
+++ b/bsp/m5stack_core_2/idf_component.yml
@@ -1,4 +1,4 @@
-version: "3.0.1"
+version: "3.0.2"
description: Board Support Package (BSP) for M5Stack Core2
url: https://github.com/espressif/esp-bsp/tree/master/bsp/m5stack_core_2
@@ -27,6 +27,11 @@ dependencies:
version: "~1.5"
public: true
+ mpu6886:
+ version: "^1.0.0"
+ public: true
+ override_path: "../../components/mpu6886"
+
examples:
- path: ../../examples/display
- path: ../../examples/display_audio_photo
diff --git a/bsp/m5stack_core_2/include/bsp/m5stack_core_2.h b/bsp/m5stack_core_2/include/bsp/m5stack_core_2.h
index 7ef7fa8ef..98a2de8a1 100644
--- a/bsp/m5stack_core_2/include/bsp/m5stack_core_2.h
+++ b/bsp/m5stack_core_2/include/bsp/m5stack_core_2.h
@@ -54,7 +54,7 @@
#define BSP_CAPS_AUDIO_SPEAKER 1
#define BSP_CAPS_AUDIO_MIC 0
#define BSP_CAPS_SDCARD 1
-#define BSP_CAPS_IMU 0
+#define BSP_CAPS_IMU 1
/** @} */ // end of capabilities
/**************************************************************************************************
@@ -178,6 +178,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init(void);
* There are multiple devices connected to I2C peripheral:
* - AXP192 / AXP2101 PMU
* - LCD Touch controller
+ * - MPU6886 IMU (Inertial Measurement Unit)
**************************************************************************************************/
#define BSP_I2C_NUM CONFIG_BSP_I2C_NUM
diff --git a/bsp/m5stack_core_s3/API.md b/bsp/m5stack_core_s3/API.md
index d036f1237..2340239f0 100644
--- a/bsp/m5stack_core_s3/API.md
+++ b/bsp/m5stack_core_s3/API.md
@@ -308,9 +308,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount microSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -344,7 +344,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@201064045315363027020362207042030312154101103055 slot
## Functions Documentation
@@ -431,7 +431,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -472,7 +472,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -645,7 +645,7 @@ esp_codec_dev_close(mic_codec_dev);
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -692,7 +692,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occured
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -874,7 +874,7 @@ Below are some of the most relevant predefined constants:
| esp\_err\_t | [**bsp\_display\_backlight\_on**](#function-bsp_display_backlight_on) (void)
_Turn on display backlight._ |
| esp\_err\_t | [**bsp\_display\_brightness\_init**](#function-bsp_display_brightness_init) (void)
_Initialize display's brightness._ |
| esp\_err\_t | [**bsp\_display\_brightness\_set**](#function-bsp_display_brightness_set) (int brightness\_percent)
_Set display's brightness._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| void | [**bsp\_display\_rotate**](#function-bsp_display_rotate) (lv\_display\_t \*disp, lv\_display\_rotation\_t rotation)
_Rotate screen._ |
@@ -925,7 +925,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@113045123106112136231060366021222266264043225115 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -1036,7 +1036,7 @@ Brightness is controlled with AXP2101 via I2C. Backlight must be already initial
* ESP\_ERR\_INVALID\_ARG Parameter error
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
diff --git a/bsp/m5stack_tab5/API.md b/bsp/m5stack_tab5/API.md
index 8355fe61a..d806a1a1e 100644
--- a/bsp/m5stack_tab5/API.md
+++ b/bsp/m5stack_tab5/API.md
@@ -327,9 +327,9 @@ sdmmc_card_print_info(stdout, sdcard);
| void | [**bsp\_sdcard\_get\_sdspi\_host**](#function-bsp_sdcard_get_sdspi_host) (const int slot, sdmmc\_host\_t \*config)
_Get SD card SPI host config._ |
| esp\_err\_t | [**bsp\_sdcard\_mount**](#function-bsp_sdcard_mount) (void)
_Mount microSD card to virtual file system._ |
| void | [**bsp\_sdcard\_sdmmc\_get\_slot**](#function-bsp_sdcard_sdmmc_get_slot) (const int slot, sdmmc\_slot\_config\_t \*config)
_Get SD card MMC slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdmmc\_mount**](#function-bsp_sdcard_sdmmc_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (MMC mode)._ |
| void | [**bsp\_sdcard\_sdspi\_get\_slot**](#function-bsp_sdcard_sdspi_get_slot) (const spi\_host\_device\_t spi\_host, sdspi\_device\_config\_t \*config)
_Get SD card SPI slot config._ |
-| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)_ |
+| esp\_err\_t | [**bsp\_sdcard\_sdspi\_mount**](#function-bsp_sdcard_sdspi_mount) ([**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) \*cfg)
_Mount microSD card to virtual file system (SPI mode)._ |
| esp\_err\_t | [**bsp\_sdcard\_unmount**](#function-bsp_sdcard_unmount) (void)
_Unmount micorSD card from virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_mount**](#function-bsp_spiffs_mount) (void)
_Mount SPIFFS to virtual file system._ |
| esp\_err\_t | [**bsp\_spiffs\_unmount**](#function-bsp_spiffs_unmount) (void)
_Unmount SPIFFS from virtual file system._ |
@@ -370,7 +370,7 @@ Variables:
- const sdspi\_device\_config\_t \* sdspi
-- union [**bsp\_sdcard\_cfg\_t**](#struct-bsp_sdcard_cfg_t) slot
+- union bsp\_sdcard\_cfg\_t::@131220170103233220256130103121052153166304347264 slot
## Functions Documentation
@@ -457,7 +457,7 @@ void bsp_sdcard_sdmmc_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdmmc_mount`
-_Mount microSD card to virtual file system (MMC mode)_
+_Mount microSD card to virtual file system (MMC mode)._
```c
esp_err_t bsp_sdcard_sdmmc_mount (
bsp_sdcard_cfg_t *cfg
@@ -498,7 +498,7 @@ void bsp_sdcard_sdspi_get_slot (
* `config` Structure which will be filled
### function `bsp_sdcard_sdspi_mount`
-_Mount microSD card to virtual file system (SPI mode)_
+_Mount microSD card to virtual file system (SPI mode)._
```c
esp_err_t bsp_sdcard_sdspi_mount (
bsp_sdcard_cfg_t *cfg
@@ -671,7 +671,7 @@ esp_codec_dev_close(mic_codec_dev);
| ---: | :--- |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_microphone\_init**](#function-bsp_audio_codec_microphone_init) (void)
_Initialize microphone codec device._ |
| esp\_codec\_dev\_handle\_t | [**bsp\_audio\_codec\_speaker\_init**](#function-bsp_audio_codec_speaker_init) (void)
_Initialize speaker codec device._ |
-| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)_ |
+| const audio\_codec\_data\_if\_t \* | [**bsp\_audio\_get\_codec\_itf**](#function-bsp_audio_get_codec_itf) (void)
_Get codec I2S interface (initialized in bsp\_audio\_init)._ |
| esp\_err\_t | [**bsp\_audio\_init**](#function-bsp_audio_init) (const i2s\_std\_config\_t \*i2s\_config)
_Init audio._ |
## Macros
@@ -718,7 +718,7 @@ esp_codec_dev_handle_t bsp_audio_codec_speaker_init (
Pointer to codec device handle or NULL when error occurred
### function `bsp_audio_get_codec_itf`
-_Get codec I2S interface (initialized in bsp\_audio\_init)_
+_Get codec I2S interface (initialized in bsp\_audio\_init)._
```c
const audio_codec_data_if_t * bsp_audio_get_codec_itf (
void
@@ -899,7 +899,7 @@ Below are some of the most relevant predefined constants:
| void | [**bsp\_display\_delete**](#function-bsp_display_delete) (void)
_Delete display panel._ |
| esp\_err\_t | [**bsp\_display\_enter\_sleep**](#function-bsp_display_enter_sleep) (void)
_Set display enter sleep mode._ |
| esp\_err\_t | [**bsp\_display\_exit\_sleep**](#function-bsp_display_exit_sleep) (void)
_Set display exit sleep mode._ |
-| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)_ |
+| lv\_indev\_t \* | [**bsp\_display\_get\_input\_dev**](#function-bsp_display_get_input_dev) (void)
_Get pointer to input device (touch, buttons, ...)._ |
| bool | [**bsp\_display\_lock**](#function-bsp_display_lock) (uint32\_t timeout\_ms)
_Take LVGL mutex._ |
| esp\_err\_t | [**bsp\_display\_new**](#function-bsp_display_new) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, esp\_lcd\_panel\_handle\_t \*ret\_panel, esp\_lcd\_panel\_io\_handle\_t \*ret\_io)
_Create new display panel._ |
| esp\_err\_t | [**bsp\_display\_new\_with\_handles**](#function-bsp_display_new_with_handles) (const [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) \*config, [**bsp\_lcd\_handles\_t**](#struct-bsp_lcd_handles_t) \*ret\_handles)
_Create new display panel._ |
@@ -948,7 +948,7 @@ Variables:
- bool double_buffer
True, if should be allocated two buffers
-- struct [**bsp\_display\_cfg\_t**](#struct-bsp_display_cfg_t) flags
+- struct bsp\_display\_cfg\_t::@271237366045170201144345055225033042314035362003 flags
- lvgl\_port\_cfg\_t lvgl_port_cfg
LVGL port configuration
@@ -960,7 +960,7 @@ _BSP display configuration structure._
Variables:
-- struct [**bsp\_display\_config\_t**](#struct-bsp_display_config_t) dsi_bus
+- struct bsp\_display\_config\_t::@256354012320361313117071144221061107335337211344 dsi_bus
- uint32\_t lane_bit_rate_mbps
DSI bus config - lane bit rate
@@ -1144,7 +1144,7 @@ All the display (LCD, backlight, touch) will exit sleep mode.
* ESP\_ERR\_NOT\_SUPPORTED if this function is not supported by the panel
### function `bsp_display_get_input_dev`
-_Get pointer to input device (touch, buttons, ...)_
+_Get pointer to input device (touch, buttons, ...)._
```c
lv_indev_t * bsp_display_get_input_dev (
void
@@ -1511,7 +1511,7 @@ Camera usage can be quite complex. For a complete example, refer to the [`displa
| Type | Name |
| ---: | :--- |
-| struct | [**bsp\_camera\_cfg\_t**](#struct-bsp_camera_cfg_t)
_BSP camera configuration structure (for future use)_ |
+| struct | [**bsp\_camera\_cfg\_t**](#struct-bsp_camera_cfg_t)
_BSP camera configuration structure (for future use)._ |
## Functions
@@ -1534,7 +1534,7 @@ Camera usage can be quite complex. For a complete example, refer to the [`displa
### struct `bsp_camera_cfg_t`
-_BSP camera configuration structure (for future use)_
+_BSP camera configuration structure (for future use)._
Variables:
diff --git a/components/mpu6050/include/mpu6050.h b/components/mpu6050/include/mpu6050.h
index 4de822c05..311ac409f 100644
--- a/components/mpu6050/include/mpu6050.h
+++ b/components/mpu6050/include/mpu6050.h
@@ -102,7 +102,7 @@ typedef struct {
typedef struct {
float roll;
float pitch;
-} complimentary_angle_t;
+} complementary_angle_t;
typedef void *mpu6050_handle_t;
@@ -385,14 +385,14 @@ esp_err_t mpu6050_get_temp(mpu6050_handle_t sensor, mpu6050_temp_value_t *const
* @param sensor object handle of mpu6050
* @param acce_value accelerometer measurements
* @param gyro_value gyroscope measurements
- * @param complimentary_angle complimentary angle
+ * @param complementary_angle complementary angle
*
* @return
* - ESP_OK Success
* - ESP_FAIL Fail
*/
esp_err_t mpu6050_complimentory_filter(mpu6050_handle_t sensor, const mpu6050_acce_value_t *const acce_value,
- const mpu6050_gyro_value_t *const gyro_value, complimentary_angle_t *const complimentary_angle);
+ const mpu6050_gyro_value_t *const gyro_value, complementary_angle_t *const complementary_angle);
#ifdef __cplusplus
}
diff --git a/components/mpu6050/mpu6050.c b/components/mpu6050/mpu6050.c
index 5ce15c90a..75fb6b3a6 100644
--- a/components/mpu6050/mpu6050.c
+++ b/components/mpu6050/mpu6050.c
@@ -441,7 +441,7 @@ esp_err_t mpu6050_get_temp(mpu6050_handle_t sensor, mpu6050_temp_value_t *const
}
esp_err_t mpu6050_complimentory_filter(mpu6050_handle_t sensor, const mpu6050_acce_value_t *const acce_value,
- const mpu6050_gyro_value_t *const gyro_value, complimentary_angle_t *const complimentary_angle)
+ const mpu6050_gyro_value_t *const gyro_value, complementary_angle_t *const complementary_angle)
{
float acce_angle[2];
float gyro_angle[2];
@@ -452,8 +452,8 @@ esp_err_t mpu6050_complimentory_filter(mpu6050_handle_t sensor, const mpu6050_ac
if (sens->counter == 1) {
acce_angle[0] = (atan2(acce_value->acce_y, acce_value->acce_z) * RAD_TO_DEG);
acce_angle[1] = (atan2(acce_value->acce_x, acce_value->acce_z) * RAD_TO_DEG);
- complimentary_angle->roll = acce_angle[0];
- complimentary_angle->pitch = acce_angle[1];
+ complementary_angle->roll = acce_angle[0];
+ complementary_angle->pitch = acce_angle[1];
gettimeofday(sens->timer, NULL);
return ESP_OK;
}
@@ -472,8 +472,8 @@ esp_err_t mpu6050_complimentory_filter(mpu6050_handle_t sensor, const mpu6050_ac
gyro_angle[0] = gyro_rate[0] * sens->dt;
gyro_angle[1] = gyro_rate[1] * sens->dt;
- complimentary_angle->roll = (ALPHA * (complimentary_angle->roll + gyro_angle[0])) + ((1 - ALPHA) * acce_angle[0]);
- complimentary_angle->pitch = (ALPHA * (complimentary_angle->pitch + gyro_angle[1])) + ((1 - ALPHA) * acce_angle[1]);
+ complementary_angle->roll = (ALPHA * (complementary_angle->roll + gyro_angle[0])) + ((1 - ALPHA) * acce_angle[0]);
+ complementary_angle->pitch = (ALPHA * (complementary_angle->pitch + gyro_angle[1])) + ((1 - ALPHA) * acce_angle[1]);
return ESP_OK;
}
diff --git a/components/mpu6886/CMakeLists.txt b/components/mpu6886/CMakeLists.txt
new file mode 100644
index 000000000..778b3f6b0
--- /dev/null
+++ b/components/mpu6886/CMakeLists.txt
@@ -0,0 +1,11 @@
+if("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER_EQUAL "5.3")
+ set(REQ esp_driver_gpio esp_driver_i2c)
+else()
+ set(REQ driver)
+endif()
+
+idf_component_register(
+ SRCS "mpu6886.c"
+ INCLUDE_DIRS "include"
+ REQUIRES ${REQ}
+)
diff --git a/components/mpu6886/README.md b/components/mpu6886/README.md
new file mode 100644
index 000000000..626915601
--- /dev/null
+++ b/components/mpu6886/README.md
@@ -0,0 +1,243 @@
+# MPU-6886 Driver Component
+
+C driver for MPU-6886 6-axis gyroscope and accelerometer based on I2C communication.
+
+## Features
+
+### Sensor Data
+- 3-axis accelerometer data (raw 16-bit or floating-point g values)
+- 3-axis gyroscope data (raw 16-bit or floating-point dps values)
+- Internal temperature sensor
+- complementary filter for roll and pitch angle estimation
+
+### Configuration
+- Accelerometer full-scale range: ±2g, ±4g, ±8g, ±16g
+- Gyroscope full-scale range: ±250, ±500, ±1000, ±2000 dps
+- Clock source selection (internal 20 MHz, auto-select PLL, stop)
+- Sample rate divider (0–255)
+- Gyroscope DLPF bandwidth (8 settings, 5–3281 Hz)
+- Accelerometer DLPF bandwidth (8 settings, 5.1–420 Hz)
+- FSYNC pin configuration (disabled or routed to any sensor output LSB)
+
+### Power Management
+- Sleep / wake control
+- Device reset (all registers restored to defaults)
+- Individual axis enable/disable (accelerometer and gyroscope independently)
+- Temperature sensor disable
+- Gyroscope standby mode (drive + PLL on, sense paths off)
+- Accelerometer low-power duty-cycle mode
+- Gyroscope low-power mode with configurable averaging (1–128 samples)
+- Accelerometer averaging filter for low-power mode (4–32 samples)
+
+### Interrupts
+- Configurable INT pin: active level, push-pull/open-drain, latch mode, clear behavior
+- Interrupt sources: data ready, FIFO overflow, gyroscope drive ready, wake-on-motion (per-axis)
+- GPIO ISR registration
+
+### Wake-on-Motion (WoM)
+- Per-axis motion threshold (0–255 mg, scaled by accelerometer FSR)
+- OR / AND mode for multi-axis threshold comparison
+- Hardware-accelerated motion detection with programmable intelligence
+
+### FIFO
+- Enable/disable FIFO buffering for gyroscope and/or accelerometer data
+- FIFO reset
+- Read FIFO byte count and bulk-read FIFO data
+- Configurable watermark threshold (0–1023 bytes) with watermark interrupt status
+
+### Calibration & Self-Test
+- Gyroscope user offset registers (16-bit, 2's complement)
+- Accelerometer offset registers (15-bit, 0.98 mg steps)
+- Factory-stored accelerometer and gyroscope self-test values
+- Signal path reset and signal condition reset
+- OUTPUT_LIMIT configuration (required after every power-up per datasheet)
+
+## Important Notes
+
+- The MPU-6886 I2C address depends on the level of its AD0/SA0 pin: **0x68** when low, **0x69** when high (default: 0x68).
+- The INT pin must be connected to a GPIO on the ESP32 to receive interrupts.
+- After every power-up, call `mpu6886_set_output_limit()` to avoid limiting sensor output (per datasheet requirement).
+- For full gyroscope performance, set the clock source to `MPU6886_CLK_AUTO` using `mpu6886_set_clock_source()`.
+- The FIFO watermark interrupt (register 0x39) is **not** cleared by reading INT_STATUS — it is cleared by reading FIFO data via `mpu6886_read_fifo()`.
+
+## Limitations
+
+- Only I2C communication is supported (SPI is not implemented).
+
+## Get Started
+
+This driver can be used as a package from [Espressif's IDF Component Registry](https://components.espressif.com). To include this driver in your project, run the following idf.py from the project's root directory:
+
+```
+ idf.py add-dependency "espressif/mpu6886^1.0.0"
+```
+
+Another option is to manually create a `idf_component.yml` file. You can find more about using .yml files for components from [Espressif's documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-component-manager.html).
+
+## Example Usage
+
+### Basic Reading (ESP-IDF >= 5.2, new I2C master API)
+
+```c
+#include "mpu6886.h"
+#include "driver/i2c_master.h"
+
+// Initialize I2C bus
+i2c_master_bus_config_t bus_cfg = {
+ .i2c_port = I2C_NUM_0,
+ .sda_io_num = GPIO_NUM_21,
+ .scl_io_num = GPIO_NUM_22,
+ .clk_source = I2C_CLK_SRC_DEFAULT,
+};
+i2c_master_bus_handle_t bus;
+i2c_new_master_bus(&bus_cfg, &bus);
+
+// Create sensor handle
+mpu6886_handle_t sensor = mpu6886_create(bus, MPU6886_I2C_ADDRESS);
+
+// Wake up the sensor (device starts in sleep mode)
+mpu6886_wake_up(sensor);
+
+// Required after every power-up per datasheet
+mpu6886_set_output_limit(sensor);
+
+// Use auto clock for best gyroscope performance
+mpu6886_set_clock_source(sensor, MPU6886_CLK_AUTO);
+
+// Configure full scale ranges
+mpu6886_config(sensor, MPU6886_ACCE_FS_8G, MPU6886_GYRO_FS_2000DPS);
+
+// Read accelerometer and gyroscope data
+mpu6886_acce_value_t acce;
+mpu6886_gyro_value_t gyro;
+mpu6886_get_acce(sensor, &acce);
+mpu6886_get_gyro(sensor, &gyro);
+
+// Read temperature
+mpu6886_temp_value_t temp;
+mpu6886_get_temp(sensor, &temp);
+
+// Cleanup
+mpu6886_delete(sensor);
+```
+
+### Basic Reading (ESP-IDF < 5.2, legacy I2C API)
+
+```c
+#include "mpu6886.h"
+
+// Create sensor handle (I2C bus must be initialized beforehand)
+mpu6886_handle_t sensor = mpu6886_create(I2C_NUM_0, MPU6886_I2C_ADDRESS);
+
+// Wake up the sensor (device starts in sleep mode)
+mpu6886_wake_up(sensor);
+
+// Required after every power-up per datasheet
+mpu6886_set_output_limit(sensor);
+
+// Use auto clock for best gyroscope performance
+mpu6886_set_clock_source(sensor, MPU6886_CLK_AUTO);
+
+// Configure full scale ranges
+mpu6886_config(sensor, MPU6886_ACCE_FS_8G, MPU6886_GYRO_FS_2000DPS);
+
+// Read accelerometer and gyroscope data
+mpu6886_acce_value_t acce;
+mpu6886_gyro_value_t gyro;
+mpu6886_get_acce(sensor, &acce);
+mpu6886_get_gyro(sensor, &gyro);
+
+// Read temperature
+mpu6886_temp_value_t temp;
+mpu6886_get_temp(sensor, &temp);
+
+// Cleanup
+mpu6886_delete(sensor);
+```
+
+### Wake-on-Motion Detection
+
+```c
+// Configure WoM with 100mg threshold on all axes (OR mode)
+mpu6886_config_wom(sensor, 100, 100, 100, MPU6886_WOM_OR);
+
+// Enable WoM interrupts
+mpu6886_enable_interrupts(sensor, MPU6886_WOM_X_INT_BIT | MPU6886_WOM_Y_INT_BIT | MPU6886_WOM_Z_INT_BIT);
+```
+
+### FIFO Buffering
+
+```c
+// Enable FIFO for both accel and gyro
+mpu6886_enable_fifo(sensor, true, true, true);
+
+// Set watermark at 512 bytes
+mpu6886_set_fifo_watermark(sensor, 512);
+
+// Read FIFO data
+uint16_t count;
+mpu6886_get_fifo_count(sensor, &count);
+uint8_t buf[512];
+mpu6886_read_fifo(sensor, buf, count > 512 ? 512 : count);
+```
+
+### Low-Power Mode
+
+```c
+// Configure accelerometer low-power cycle with 16-sample averaging
+mpu6886_set_acce_averaging(sensor, MPU6886_ACCE_AVG_16);
+mpu6886_set_acce_low_power_cycle(sensor, true);
+
+// Or gyroscope low-power mode with 32-sample averaging
+mpu6886_set_gyro_low_power(sensor, true, MPU6886_GYRO_AVG_32);
+```
+
+## API Reference
+
+| Function | Description |
+|---|---|
+| `mpu6886_create` | Create sensor handle |
+| `mpu6886_delete` | Delete sensor handle |
+| `mpu6886_get_deviceid` | Read WHO_AM_I register |
+| `mpu6886_reset` | Reset device to defaults |
+| `mpu6886_wake_up` / `mpu6886_sleep` | Power mode control |
+| `mpu6886_set_clock_source` | Set clock source (internal/auto/stop) |
+| `mpu6886_config` | Set accel + gyro full-scale ranges |
+| `mpu6886_get_acce_sensitivity` | Get accel LSB/g value |
+| `mpu6886_get_gyro_sensitivity` | Get gyro LSB/dps value |
+| `mpu6886_set_sample_rate_divider` | Set sample rate divider |
+| `mpu6886_set_gyro_dlpf` | Set gyro/temp DLPF bandwidth |
+| `mpu6886_set_acce_dlpf` | Set accel DLPF bandwidth |
+| `mpu6886_set_fsync` | Configure FSYNC pin |
+| `mpu6886_set_gyro_low_power` | Gyro low-power mode + averaging |
+| `mpu6886_set_acce_averaging` | Accel low-power averaging |
+| `mpu6886_set_acce_low_power_cycle` | Accel duty-cycle mode |
+| `mpu6886_config_wom` | Wake-on-motion thresholds + mode |
+| `mpu6886_set_axes_disable` | Enable/disable individual axes |
+| `mpu6886_set_temp_disable` | Enable/disable temperature sensor |
+| `mpu6886_set_gyro_standby` | Gyro standby mode |
+| `mpu6886_enable_fifo` | Enable FIFO for accel/gyro |
+| `mpu6886_reset_fifo` | Reset FIFO buffer |
+| `mpu6886_get_fifo_count` | Get FIFO byte count |
+| `mpu6886_read_fifo` | Read FIFO data |
+| `mpu6886_set_fifo_watermark` | Set FIFO watermark threshold |
+| `mpu6886_get_fifo_wm_status` | Read FIFO watermark status |
+| `mpu6886_reset_signal_path` | Reset signal paths |
+| `mpu6886_reset_signal_cond` | Reset signal paths + registers |
+| `mpu6886_set_output_limit` | Set OUTPUT_LIMIT bit (post power-up) |
+| `mpu6886_set_gyro_offset` | Set gyro user offsets |
+| `mpu6886_set_acce_offset` | Set accel offsets |
+| `mpu6886_get_acce_self_test` | Read accel self-test values |
+| `mpu6886_get_gyro_self_test` | Read gyro self-test values |
+| `mpu6886_config_interrupts` | Configure INT pin |
+| `mpu6886_register_isr` | Register interrupt handler |
+| `mpu6886_enable_interrupts` | Enable interrupt sources |
+| `mpu6886_disable_interrupts` | Disable interrupt sources |
+| `mpu6886_get_interrupt_status` | Read interrupt status |
+| `mpu6886_get_raw_acce` / `mpu6886_get_acce` | Read accelerometer data |
+| `mpu6886_get_raw_gyro` / `mpu6886_get_gyro` | Read gyroscope data |
+| `mpu6886_get_temp` | Read temperature |
+| `mpu6886_complementary_filter` | Compute roll/pitch angles |
+
+## See Also
+* [MPU-6886 datasheet](https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/MPU-6886-000193%2Bv1.1_GHIC_en.pdf)
diff --git a/components/mpu6886/idf_component.yml b/components/mpu6886/idf_component.yml
new file mode 100644
index 000000000..a2fd2d2e3
--- /dev/null
+++ b/components/mpu6886/idf_component.yml
@@ -0,0 +1,5 @@
+version: "1.0.0"
+description: I2C driver for MPU-6886 6-axis gyroscope and accelerometer
+url: https://github.com/espressif/esp-bsp/tree/master/components/mpu6886
+dependencies:
+ idf: ">=4.0"
diff --git a/components/mpu6886/include/mpu6886.h b/components/mpu6886/include/mpu6886.h
new file mode 100644
index 000000000..66ab6924e
--- /dev/null
+++ b/components/mpu6886/include/mpu6886.h
@@ -0,0 +1,752 @@
+/*
+ * SPDX-FileCopyrightText: 2026 Rashed Talukder
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @file
+ * @brief MPU6886 driver
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "esp_idf_version.h"
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 2, 0)
+#include "driver/i2c_master.h"
+#else
+#include "driver/i2c.h"
+#endif
+#include "driver/gpio.h"
+
+#define MPU6886_I2C_ADDRESS 0x68u /*!< I2C address with AD0/SA0 pin low */
+#define MPU6886_I2C_ADDRESS_1 0x69u /*!< I2C address with AD0/SA0 pin high */
+#define MPU6886_WHO_AM_I_VAL 0x19u /*!< WHO_AM_I register default value */
+
+#ifndef MPU6886_I2C_CLK_SPEED_HZ
+#define MPU6886_I2C_CLK_SPEED_HZ 400000u /*!< Default I2C clock speed for MPU6886 (max 400 kHz) */
+#endif
+
+typedef enum {
+ MPU6886_ACCE_FS_2G = 0, /*!< Accelerometer full scale range is +/- 2g */
+ MPU6886_ACCE_FS_4G = 1, /*!< Accelerometer full scale range is +/- 4g */
+ MPU6886_ACCE_FS_8G = 2, /*!< Accelerometer full scale range is +/- 8g */
+ MPU6886_ACCE_FS_16G = 3, /*!< Accelerometer full scale range is +/- 16g */
+} mpu6886_acce_fs_t;
+
+typedef enum {
+ MPU6886_GYRO_FS_250DPS = 0, /*!< Gyroscope full scale range is +/- 250 degree per second */
+ MPU6886_GYRO_FS_500DPS = 1, /*!< Gyroscope full scale range is +/- 500 degree per second */
+ MPU6886_GYRO_FS_1000DPS = 2, /*!< Gyroscope full scale range is +/- 1000 degree per second */
+ MPU6886_GYRO_FS_2000DPS = 3, /*!< Gyroscope full scale range is +/- 2000 degree per second */
+} mpu6886_gyro_fs_t;
+
+/** Gyroscope DLPF bandwidth (register CONFIG bits [2:0], when FCHOICE_B=0) */
+typedef enum {
+ MPU6886_DLPF_0 = 0, /*!< Gyro BW 250 Hz, Rate 8 kHz */
+ MPU6886_DLPF_1 = 1, /*!< Gyro BW 176 Hz, Rate 1 kHz */
+ MPU6886_DLPF_2 = 2, /*!< Gyro BW 92 Hz, Rate 1 kHz */
+ MPU6886_DLPF_3 = 3, /*!< Gyro BW 41 Hz, Rate 1 kHz */
+ MPU6886_DLPF_4 = 4, /*!< Gyro BW 20 Hz, Rate 1 kHz */
+ MPU6886_DLPF_5 = 5, /*!< Gyro BW 10 Hz, Rate 1 kHz */
+ MPU6886_DLPF_6 = 6, /*!< Gyro BW 5 Hz, Rate 1 kHz */
+ MPU6886_DLPF_7 = 7, /*!< Gyro BW 3281 Hz, Rate 8 kHz */
+} mpu6886_dlpf_t;
+
+/** Accelerometer DLPF bandwidth (register ACCEL_CONFIG2 bits [2:0], when ACCEL_FCHOICE_B=0) */
+typedef enum {
+ MPU6886_ACCE_DLPF_0 = 0, /*!< Accel BW 218.1 Hz, Rate 1 kHz */
+ MPU6886_ACCE_DLPF_1 = 1, /*!< Accel BW 218.1 Hz, Rate 1 kHz */
+ MPU6886_ACCE_DLPF_2 = 2, /*!< Accel BW 99.0 Hz, Rate 1 kHz */
+ MPU6886_ACCE_DLPF_3 = 3, /*!< Accel BW 44.8 Hz, Rate 1 kHz */
+ MPU6886_ACCE_DLPF_4 = 4, /*!< Accel BW 21.2 Hz, Rate 1 kHz */
+ MPU6886_ACCE_DLPF_5 = 5, /*!< Accel BW 10.2 Hz, Rate 1 kHz */
+ MPU6886_ACCE_DLPF_6 = 6, /*!< Accel BW 5.1 Hz, Rate 1 kHz */
+ MPU6886_ACCE_DLPF_7 = 7, /*!< Accel BW 420.0 Hz, Rate 1 kHz */
+} mpu6886_acce_dlpf_t;
+
+/** Clock source selection (register PWR_MGMT_1 bits [2:0]) */
+typedef enum {
+ MPU6886_CLK_INTERNAL_20MHZ = 0, /*!< Internal 20 MHz oscillator */
+ MPU6886_CLK_AUTO = 1, /*!< Auto select best available clock (PLL if ready, else internal) */
+ MPU6886_CLK_STOP = 7, /*!< Stop clock, keep timing generator in reset */
+} mpu6886_clk_src_t;
+
+/** FSYNC pin data sampling location (register CONFIG bits [5:3]) */
+typedef enum {
+ MPU6886_FSYNC_DISABLED = 0, /*!< FSYNC function disabled */
+ MPU6886_FSYNC_TEMP_OUT_L = 1, /*!< FSYNC on TEMP_OUT_L[0] */
+ MPU6886_FSYNC_GYRO_XOUT_L = 2, /*!< FSYNC on GYRO_XOUT_L[0] */
+ MPU6886_FSYNC_GYRO_YOUT_L = 3, /*!< FSYNC on GYRO_YOUT_L[0] */
+ MPU6886_FSYNC_GYRO_ZOUT_L = 4, /*!< FSYNC on GYRO_ZOUT_L[0] */
+ MPU6886_FSYNC_ACCEL_XOUT_L = 5, /*!< FSYNC on ACCEL_XOUT_L[0] */
+ MPU6886_FSYNC_ACCEL_YOUT_L = 6, /*!< FSYNC on ACCEL_YOUT_L[0] */
+ MPU6886_FSYNC_ACCEL_ZOUT_L = 7, /*!< FSYNC on ACCEL_ZOUT_L[0] */
+} mpu6886_fsync_out_t;
+
+/** Averaging filter for low-power gyroscope mode (register LP_MODE_CFG bits [6:4]) */
+typedef enum {
+ MPU6886_GYRO_AVG_1 = 0, /*!< Average 1 sample */
+ MPU6886_GYRO_AVG_2 = 1, /*!< Average 2 samples */
+ MPU6886_GYRO_AVG_4 = 2, /*!< Average 4 samples */
+ MPU6886_GYRO_AVG_8 = 3, /*!< Average 8 samples */
+ MPU6886_GYRO_AVG_16 = 4, /*!< Average 16 samples */
+ MPU6886_GYRO_AVG_32 = 5, /*!< Average 32 samples */
+ MPU6886_GYRO_AVG_64 = 6, /*!< Average 64 samples */
+ MPU6886_GYRO_AVG_128 = 7, /*!< Average 128 samples */
+} mpu6886_gyro_avg_t;
+
+/** Averaging filter for low-power accelerometer mode (register ACCEL_CONFIG2 bits [5:4]) */
+typedef enum {
+ MPU6886_ACCE_AVG_4 = 0, /*!< Average 4 samples */
+ MPU6886_ACCE_AVG_8 = 1, /*!< Average 8 samples */
+ MPU6886_ACCE_AVG_16 = 2, /*!< Average 16 samples */
+ MPU6886_ACCE_AVG_32 = 3, /*!< Average 32 samples */
+} mpu6886_acce_avg_t;
+
+/** Wake-on-motion threshold comparison mode (register ACCEL_INTEL_CTRL bit [0]) */
+typedef enum {
+ MPU6886_WOM_OR = 0, /*!< Interrupt on OR of all enabled accel thresholds */
+ MPU6886_WOM_AND = 1, /*!< Interrupt on AND of all enabled accel thresholds */
+} mpu6886_wom_threshold_mode_t;
+
+typedef enum {
+ MPU6886_INTERRUPT_PIN_ACTIVE_HIGH = 0, /*!< INT pin is active HIGH */
+ MPU6886_INTERRUPT_PIN_ACTIVE_LOW = 1 /*!< INT pin is active LOW */
+} mpu6886_int_pin_active_level_t;
+
+typedef enum {
+ MPU6886_INTERRUPT_PIN_PUSH_PULL = 0, /*!< INT pin is push-pull */
+ MPU6886_INTERRUPT_PIN_OPEN_DRAIN = 1 /*!< INT pin is open drain */
+} mpu6886_int_pin_mode_t;
+
+typedef enum {
+ MPU6886_INTERRUPT_LATCH_50US = 0, /*!< 50 microsecond pulse on interrupt */
+ MPU6886_INTERRUPT_LATCH_UNTIL_CLEARED = 1 /*!< Latched until cleared */
+} mpu6886_int_latch_t;
+
+typedef enum {
+ MPU6886_INTERRUPT_CLEAR_ON_ANY_READ = 0, /*!< INT_STATUS bits cleared on any register read */
+ MPU6886_INTERRUPT_CLEAR_ON_STATUS_READ = 1 /*!< INT_STATUS bits cleared only by reading INT_STATUS */
+} mpu6886_int_clear_t;
+
+typedef struct {
+ gpio_num_t interrupt_pin; /*!< GPIO connected to MPU6886 INT pin */
+ mpu6886_int_pin_active_level_t active_level; /*!< Active level of INT pin */
+ mpu6886_int_pin_mode_t pin_mode; /*!< Push-pull or open drain mode */
+ mpu6886_int_latch_t interrupt_latch; /*!< Interrupt pulse behavior of INT pin */
+ mpu6886_int_clear_t interrupt_clear_behavior; /*!< Interrupt status clear behavior */
+} mpu6886_int_config_t;
+
+extern const uint8_t MPU6886_DATA_RDY_INT_BIT; /*!< DATA READY interrupt bit */
+extern const uint8_t MPU6886_GDRIVE_INT_BIT; /*!< Gyroscope Drive System Ready interrupt */
+extern const uint8_t MPU6886_FIFO_OVERFLOW_INT_BIT; /*!< FIFO Overflow interrupt bit */
+extern const uint8_t MPU6886_WOM_X_INT_BIT; /*!< Wake-on-motion X interrupt bit */
+extern const uint8_t MPU6886_WOM_Y_INT_BIT; /*!< Wake-on-motion Y interrupt bit */
+extern const uint8_t MPU6886_WOM_Z_INT_BIT; /*!< Wake-on-motion Z interrupt bit */
+extern const uint8_t MPU6886_ALL_INTERRUPTS; /*!< All interrupts supported by MPU6886 */
+
+typedef struct {
+ int16_t raw_acce_x;
+ int16_t raw_acce_y;
+ int16_t raw_acce_z;
+} mpu6886_raw_acce_value_t;
+
+typedef struct {
+ int16_t raw_gyro_x;
+ int16_t raw_gyro_y;
+ int16_t raw_gyro_z;
+} mpu6886_raw_gyro_value_t;
+
+typedef struct {
+ float acce_x;
+ float acce_y;
+ float acce_z;
+} mpu6886_acce_value_t;
+
+typedef struct {
+ float gyro_x;
+ float gyro_y;
+ float gyro_z;
+} mpu6886_gyro_value_t;
+
+typedef struct {
+ float temp;
+} mpu6886_temp_value_t;
+
+typedef struct {
+ float roll;
+ float pitch;
+} mpu6886_complementary_angle_t;
+
+typedef void *mpu6886_handle_t;
+
+typedef gpio_isr_t mpu6886_isr_t;
+
+/**
+ * @brief Create and init sensor object and return a sensor handle
+ *
+ * @param bus I2C master bus handle (IDF >= 5.2) or I2C port number (legacy)
+ * @param dev_addr I2C device address of sensor (e.g. MPU6886_I2C_ADDRESS)
+ *
+ * @return
+ * - NULL Fail
+ * - Others Success
+ */
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 2, 0)
+mpu6886_handle_t mpu6886_create(i2c_master_bus_handle_t bus, const uint16_t dev_addr);
+#else
+mpu6886_handle_t mpu6886_create(i2c_port_t port, const uint16_t dev_addr);
+#endif
+
+/**
+ * @brief Delete and release a sensor object
+ *
+ * @param sensor object handle of mpu6886
+ */
+void mpu6886_delete(mpu6886_handle_t sensor);
+
+/**
+ * @brief Get device identification of MPU6886
+ *
+ * @param sensor object handle of mpu6886
+ * @param deviceid a pointer of device ID
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_deviceid(mpu6886_handle_t sensor, uint8_t *const deviceid);
+
+/**
+ * @brief Reset the device (all registers restored to defaults)
+ *
+ * @param sensor object handle of mpu6886
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_reset(mpu6886_handle_t sensor);
+
+/**
+ * @brief Wake up MPU6886
+ *
+ * @param sensor object handle of mpu6886
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_wake_up(mpu6886_handle_t sensor);
+
+/**
+ * @brief Enter sleep mode
+ *
+ * @param sensor object handle of mpu6886
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_sleep(mpu6886_handle_t sensor);
+
+/**
+ * @brief Set clock source (CLKSEL must be set to 1 for full gyro performance)
+ *
+ * @param sensor object handle of mpu6886
+ * @param clk_src clock source selection
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_clock_source(mpu6886_handle_t sensor, mpu6886_clk_src_t clk_src);
+
+/**
+ * @brief Set accelerometer and gyroscope full scale range
+ *
+ * @param sensor object handle of mpu6886
+ * @param acce_fs accelerometer full scale range
+ * @param gyro_fs gyroscope full scale range
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_config(mpu6886_handle_t sensor, const mpu6886_acce_fs_t acce_fs, const mpu6886_gyro_fs_t gyro_fs);
+
+/**
+ * @brief Get accelerometer sensitivity
+ *
+ * @param sensor object handle of mpu6886
+ * @param acce_sensitivity accelerometer sensitivity
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_acce_sensitivity(mpu6886_handle_t sensor, float *const acce_sensitivity);
+
+/**
+ * @brief Get gyroscope sensitivity
+ *
+ * @param sensor object handle of mpu6886
+ * @param gyro_sensitivity gyroscope sensitivity
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_gyro_sensitivity(mpu6886_handle_t sensor, float *const gyro_sensitivity);
+
+/**
+ * @brief Set sample rate divider. SAMPLE_RATE = INTERNAL_SAMPLE_RATE / (1 + divider)
+ * where INTERNAL_SAMPLE_RATE = 1 kHz. Only effective when FCHOICE_B = 0 and 0 < DLPF_CFG < 7.
+ *
+ * @param sensor object handle of mpu6886
+ * @param divider sample rate divider (0-255)
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_sample_rate_divider(mpu6886_handle_t sensor, uint8_t divider);
+
+/**
+ * @brief Set gyroscope/temperature digital low-pass filter bandwidth
+ *
+ * @param sensor object handle of mpu6886
+ * @param dlpf DLPF configuration value
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_gyro_dlpf(mpu6886_handle_t sensor, mpu6886_dlpf_t dlpf);
+
+/**
+ * @brief Set accelerometer digital low-pass filter bandwidth
+ *
+ * @param sensor object handle of mpu6886
+ * @param dlpf accelerometer DLPF configuration value
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_acce_dlpf(mpu6886_handle_t sensor, mpu6886_acce_dlpf_t dlpf);
+
+/**
+ * @brief Configure FSYNC pin data sampling location
+ *
+ * @param sensor object handle of mpu6886
+ * @param fsync_out FSYNC pin configuration
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_fsync(mpu6886_handle_t sensor, mpu6886_fsync_out_t fsync_out);
+
+/**
+ * @brief Configure gyroscope low-power mode
+ *
+ * @param sensor object handle of mpu6886
+ * @param enable true to enable low-power gyro mode, false for low-noise mode
+ * @param avg averaging filter configuration for low-power mode
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_gyro_low_power(mpu6886_handle_t sensor, bool enable, mpu6886_gyro_avg_t avg);
+
+/**
+ * @brief Set accelerometer averaging filter for low-power mode
+ *
+ * @param sensor object handle of mpu6886
+ * @param avg averaging filter configuration
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_acce_averaging(mpu6886_handle_t sensor, mpu6886_acce_avg_t avg);
+
+/**
+ * @brief Configure accelerometer low-power cycle mode
+ *
+ * @param sensor object handle of mpu6886
+ * @param enable true to enable accelerometer duty-cycle mode
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_acce_low_power_cycle(mpu6886_handle_t sensor, bool enable);
+
+/**
+ * @brief Configure wake-on-motion detection
+ *
+ * @param sensor object handle of mpu6886
+ * @param wom_x_thr X-axis WoM threshold (0-255, in mg scaled by accel FSR)
+ * @param wom_y_thr Y-axis WoM threshold (0-255)
+ * @param wom_z_thr Z-axis WoM threshold (0-255)
+ * @param mode threshold comparison mode (OR or AND of enabled axes)
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_config_wom(mpu6886_handle_t sensor, uint8_t wom_x_thr, uint8_t wom_y_thr,
+ uint8_t wom_z_thr, mpu6886_wom_threshold_mode_t mode);
+
+/**
+ * @brief Enable or disable individual accelerometer/gyroscope axes via PWR_MGMT_2
+ * Each bit disables the corresponding axis: XA(BIT5), YA(BIT4), ZA(BIT3), XG(BIT2), YG(BIT1), ZG(BIT0)
+ *
+ * @param sensor object handle of mpu6886
+ * @param disable_mask bitmask of axes to disable (0 = all on, 0x3F = all off)
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_axes_disable(mpu6886_handle_t sensor, uint8_t disable_mask);
+
+/**
+ * @brief Disable temperature sensor
+ *
+ * @param sensor object handle of mpu6886
+ * @param disable true to disable, false to enable
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_temp_disable(mpu6886_handle_t sensor, bool disable);
+
+/**
+ * @brief Put gyroscope in standby mode (drive and PLL enabled, sense paths disabled)
+ *
+ * @param sensor object handle of mpu6886
+ * @param enable true to enable gyro standby, false to disable
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_gyro_standby(mpu6886_handle_t sensor, bool enable);
+
+/**
+ * @brief Enable FIFO and select which sensor data to buffer
+ *
+ * @param sensor object handle of mpu6886
+ * @param enable_fifo true to enable FIFO, false to disable
+ * @param gyro_fifo_en true to buffer gyro (and temp) data
+ * @param acce_fifo_en true to buffer accel (and temp) data
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_enable_fifo(mpu6886_handle_t sensor, bool enable_fifo, bool gyro_fifo_en, bool acce_fifo_en);
+
+/**
+ * @brief Reset FIFO buffer
+ *
+ * @param sensor object handle of mpu6886
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_reset_fifo(mpu6886_handle_t sensor);
+
+/**
+ * @brief Get number of bytes currently in FIFO
+ *
+ * @param sensor object handle of mpu6886
+ * @param[out] count number of bytes in FIFO
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_fifo_count(mpu6886_handle_t sensor, uint16_t *count);
+
+/**
+ * @brief Read data from FIFO buffer
+ *
+ * @param sensor object handle of mpu6886
+ * @param buf buffer to store FIFO data
+ * @param len number of bytes to read
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_read_fifo(mpu6886_handle_t sensor, uint8_t *buf, uint16_t len);
+
+/**
+ * @brief Set FIFO watermark threshold. Watermark interrupt disabled when threshold is 0.
+ *
+ * @param sensor object handle of mpu6886
+ * @param threshold watermark threshold in bytes (0-1023)
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_fifo_watermark(mpu6886_handle_t sensor, uint16_t threshold);
+
+/**
+ * @brief Get FIFO watermark interrupt status
+ *
+ * @param sensor object handle of mpu6886
+ * @param[out] status true if watermark reached
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_fifo_wm_status(mpu6886_handle_t sensor, bool *status);
+
+/**
+ * @brief Reset accelerometer and temperature digital signal paths
+ *
+ * @param sensor object handle of mpu6886
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_reset_signal_path(mpu6886_handle_t sensor);
+
+/**
+ * @brief Reset all sensor signal paths and sensor registers
+ *
+ * @param sensor object handle of mpu6886
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_reset_signal_cond(mpu6886_handle_t sensor);
+
+/**
+ * @brief Set OUTPUT_LIMIT bit (required per datasheet to avoid limiting sensor output)
+ * Should be called after every power-up.
+ *
+ * @param sensor object handle of mpu6886
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_output_limit(mpu6886_handle_t sensor);
+
+/**
+ * @brief Set gyroscope user offset (16-bit, 2's complement, added to sensor output)
+ *
+ * @param sensor object handle of mpu6886
+ * @param x_offset X-axis gyro offset
+ * @param y_offset Y-axis gyro offset
+ * @param z_offset Z-axis gyro offset
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_gyro_offset(mpu6886_handle_t sensor, int16_t x_offset, int16_t y_offset, int16_t z_offset);
+
+/**
+ * @brief Set accelerometer offset (15-bit, 2's complement, 0.98-mg steps)
+ *
+ * @param sensor object handle of mpu6886
+ * @param x_offset X-axis accel offset
+ * @param y_offset Y-axis accel offset
+ * @param z_offset Z-axis accel offset
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_set_acce_offset(mpu6886_handle_t sensor, int16_t x_offset, int16_t y_offset, int16_t z_offset);
+
+/**
+ * @brief Run accelerometer self-test and get results
+ *
+ * @param sensor object handle of mpu6886
+ * @param[out] x_result X-axis self-test result (factory stored value)
+ * @param[out] y_result Y-axis self-test result
+ * @param[out] z_result Z-axis self-test result
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_acce_self_test(mpu6886_handle_t sensor, uint8_t *x_result, uint8_t *y_result, uint8_t *z_result);
+
+/**
+ * @brief Run gyroscope self-test and get results
+ *
+ * @param sensor object handle of mpu6886
+ * @param[out] x_result X-axis self-test result (factory stored value)
+ * @param[out] y_result Y-axis self-test result
+ * @param[out] z_result Z-axis self-test result
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_gyro_self_test(mpu6886_handle_t sensor, uint8_t *x_result, uint8_t *y_result, uint8_t *z_result);
+
+/**
+ * @brief Configure INT pin behavior and setup target GPIO
+ *
+ * @param sensor object handle of mpu6886
+ * @param interrupt_configuration INT pin configuration parameters
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_ERR_INVALID_ARG A parameter is NULL or incorrect
+ * - ESP_FAIL Failed to configure INT pin
+ */
+esp_err_t mpu6886_config_interrupts(mpu6886_handle_t sensor, const mpu6886_int_config_t *const interrupt_configuration);
+
+/**
+ * @brief Register an ISR to handle mpu6886 interrupts
+ *
+ * @param sensor object handle of mpu6886
+ * @param isr function to handle interrupts
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_ERR_INVALID_ARG A parameter is NULL or not valid
+ * - ESP_FAIL Failed to register ISR
+ */
+esp_err_t mpu6886_register_isr(mpu6886_handle_t sensor, const mpu6886_isr_t isr);
+
+/**
+ * @brief Enable specific interrupts from mpu6886
+ *
+ * @param sensor object handle of mpu6886
+ * @param interrupt_sources bit mask with interrupt sources to enable
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_ERR_INVALID_ARG A parameter is NULL or not valid
+ * - ESP_FAIL Failed to enable interrupt sources
+ */
+esp_err_t mpu6886_enable_interrupts(mpu6886_handle_t sensor, uint8_t interrupt_sources);
+
+/**
+ * @brief Disable specific interrupts from mpu6886
+ *
+ * @param sensor object handle of mpu6886
+ * @param interrupt_sources bit mask with interrupt sources to disable
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_ERR_INVALID_ARG A parameter is NULL or not valid
+ * - ESP_FAIL Failed to disable interrupt sources
+ */
+esp_err_t mpu6886_disable_interrupts(mpu6886_handle_t sensor, uint8_t interrupt_sources);
+
+/**
+ * @brief Get the interrupt status of mpu6886
+ *
+ * @param sensor object handle of mpu6886
+ * @param[out] out_intr_status bit mask representing active interrupts
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_ERR_INVALID_ARG A parameter is NULL or not valid
+ * - ESP_FAIL Failed to retrieve interrupt status
+ */
+esp_err_t mpu6886_get_interrupt_status(mpu6886_handle_t sensor, uint8_t *const out_intr_status);
+
+/**
+ * @brief Read raw accelerometer measurements
+ *
+ * @param sensor object handle of mpu6886
+ * @param raw_acce_value raw accelerometer measurements
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_raw_acce(mpu6886_handle_t sensor, mpu6886_raw_acce_value_t *const raw_acce_value);
+
+/**
+ * @brief Read raw gyroscope measurements
+ *
+ * @param sensor object handle of mpu6886
+ * @param raw_gyro_value raw gyroscope measurements
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_raw_gyro(mpu6886_handle_t sensor, mpu6886_raw_gyro_value_t *const raw_gyro_value);
+
+/**
+ * @brief Read accelerometer measurements
+ *
+ * @param sensor object handle of mpu6886
+ * @param acce_value accelerometer measurements
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_acce(mpu6886_handle_t sensor, mpu6886_acce_value_t *const acce_value);
+
+/**
+ * @brief Read gyro values
+ *
+ * @param sensor object handle of mpu6886
+ * @param gyro_value gyroscope measurements
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_gyro(mpu6886_handle_t sensor, mpu6886_gyro_value_t *const gyro_value);
+
+/**
+ * @brief Read temperature value
+ *
+ * @param sensor object handle of mpu6886
+ * @param temp_value temperature measurement
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_get_temp(mpu6886_handle_t sensor, mpu6886_temp_value_t *const temp_value);
+
+/**
+ * @brief Use complementary filter to calculate roll and pitch
+ *
+ * @param sensor object handle of mpu6886
+ * @param acce_value accelerometer measurements
+ * @param gyro_value gyroscope measurements
+ * @param complementary_angle complementary angle
+ *
+ * @return
+ * - ESP_OK Success
+ * - ESP_FAIL Fail
+ */
+esp_err_t mpu6886_complementary_filter(mpu6886_handle_t sensor, const mpu6886_acce_value_t *const acce_value,
+ const mpu6886_gyro_value_t *const gyro_value, mpu6886_complementary_angle_t *const complementary_angle);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/components/mpu6886/license.txt b/components/mpu6886/license.txt
new file mode 100644
index 000000000..b514e4df0
--- /dev/null
+++ b/components/mpu6886/license.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2026 Rashed Talukder
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/components/mpu6886/mpu6886.c b/components/mpu6886/mpu6886.c
new file mode 100644
index 000000000..7ee182421
--- /dev/null
+++ b/components/mpu6886/mpu6886.c
@@ -0,0 +1,930 @@
+/*
+ * SPDX-FileCopyrightText: 2026 Rashed Talukder
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include "esp_system.h"
+#include "mpu6886.h"
+
+#define ALPHA 0.99f /*!< Weight of gyroscope */
+#define RAD_TO_DEG 57.29577951f /*!< Radians to degrees (180/π) */
+
+/* MPU6886 register addresses (from datasheet DS-000193 Rev 1.1) */
+#define MPU6886_SELF_TEST_X_ACCEL 0x0Du
+#define MPU6886_SELF_TEST_Y_ACCEL 0x0Eu
+#define MPU6886_SELF_TEST_Z_ACCEL 0x0Fu
+#define MPU6886_XG_OFFS_USRH 0x13u
+#define MPU6886_XG_OFFS_USRL 0x14u
+#define MPU6886_YG_OFFS_USRH 0x15u
+#define MPU6886_YG_OFFS_USRL 0x16u
+#define MPU6886_ZG_OFFS_USRH 0x17u
+#define MPU6886_ZG_OFFS_USRL 0x18u
+#define MPU6886_SMPLRT_DIV 0x19u
+#define MPU6886_CONFIG 0x1Au
+#define MPU6886_GYRO_CONFIG 0x1Bu
+#define MPU6886_ACCEL_CONFIG 0x1Cu
+#define MPU6886_ACCEL_CONFIG2 0x1Du
+#define MPU6886_LP_MODE_CFG 0x1Eu
+#define MPU6886_ACCEL_WOM_X_THR 0x20u
+#define MPU6886_ACCEL_WOM_Y_THR 0x21u
+#define MPU6886_ACCEL_WOM_Z_THR 0x22u
+#define MPU6886_FIFO_EN 0x23u
+#define MPU6886_FSYNC_INT 0x36u
+#define MPU6886_INTR_PIN_CFG 0x37u
+#define MPU6886_INTR_ENABLE 0x38u
+#define MPU6886_FIFO_WM_INT_STATUS 0x39u
+#define MPU6886_INTR_STATUS 0x3Au
+#define MPU6886_ACCEL_XOUT_H 0x3Bu
+#define MPU6886_TEMP_XOUT_H 0x41u
+#define MPU6886_GYRO_XOUT_H 0x43u
+#define MPU6886_SELF_TEST_X_GYRO 0x50u
+#define MPU6886_SELF_TEST_Y_GYRO 0x51u
+#define MPU6886_SELF_TEST_Z_GYRO 0x52u
+#define MPU6886_FIFO_WM_TH1 0x60u
+#define MPU6886_FIFO_WM_TH2 0x61u
+#define MPU6886_SIGNAL_PATH_RESET 0x68u
+#define MPU6886_ACCEL_INTEL_CTRL 0x69u
+#define MPU6886_USER_CTRL 0x6Au
+#define MPU6886_PWR_MGMT_1 0x6Bu
+#define MPU6886_PWR_MGMT_2 0x6Cu
+#define MPU6886_FIFO_COUNTH 0x72u
+#define MPU6886_FIFO_COUNTL 0x73u
+#define MPU6886_FIFO_R_W 0x74u
+#define MPU6886_WHO_AM_I 0x75u
+#define MPU6886_XA_OFFSET_H 0x77u
+#define MPU6886_XA_OFFSET_L 0x78u
+#define MPU6886_YA_OFFSET_H 0x7Au
+#define MPU6886_YA_OFFSET_L 0x7Bu
+#define MPU6886_ZA_OFFSET_H 0x7Du
+#define MPU6886_ZA_OFFSET_L 0x7Eu
+
+/* Temperature sensor constants from datasheet */
+#define MPU6886_TEMP_SENSITIVITY 326.8f
+#define MPU6886_TEMP_OFFSET 25.0f
+
+const uint8_t MPU6886_DATA_RDY_INT_BIT = (uint8_t) BIT0;
+const uint8_t MPU6886_GDRIVE_INT_BIT = (uint8_t) BIT2;
+const uint8_t MPU6886_FIFO_OVERFLOW_INT_BIT = (uint8_t) BIT4;
+const uint8_t MPU6886_WOM_Z_INT_BIT = (uint8_t) BIT5;
+const uint8_t MPU6886_WOM_Y_INT_BIT = (uint8_t) BIT6;
+const uint8_t MPU6886_WOM_X_INT_BIT = (uint8_t) BIT7;
+const uint8_t MPU6886_ALL_INTERRUPTS = (uint8_t)(BIT0 | BIT2 | BIT4 | BIT5 | BIT6 | BIT7);
+
+typedef struct {
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 2, 0)
+ i2c_master_dev_handle_t i2c_dev;
+#else
+ i2c_port_t bus;
+ uint16_t dev_addr;
+#endif
+ gpio_num_t int_pin;
+ uint32_t counter;
+ float dt; /*!< delay time between two measurements, dt should be small (ms level) */
+ struct timeval *timer;
+} mpu6886_dev_t;
+
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 2, 0)
+
+static esp_err_t mpu6886_write(mpu6886_handle_t sensor, const uint8_t reg_start_addr, const uint8_t *const data_buf,
+ const uint8_t data_len)
+{
+ mpu6886_dev_t *sens = (mpu6886_dev_t *) sensor;
+ uint8_t write_buf[data_len + 1];
+ write_buf[0] = reg_start_addr;
+ memcpy(&write_buf[1], data_buf, data_len);
+ return i2c_master_transmit(sens->i2c_dev, write_buf, data_len + 1, 1000);
+}
+
+static esp_err_t mpu6886_read(mpu6886_handle_t sensor, const uint8_t reg_start_addr, uint8_t *const data_buf,
+ const uint16_t data_len)
+{
+ mpu6886_dev_t *sens = (mpu6886_dev_t *) sensor;
+ return i2c_master_transmit_receive(sens->i2c_dev, ®_start_addr, 1, data_buf, data_len, 1000);
+}
+
+mpu6886_handle_t mpu6886_create(i2c_master_bus_handle_t bus, const uint16_t dev_addr)
+{
+ mpu6886_dev_t *sensor = (mpu6886_dev_t *) calloc(1, sizeof(mpu6886_dev_t));
+ if (!sensor) {
+ return NULL;
+ }
+
+ const i2c_device_config_t i2c_dev_cfg = {
+ .dev_addr_length = I2C_ADDR_BIT_LEN_7,
+ .device_address = dev_addr,
+ .scl_speed_hz = MPU6886_I2C_CLK_SPEED_HZ,
+ };
+ if (i2c_master_bus_add_device(bus, &i2c_dev_cfg, &sensor->i2c_dev) != ESP_OK) {
+ free(sensor);
+ return NULL;
+ }
+
+ sensor->counter = 0;
+ sensor->dt = 0;
+ sensor->timer = (struct timeval *) calloc(1, sizeof(struct timeval));
+ return (mpu6886_handle_t) sensor;
+}
+
+void mpu6886_delete(mpu6886_handle_t sensor)
+{
+ mpu6886_dev_t *sens = (mpu6886_dev_t *) sensor;
+ i2c_master_bus_rm_device(sens->i2c_dev);
+ free(sens->timer);
+ free(sens);
+}
+
+#else /* Legacy I2C API for IDF < 5.2 */
+
+static esp_err_t mpu6886_write(mpu6886_handle_t sensor, const uint8_t reg_start_addr, const uint8_t *const data_buf,
+ const uint8_t data_len)
+{
+ mpu6886_dev_t *sens = (mpu6886_dev_t *) sensor;
+ esp_err_t ret;
+
+ i2c_cmd_handle_t cmd = i2c_cmd_link_create();
+ ret = i2c_master_start(cmd);
+ assert(ESP_OK == ret);
+ ret = i2c_master_write_byte(cmd, sens->dev_addr | I2C_MASTER_WRITE, true);
+ assert(ESP_OK == ret);
+ ret = i2c_master_write_byte(cmd, reg_start_addr, true);
+ assert(ESP_OK == ret);
+ ret = i2c_master_write(cmd, data_buf, data_len, true);
+ assert(ESP_OK == ret);
+ ret = i2c_master_stop(cmd);
+ assert(ESP_OK == ret);
+ ret = i2c_master_cmd_begin(sens->bus, cmd, 1000 / portTICK_PERIOD_MS);
+ i2c_cmd_link_delete(cmd);
+
+ return ret;
+}
+
+static esp_err_t mpu6886_read(mpu6886_handle_t sensor, const uint8_t reg_start_addr, uint8_t *const data_buf,
+ const uint16_t data_len)
+{
+ mpu6886_dev_t *sens = (mpu6886_dev_t *) sensor;
+ esp_err_t ret;
+
+ i2c_cmd_handle_t cmd = i2c_cmd_link_create();
+ ret = i2c_master_start(cmd);
+ assert(ESP_OK == ret);
+ ret = i2c_master_write_byte(cmd, sens->dev_addr | I2C_MASTER_WRITE, true);
+ assert(ESP_OK == ret);
+ ret = i2c_master_write_byte(cmd, reg_start_addr, true);
+ assert(ESP_OK == ret);
+ ret = i2c_master_start(cmd);
+ assert(ESP_OK == ret);
+ ret = i2c_master_write_byte(cmd, sens->dev_addr | I2C_MASTER_READ, true);
+ assert(ESP_OK == ret);
+ ret = i2c_master_read(cmd, data_buf, data_len, I2C_MASTER_LAST_NACK);
+ assert(ESP_OK == ret);
+ ret = i2c_master_stop(cmd);
+ assert(ESP_OK == ret);
+ ret = i2c_master_cmd_begin(sens->bus, cmd, 1000 / portTICK_PERIOD_MS);
+ i2c_cmd_link_delete(cmd);
+
+ return ret;
+}
+
+mpu6886_handle_t mpu6886_create(i2c_port_t port, const uint16_t dev_addr)
+{
+ mpu6886_dev_t *sensor = (mpu6886_dev_t *) calloc(1, sizeof(mpu6886_dev_t));
+ if (!sensor) {
+ return NULL;
+ }
+ sensor->bus = port;
+ sensor->dev_addr = dev_addr << 1;
+ sensor->counter = 0;
+ sensor->dt = 0;
+ sensor->timer = (struct timeval *) calloc(1, sizeof(struct timeval));
+ return (mpu6886_handle_t) sensor;
+}
+
+void mpu6886_delete(mpu6886_handle_t sensor)
+{
+ mpu6886_dev_t *sens = (mpu6886_dev_t *) sensor;
+ free(sens->timer);
+ free(sens);
+}
+
+#endif /* ESP_IDF_VERSION check */
+
+esp_err_t mpu6886_get_deviceid(mpu6886_handle_t sensor, uint8_t *const deviceid)
+{
+ return mpu6886_read(sensor, MPU6886_WHO_AM_I, deviceid, 1);
+}
+
+esp_err_t mpu6886_reset(mpu6886_handle_t sensor)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp |= BIT7;
+ return mpu6886_write(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+}
+
+esp_err_t mpu6886_wake_up(mpu6886_handle_t sensor)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp &= (~BIT6);
+ ret = mpu6886_write(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+ return ret;
+}
+
+esp_err_t mpu6886_sleep(mpu6886_handle_t sensor)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp |= BIT6;
+ ret = mpu6886_write(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+ return ret;
+}
+
+esp_err_t mpu6886_config(mpu6886_handle_t sensor, const mpu6886_acce_fs_t acce_fs, const mpu6886_gyro_fs_t gyro_fs)
+{
+ uint8_t gyro_config = gyro_fs << 3;
+ uint8_t accel_config = acce_fs << 3;
+ esp_err_t ret;
+
+ ret = mpu6886_write(sensor, MPU6886_GYRO_CONFIG, &gyro_config, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ ret = mpu6886_write(sensor, MPU6886_ACCEL_CONFIG, &accel_config, 1);
+ return ret;
+}
+
+esp_err_t mpu6886_get_acce_sensitivity(mpu6886_handle_t sensor, float *const acce_sensitivity)
+{
+ esp_err_t ret;
+ uint8_t acce_fs;
+ ret = mpu6886_read(sensor, MPU6886_ACCEL_CONFIG, &acce_fs, 1);
+ acce_fs = (acce_fs >> 3) & 0x03;
+ switch (acce_fs) {
+ case MPU6886_ACCE_FS_2G:
+ *acce_sensitivity = 16384;
+ break;
+ case MPU6886_ACCE_FS_4G:
+ *acce_sensitivity = 8192;
+ break;
+ case MPU6886_ACCE_FS_8G:
+ *acce_sensitivity = 4096;
+ break;
+ case MPU6886_ACCE_FS_16G:
+ *acce_sensitivity = 2048;
+ break;
+ default:
+ break;
+ }
+ return ret;
+}
+
+esp_err_t mpu6886_get_gyro_sensitivity(mpu6886_handle_t sensor, float *const gyro_sensitivity)
+{
+ esp_err_t ret;
+ uint8_t gyro_fs;
+ ret = mpu6886_read(sensor, MPU6886_GYRO_CONFIG, &gyro_fs, 1);
+ gyro_fs = (gyro_fs >> 3) & 0x03;
+ switch (gyro_fs) {
+ case MPU6886_GYRO_FS_250DPS:
+ *gyro_sensitivity = 131;
+ break;
+ case MPU6886_GYRO_FS_500DPS:
+ *gyro_sensitivity = 65.5;
+ break;
+ case MPU6886_GYRO_FS_1000DPS:
+ *gyro_sensitivity = 32.8;
+ break;
+ case MPU6886_GYRO_FS_2000DPS:
+ *gyro_sensitivity = 16.4;
+ break;
+ default:
+ break;
+ }
+ return ret;
+}
+
+esp_err_t mpu6886_set_clock_source(mpu6886_handle_t sensor, mpu6886_clk_src_t clk_src)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp = (tmp & 0xF8) | (clk_src & 0x07);
+ return mpu6886_write(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_sample_rate_divider(mpu6886_handle_t sensor, uint8_t divider)
+{
+ return mpu6886_write(sensor, MPU6886_SMPLRT_DIV, ÷r, 1);
+}
+
+esp_err_t mpu6886_set_gyro_dlpf(mpu6886_handle_t sensor, mpu6886_dlpf_t dlpf)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_CONFIG, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp = (tmp & 0xF8) | (dlpf & 0x07);
+ return mpu6886_write(sensor, MPU6886_CONFIG, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_acce_dlpf(mpu6886_handle_t sensor, mpu6886_acce_dlpf_t dlpf)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_ACCEL_CONFIG2, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp = (tmp & 0xF0) | (dlpf & 0x07);
+ /* Clear ACCEL_FCHOICE_B (bit 3) to enable DLPF */
+ tmp &= ~BIT3;
+ return mpu6886_write(sensor, MPU6886_ACCEL_CONFIG2, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_fsync(mpu6886_handle_t sensor, mpu6886_fsync_out_t fsync_out)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_CONFIG, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp = (tmp & 0xC7) | ((fsync_out & 0x07) << 3);
+ return mpu6886_write(sensor, MPU6886_CONFIG, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_gyro_low_power(mpu6886_handle_t sensor, bool enable, mpu6886_gyro_avg_t avg)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_LP_MODE_CFG, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ if (enable) {
+ tmp |= BIT7;
+ } else {
+ tmp &= ~BIT7;
+ }
+ tmp = (tmp & 0x8F) | ((avg & 0x07) << 4);
+ return mpu6886_write(sensor, MPU6886_LP_MODE_CFG, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_acce_averaging(mpu6886_handle_t sensor, mpu6886_acce_avg_t avg)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_ACCEL_CONFIG2, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp = (tmp & 0xCF) | ((avg & 0x03) << 4);
+ return mpu6886_write(sensor, MPU6886_ACCEL_CONFIG2, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_acce_low_power_cycle(mpu6886_handle_t sensor, bool enable)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ if (enable) {
+ tmp |= BIT5;
+ } else {
+ tmp &= ~BIT5;
+ }
+ return mpu6886_write(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+}
+
+esp_err_t mpu6886_config_wom(mpu6886_handle_t sensor, uint8_t wom_x_thr, uint8_t wom_y_thr,
+ uint8_t wom_z_thr, mpu6886_wom_threshold_mode_t mode)
+{
+ esp_err_t ret;
+
+ ret = mpu6886_write(sensor, MPU6886_ACCEL_WOM_X_THR, &wom_x_thr, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ ret = mpu6886_write(sensor, MPU6886_ACCEL_WOM_Y_THR, &wom_y_thr, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ ret = mpu6886_write(sensor, MPU6886_ACCEL_WOM_Z_THR, &wom_z_thr, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ /* Enable accel intelligence, set mode to compare current vs previous, set threshold mode */
+ uint8_t intel_ctrl;
+ ret = mpu6886_read(sensor, MPU6886_ACCEL_INTEL_CTRL, &intel_ctrl, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ intel_ctrl |= BIT7; /* ACCEL_INTEL_EN */
+ intel_ctrl |= BIT6; /* ACCEL_INTEL_MODE = 1 (compare current with previous) */
+ if (mode == MPU6886_WOM_AND) {
+ intel_ctrl |= BIT0;
+ } else {
+ intel_ctrl &= ~BIT0;
+ }
+ return mpu6886_write(sensor, MPU6886_ACCEL_INTEL_CTRL, &intel_ctrl, 1);
+}
+
+esp_err_t mpu6886_set_axes_disable(mpu6886_handle_t sensor, uint8_t disable_mask)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_PWR_MGMT_2, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp = (tmp & 0xC0) | (disable_mask & 0x3F);
+ return mpu6886_write(sensor, MPU6886_PWR_MGMT_2, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_temp_disable(mpu6886_handle_t sensor, bool disable)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ if (disable) {
+ tmp |= BIT3;
+ } else {
+ tmp &= ~BIT3;
+ }
+ return mpu6886_write(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_gyro_standby(mpu6886_handle_t sensor, bool enable)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ if (enable) {
+ tmp |= BIT4;
+ } else {
+ tmp &= ~BIT4;
+ }
+ return mpu6886_write(sensor, MPU6886_PWR_MGMT_1, &tmp, 1);
+}
+
+esp_err_t mpu6886_enable_fifo(mpu6886_handle_t sensor, bool enable_fifo, bool gyro_fifo_en, bool acce_fifo_en)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+
+ /* Set FIFO_EN bit in USER_CTRL (register 0x6A) */
+ ret = mpu6886_read(sensor, MPU6886_USER_CTRL, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ if (enable_fifo) {
+ tmp |= BIT6;
+ } else {
+ tmp &= ~BIT6;
+ }
+ ret = mpu6886_write(sensor, MPU6886_USER_CTRL, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ /* Configure which data to write to FIFO (register 0x23) */
+ uint8_t fifo_en = 0;
+ if (gyro_fifo_en) {
+ fifo_en |= BIT4;
+ }
+ if (acce_fifo_en) {
+ fifo_en |= BIT3;
+ }
+ return mpu6886_write(sensor, MPU6886_FIFO_EN, &fifo_en, 1);
+}
+
+esp_err_t mpu6886_reset_fifo(mpu6886_handle_t sensor)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_USER_CTRL, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp |= BIT2;
+ return mpu6886_write(sensor, MPU6886_USER_CTRL, &tmp, 1);
+}
+
+esp_err_t mpu6886_get_fifo_count(mpu6886_handle_t sensor, uint16_t *count)
+{
+ uint8_t data[2];
+ esp_err_t ret = mpu6886_read(sensor, MPU6886_FIFO_COUNTH, data, 2);
+ *count = ((uint16_t)data[0] << 8) | data[1];
+ return ret;
+}
+
+esp_err_t mpu6886_read_fifo(mpu6886_handle_t sensor, uint8_t *buf, uint16_t len)
+{
+ return mpu6886_read(sensor, MPU6886_FIFO_R_W, buf, len);
+}
+
+esp_err_t mpu6886_set_fifo_watermark(mpu6886_handle_t sensor, uint16_t threshold)
+{
+ esp_err_t ret;
+ uint8_t th1 = (threshold >> 8) & 0x03;
+ uint8_t th2 = threshold & 0xFF;
+ ret = mpu6886_write(sensor, MPU6886_FIFO_WM_TH1, &th1, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ return mpu6886_write(sensor, MPU6886_FIFO_WM_TH2, &th2, 1);
+}
+
+esp_err_t mpu6886_get_fifo_wm_status(mpu6886_handle_t sensor, bool *status)
+{
+ uint8_t tmp;
+ esp_err_t ret = mpu6886_read(sensor, MPU6886_FIFO_WM_INT_STATUS, &tmp, 1);
+ *status = (tmp & BIT6) != 0;
+ return ret;
+}
+
+esp_err_t mpu6886_reset_signal_path(mpu6886_handle_t sensor)
+{
+ uint8_t tmp = BIT1 | BIT0; /* ACCEL_RST | TEMP_RST */
+ return mpu6886_write(sensor, MPU6886_SIGNAL_PATH_RESET, &tmp, 1);
+}
+
+esp_err_t mpu6886_reset_signal_cond(mpu6886_handle_t sensor)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_USER_CTRL, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp |= BIT0; /* SIG_COND_RST */
+ return mpu6886_write(sensor, MPU6886_USER_CTRL, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_output_limit(mpu6886_handle_t sensor)
+{
+ esp_err_t ret;
+ uint8_t tmp;
+ ret = mpu6886_read(sensor, MPU6886_ACCEL_INTEL_CTRL, &tmp, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ tmp |= BIT1; /* OUTPUT_LIMIT = 1 per datasheet requirement */
+ return mpu6886_write(sensor, MPU6886_ACCEL_INTEL_CTRL, &tmp, 1);
+}
+
+esp_err_t mpu6886_set_gyro_offset(mpu6886_handle_t sensor, int16_t x_offset, int16_t y_offset, int16_t z_offset)
+{
+ esp_err_t ret;
+ uint8_t data[2];
+
+ data[0] = (x_offset >> 8) & 0xFF;
+ data[1] = x_offset & 0xFF;
+ ret = mpu6886_write(sensor, MPU6886_XG_OFFS_USRH, data, 2);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ data[0] = (y_offset >> 8) & 0xFF;
+ data[1] = y_offset & 0xFF;
+ ret = mpu6886_write(sensor, MPU6886_YG_OFFS_USRH, data, 2);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ data[0] = (z_offset >> 8) & 0xFF;
+ data[1] = z_offset & 0xFF;
+ return mpu6886_write(sensor, MPU6886_ZG_OFFS_USRH, data, 2);
+}
+
+esp_err_t mpu6886_set_acce_offset(mpu6886_handle_t sensor, int16_t x_offset, int16_t y_offset, int16_t z_offset)
+{
+ esp_err_t ret;
+ uint8_t data[2];
+
+ /* Accel offset is 15-bit (bits [14:0] across two registers, bit 0 of low byte is reserved) */
+ data[0] = (x_offset >> 7) & 0xFF;
+ data[1] = (x_offset << 1) & 0xFE;
+ ret = mpu6886_write(sensor, MPU6886_XA_OFFSET_H, data, 2);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ data[0] = (y_offset >> 7) & 0xFF;
+ data[1] = (y_offset << 1) & 0xFE;
+ ret = mpu6886_write(sensor, MPU6886_YA_OFFSET_H, data, 2);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ data[0] = (z_offset >> 7) & 0xFF;
+ data[1] = (z_offset << 1) & 0xFE;
+ return mpu6886_write(sensor, MPU6886_ZA_OFFSET_H, data, 2);
+}
+
+esp_err_t mpu6886_get_acce_self_test(mpu6886_handle_t sensor, uint8_t *x_result, uint8_t *y_result, uint8_t *z_result)
+{
+ esp_err_t ret;
+ ret = mpu6886_read(sensor, MPU6886_SELF_TEST_X_ACCEL, x_result, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ ret = mpu6886_read(sensor, MPU6886_SELF_TEST_Y_ACCEL, y_result, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ return mpu6886_read(sensor, MPU6886_SELF_TEST_Z_ACCEL, z_result, 1);
+}
+
+esp_err_t mpu6886_get_gyro_self_test(mpu6886_handle_t sensor, uint8_t *x_result, uint8_t *y_result, uint8_t *z_result)
+{
+ esp_err_t ret;
+ ret = mpu6886_read(sensor, MPU6886_SELF_TEST_X_GYRO, x_result, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ ret = mpu6886_read(sensor, MPU6886_SELF_TEST_Y_GYRO, y_result, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+ return mpu6886_read(sensor, MPU6886_SELF_TEST_Z_GYRO, z_result, 1);
+}
+
+esp_err_t mpu6886_config_interrupts(mpu6886_handle_t sensor, const mpu6886_int_config_t *const interrupt_configuration)
+{
+ esp_err_t ret = ESP_OK;
+
+ if (NULL == interrupt_configuration) {
+ return ESP_ERR_INVALID_ARG;
+ }
+
+ if (GPIO_IS_VALID_GPIO(interrupt_configuration->interrupt_pin)) {
+ mpu6886_dev_t *sensor_device = (mpu6886_dev_t *) sensor;
+ sensor_device->int_pin = interrupt_configuration->interrupt_pin;
+ } else {
+ return ESP_ERR_INVALID_ARG;
+ }
+
+ uint8_t int_pin_cfg = 0x00;
+
+ ret = mpu6886_read(sensor, MPU6886_INTR_PIN_CFG, &int_pin_cfg, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ if (MPU6886_INTERRUPT_PIN_ACTIVE_LOW == interrupt_configuration->active_level) {
+ int_pin_cfg |= BIT7;
+ } else {
+ int_pin_cfg &= ~BIT7;
+ }
+
+ if (MPU6886_INTERRUPT_PIN_OPEN_DRAIN == interrupt_configuration->pin_mode) {
+ int_pin_cfg |= BIT6;
+ } else {
+ int_pin_cfg &= ~BIT6;
+ }
+
+ if (MPU6886_INTERRUPT_LATCH_UNTIL_CLEARED == interrupt_configuration->interrupt_latch) {
+ int_pin_cfg |= BIT5;
+ } else {
+ int_pin_cfg &= ~BIT5;
+ }
+
+ if (MPU6886_INTERRUPT_CLEAR_ON_ANY_READ == interrupt_configuration->interrupt_clear_behavior) {
+ int_pin_cfg |= BIT4;
+ } else {
+ int_pin_cfg &= ~BIT4;
+ }
+
+ ret = mpu6886_write(sensor, MPU6886_INTR_PIN_CFG, &int_pin_cfg, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ gpio_int_type_t gpio_intr_type;
+ if (MPU6886_INTERRUPT_PIN_ACTIVE_LOW == interrupt_configuration->active_level) {
+ gpio_intr_type = GPIO_INTR_NEGEDGE;
+ } else {
+ gpio_intr_type = GPIO_INTR_POSEDGE;
+ }
+
+ gpio_config_t int_gpio_config = {
+ .mode = GPIO_MODE_INPUT,
+ .intr_type = gpio_intr_type,
+ .pin_bit_mask = (BIT0 << interrupt_configuration->interrupt_pin)
+ };
+
+ ret = gpio_config(&int_gpio_config);
+ return ret;
+}
+
+esp_err_t mpu6886_register_isr(mpu6886_handle_t sensor, const mpu6886_isr_t isr)
+{
+ esp_err_t ret;
+ mpu6886_dev_t *sensor_device = (mpu6886_dev_t *) sensor;
+
+ if (NULL == sensor_device) {
+ return ESP_ERR_INVALID_ARG;
+ }
+
+ ret = gpio_isr_handler_add(
+ sensor_device->int_pin,
+ ((gpio_isr_t) * (isr)),
+ ((void *) sensor)
+ );
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ ret = gpio_intr_enable(sensor_device->int_pin);
+ return ret;
+}
+
+esp_err_t mpu6886_enable_interrupts(mpu6886_handle_t sensor, uint8_t interrupt_sources)
+{
+ esp_err_t ret;
+ uint8_t enabled_interrupts = 0x00;
+
+ ret = mpu6886_read(sensor, MPU6886_INTR_ENABLE, &enabled_interrupts, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ if (enabled_interrupts != interrupt_sources) {
+ enabled_interrupts |= interrupt_sources;
+ ret = mpu6886_write(sensor, MPU6886_INTR_ENABLE, &enabled_interrupts, 1);
+ }
+
+ return ret;
+}
+
+esp_err_t mpu6886_disable_interrupts(mpu6886_handle_t sensor, uint8_t interrupt_sources)
+{
+ esp_err_t ret;
+ uint8_t enabled_interrupts = 0x00;
+
+ ret = mpu6886_read(sensor, MPU6886_INTR_ENABLE, &enabled_interrupts, 1);
+ if (ESP_OK != ret) {
+ return ret;
+ }
+
+ if (0 != (enabled_interrupts & interrupt_sources)) {
+ enabled_interrupts &= (~interrupt_sources);
+ ret = mpu6886_write(sensor, MPU6886_INTR_ENABLE, &enabled_interrupts, 1);
+ }
+
+ return ret;
+}
+
+esp_err_t mpu6886_get_interrupt_status(mpu6886_handle_t sensor, uint8_t *const out_intr_status)
+{
+ if (NULL == out_intr_status) {
+ return ESP_ERR_INVALID_ARG;
+ }
+
+ return mpu6886_read(sensor, MPU6886_INTR_STATUS, out_intr_status, 1);
+}
+
+esp_err_t mpu6886_get_raw_acce(mpu6886_handle_t sensor, mpu6886_raw_acce_value_t *const raw_acce_value)
+{
+ uint8_t data_rd[6];
+ esp_err_t ret = mpu6886_read(sensor, MPU6886_ACCEL_XOUT_H, data_rd, sizeof(data_rd));
+
+ raw_acce_value->raw_acce_x = (int16_t)((data_rd[0] << 8) | (data_rd[1]));
+ raw_acce_value->raw_acce_y = (int16_t)((data_rd[2] << 8) | (data_rd[3]));
+ raw_acce_value->raw_acce_z = (int16_t)((data_rd[4] << 8) | (data_rd[5]));
+ return ret;
+}
+
+esp_err_t mpu6886_get_raw_gyro(mpu6886_handle_t sensor, mpu6886_raw_gyro_value_t *const raw_gyro_value)
+{
+ uint8_t data_rd[6];
+ esp_err_t ret = mpu6886_read(sensor, MPU6886_GYRO_XOUT_H, data_rd, sizeof(data_rd));
+
+ raw_gyro_value->raw_gyro_x = (int16_t)((data_rd[0] << 8) | (data_rd[1]));
+ raw_gyro_value->raw_gyro_y = (int16_t)((data_rd[2] << 8) | (data_rd[3]));
+ raw_gyro_value->raw_gyro_z = (int16_t)((data_rd[4] << 8) | (data_rd[5]));
+ return ret;
+}
+
+esp_err_t mpu6886_get_acce(mpu6886_handle_t sensor, mpu6886_acce_value_t *const acce_value)
+{
+ esp_err_t ret;
+ float acce_sensitivity;
+ mpu6886_raw_acce_value_t raw_acce;
+
+ ret = mpu6886_get_acce_sensitivity(sensor, &acce_sensitivity);
+ if (ret != ESP_OK) {
+ return ret;
+ }
+ ret = mpu6886_get_raw_acce(sensor, &raw_acce);
+ if (ret != ESP_OK) {
+ return ret;
+ }
+
+ acce_value->acce_x = raw_acce.raw_acce_x / acce_sensitivity;
+ acce_value->acce_y = raw_acce.raw_acce_y / acce_sensitivity;
+ acce_value->acce_z = raw_acce.raw_acce_z / acce_sensitivity;
+ return ESP_OK;
+}
+
+esp_err_t mpu6886_get_gyro(mpu6886_handle_t sensor, mpu6886_gyro_value_t *const gyro_value)
+{
+ esp_err_t ret;
+ float gyro_sensitivity;
+ mpu6886_raw_gyro_value_t raw_gyro;
+
+ ret = mpu6886_get_gyro_sensitivity(sensor, &gyro_sensitivity);
+ if (ret != ESP_OK) {
+ return ret;
+ }
+ ret = mpu6886_get_raw_gyro(sensor, &raw_gyro);
+ if (ret != ESP_OK) {
+ return ret;
+ }
+
+ gyro_value->gyro_x = raw_gyro.raw_gyro_x / gyro_sensitivity;
+ gyro_value->gyro_y = raw_gyro.raw_gyro_y / gyro_sensitivity;
+ gyro_value->gyro_z = raw_gyro.raw_gyro_z / gyro_sensitivity;
+ return ESP_OK;
+}
+
+esp_err_t mpu6886_get_temp(mpu6886_handle_t sensor, mpu6886_temp_value_t *const temp_value)
+{
+ uint8_t data_rd[2];
+ esp_err_t ret = mpu6886_read(sensor, MPU6886_TEMP_XOUT_H, data_rd, sizeof(data_rd));
+ /* MPU-6886 temperature formula: TEMP_degC = (TEMP_OUT / 326.8) + 25 */
+ temp_value->temp = (int16_t)((data_rd[0] << 8) | (data_rd[1])) / MPU6886_TEMP_SENSITIVITY + MPU6886_TEMP_OFFSET;
+ return ret;
+}
+
+esp_err_t mpu6886_complementary_filter(mpu6886_handle_t sensor, const mpu6886_acce_value_t *const acce_value,
+ const mpu6886_gyro_value_t *const gyro_value, mpu6886_complementary_angle_t *const complementary_angle)
+{
+ float acce_angle[2];
+ float gyro_angle[2];
+ float gyro_rate[2];
+ mpu6886_dev_t *sens = (mpu6886_dev_t *) sensor;
+
+ sens->counter++;
+ if (sens->counter == 1) {
+ acce_angle[0] = (atan2(acce_value->acce_y, acce_value->acce_z) * RAD_TO_DEG);
+ acce_angle[1] = (atan2(acce_value->acce_x, acce_value->acce_z) * RAD_TO_DEG);
+ complementary_angle->roll = acce_angle[0];
+ complementary_angle->pitch = acce_angle[1];
+ gettimeofday(sens->timer, NULL);
+ return ESP_OK;
+ }
+
+ struct timeval now, dt_t;
+ gettimeofday(&now, NULL);
+ timersub(&now, sens->timer, &dt_t);
+ sens->dt = (float) (dt_t.tv_sec) + (float)dt_t.tv_usec / 1000000;
+ gettimeofday(sens->timer, NULL);
+
+ acce_angle[0] = (atan2(acce_value->acce_y, acce_value->acce_z) * RAD_TO_DEG);
+ acce_angle[1] = (atan2(acce_value->acce_x, acce_value->acce_z) * RAD_TO_DEG);
+
+ gyro_rate[0] = gyro_value->gyro_x;
+ gyro_rate[1] = gyro_value->gyro_y;
+ gyro_angle[0] = gyro_rate[0] * sens->dt;
+ gyro_angle[1] = gyro_rate[1] * sens->dt;
+
+ complementary_angle->roll = (ALPHA * (complementary_angle->roll + gyro_angle[0])) + ((1 - ALPHA) * acce_angle[0]);
+ complementary_angle->pitch = (ALPHA * (complementary_angle->pitch + gyro_angle[1])) + ((1 - ALPHA) * acce_angle[1]);
+
+ return ESP_OK;
+}
diff --git a/components/sensors/icm42670/icm42670.c b/components/sensors/icm42670/icm42670.c
index a4d6ad512..bdba7f1b7 100644
--- a/components/sensors/icm42670/icm42670.c
+++ b/components/sensors/icm42670/icm42670.c
@@ -54,7 +54,7 @@ typedef struct {
i2c_master_dev_handle_t i2c_handle;
bool initialized_filter;
uint64_t previous_measurement_us;
- complimentary_angle_t previous_measurement;
+ complementary_angle_t previous_measurement;
} icm42670_dev_t;
/*******************************************************************************
@@ -381,7 +381,7 @@ static esp_err_t icm42670_read(icm42670_handle_t sensor, const uint8_t reg_start
}
esp_err_t icm42670_complimentory_filter(icm42670_handle_t sensor, const icm42670_value_t *const acce_value,
- const icm42670_value_t *const gyro_value, complimentary_angle_t *const complimentary_angle)
+ const icm42670_value_t *const gyro_value, complementary_angle_t *const complementary_angle)
{
icm42670_dev_t *sens = (icm42670_dev_t *) sensor;
float measurement_delta;
@@ -410,13 +410,13 @@ esp_err_t icm42670_complimentory_filter(icm42670_handle_t sensor, const icm42670
gyro_roll_angle = gyro_value->x * measurement_delta;
gyro_pitch_angle = gyro_value->y * measurement_delta;
- complimentary_angle->roll = (ALPHA * (sens->previous_measurement.roll + gyro_roll_angle)) + ((
+ complementary_angle->roll = (ALPHA * (sens->previous_measurement.roll + gyro_roll_angle)) + ((
1 - ALPHA) * acc_roll_angle);
- complimentary_angle->pitch = (ALPHA * (sens->previous_measurement.pitch + gyro_pitch_angle)) + ((
+ complementary_angle->pitch = (ALPHA * (sens->previous_measurement.pitch + gyro_pitch_angle)) + ((
1 - ALPHA) * acc_pitch_angle);
- sens->previous_measurement.roll = complimentary_angle->roll;
- sens->previous_measurement.pitch = complimentary_angle->pitch;
+ sens->previous_measurement.roll = complementary_angle->roll;
+ sens->previous_measurement.pitch = complementary_angle->pitch;
return ESP_OK;
}
diff --git a/components/sensors/icm42670/include/icm42670.h b/components/sensors/icm42670/include/icm42670.h
index f12409900..931008000 100644
--- a/components/sensors/icm42670/include/icm42670.h
+++ b/components/sensors/icm42670/include/icm42670.h
@@ -117,7 +117,7 @@ typedef struct {
typedef struct {
float roll;
float pitch;
-} complimentary_angle_t;
+} complementary_angle_t;
typedef void *icm42670_handle_t;
@@ -292,14 +292,14 @@ esp_err_t icm42670_get_temp_value(icm42670_handle_t sensor, float *value);
*
* @param acce_value accelerometer measurements
* @param gyro_value gyroscope measurements
- * @param complimentary_angle complimentary angle
+ * @param complementary_angle complementary angle
*
* @return
* - ESP_OK Success
* - ESP_FAIL Fail
*/
esp_err_t icm42670_complimentory_filter(icm42670_handle_t sensor, const icm42670_value_t *acce_value,
- const icm42670_value_t *gyro_value, complimentary_angle_t *complimentary_angle);
+ const icm42670_value_t *gyro_value, complementary_angle_t *complementary_angle);
/**
* @brief Read a register
diff --git a/examples/display_rotation/main/main.c b/examples/display_rotation/main/main.c
index 955c9cfd5..4d46019a9 100644
--- a/examples/display_rotation/main/main.c
+++ b/examples/display_rotation/main/main.c
@@ -15,8 +15,12 @@
#include "bsp/esp-bsp.h"
#include "lvgl.h"
#if BSP_CAPS_IMU
+#if defined(BSP_BOARD_M5STACK_CORE_2)
+#include "mpu6886.h"
+#else
#include "icm42670.h"
#endif
+#endif
static const char *TAG = "example";
@@ -27,8 +31,12 @@ static lv_disp_t *display;
static lv_obj_t *lbl_rotation;
static lv_disp_rotation_t rotation = LV_DISPLAY_ROTATION_0;
#if BSP_CAPS_IMU
+#if defined(BSP_BOARD_M5STACK_CORE_2)
+static mpu6886_handle_t imu = NULL;
+#else
static icm42670_handle_t imu = NULL;
#endif
+#endif
/*******************************************************************************
@@ -145,6 +153,68 @@ static void app_lvgl_display(void)
}
#if BSP_CAPS_IMU
+#if defined(BSP_BOARD_M5STACK_CORE_2)
+static void app_imu_init(void)
+{
+ i2c_master_bus_handle_t i2c_handle = bsp_i2c_get_handle();
+ imu = mpu6886_create(i2c_handle, MPU6886_I2C_ADDRESS);
+ if (imu) {
+ mpu6886_wake_up(imu);
+ mpu6886_set_output_limit(imu);
+ mpu6886_set_clock_source(imu, MPU6886_CLK_AUTO);
+ mpu6886_config(imu, MPU6886_ACCE_FS_2G, MPU6886_GYRO_FS_2000DPS);
+ }
+}
+
+static void app_imu_read(void)
+{
+ mpu6886_acce_value_t acce_val;
+ mpu6886_get_acce(imu, &acce_val);
+ ESP_LOGI(TAG, "ACCE val: %.2f, %.2f, %.2f", acce_val.acce_x, acce_val.acce_y, acce_val.acce_z);
+
+ mpu6886_gyro_value_t gyro_val;
+ mpu6886_get_gyro(imu, &gyro_val);
+ ESP_LOGI(TAG, "GYRO val: %.2f, %.2f, %.2f", gyro_val.gyro_x, gyro_val.gyro_y, gyro_val.gyro_z);
+
+ mpu6886_temp_value_t temp_val;
+ mpu6886_get_temp(imu, &temp_val);
+ ESP_LOGI(TAG, "TEMP val: %.2f", temp_val.temp);
+
+ if (acce_val.acce_y < -0.6) {
+ if (rotation != LV_DISPLAY_ROTATION_0) {
+ rotation = LV_DISPLAY_ROTATION_0;
+ bsp_display_lock(0);
+ bsp_display_rotate(display, rotation);
+ lv_label_set_text_fmt(lbl_rotation, "Rotation %d°", app_lvgl_get_rotation_degrees(rotation));
+ bsp_display_unlock();
+ }
+ } else if (acce_val.acce_y > 0.6) {
+ if (rotation != LV_DISPLAY_ROTATION_180) {
+ rotation = LV_DISPLAY_ROTATION_180;
+ bsp_display_lock(0);
+ bsp_display_rotate(display, rotation);
+ lv_label_set_text_fmt(lbl_rotation, "Rotation %d°", app_lvgl_get_rotation_degrees(rotation));
+ bsp_display_unlock();
+ }
+ } else if (acce_val.acce_x > 0.6) {
+ if (rotation != LV_DISPLAY_ROTATION_270) {
+ rotation = LV_DISPLAY_ROTATION_270;
+ bsp_display_lock(0);
+ bsp_display_rotate(display, rotation);
+ lv_label_set_text_fmt(lbl_rotation, "Rotation %d°", app_lvgl_get_rotation_degrees(rotation));
+ bsp_display_unlock();
+ }
+ } else if (acce_val.acce_x < -0.6) {
+ if (rotation != LV_DISPLAY_ROTATION_90) {
+ rotation = LV_DISPLAY_ROTATION_90;
+ bsp_display_lock(0);
+ bsp_display_rotate(display, rotation);
+ lv_label_set_text_fmt(lbl_rotation, "Rotation %d°", app_lvgl_get_rotation_degrees(rotation));
+ bsp_display_unlock();
+ }
+ }
+}
+#else /* ICM42670-based boards */
static void app_imu_init(void)
{
i2c_master_bus_handle_t i2c_handle = bsp_i2c_get_handle();
@@ -179,7 +249,7 @@ static void app_imu_read(void)
icm42670_get_temp_value(imu, &val);
ESP_LOGI(TAG, "TEMP val: %.2f", val);
- complimentary_angle_t angle;
+ complementary_angle_t angle;
icm42670_complimentory_filter(imu, &acce_val, &gyro_val, &angle);
ESP_LOGI(TAG, "Angle roll: %.2f pitch: %.2f ", angle.roll, angle.pitch);
@@ -218,7 +288,8 @@ static void app_imu_read(void)
}
}
-#endif
+#endif /* BSP_BOARD_M5STACK_CORE_2 */
+#endif /* BSP_CAPS_IMU */
void app_main(void)
{
diff --git a/examples/display_rotation/sdkconfig.bsp.m5stack_core_2 b/examples/display_rotation/sdkconfig.bsp.m5stack_core_2
new file mode 100644
index 000000000..0cb114aee
--- /dev/null
+++ b/examples/display_rotation/sdkconfig.bsp.m5stack_core_2
@@ -0,0 +1,29 @@
+# This file was generated using idf.py save-defconfig. It can be edited manually.
+# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration
+#
+CONFIG_IDF_TARGET="esp32"
+CONFIG_BSP_SELECT_M5STACK_CORE_2=y
+
+CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
+CONFIG_BSP_PMU_AXP2101=y
+
+## LVGL9 ##
+CONFIG_LV_CONF_SKIP=y
+
+#CLIB default
+CONFIG_LV_USE_CLIB_MALLOC=y
+CONFIG_LV_USE_CLIB_SPRINTF=y
+CONFIG_LV_USE_CLIB_STRING=y
+
+# Performance monitor
+CONFIG_LV_USE_OBSERVER=y
+CONFIG_LV_USE_SYSMON=y
+CONFIG_LV_USE_PERF_MONITOR=y
+
+## LVGL8 - uncomment, when using LVGL8 ##
+# CONFIG_LV_USE_PERF_MONITOR=y
+# CONFIG_LV_COLOR_16_SWAP=y
+# CONFIG_LV_MEM_CUSTOM=y
+# CONFIG_LV_MEMCPY_MEMSET_STD=y
+# CONFIG_LV_SPRINTF_CUSTOM=y
diff --git a/examples/display_sensors/main/main.c b/examples/display_sensors/main/main.c
index 678198720..ca40027a4 100644
--- a/examples/display_sensors/main/main.c
+++ b/examples/display_sensors/main/main.c
@@ -44,7 +44,7 @@ static uint8_t g_page_num = 0;
static mpu6050_acce_value_t acce;
static mpu6050_gyro_value_t gyro;
-static complimentary_angle_t complimentary_angle;
+static complementary_angle_t complementary_angle;
static void display_show_signs(void)
{
@@ -132,12 +132,12 @@ static void display_show_gyro_data(void)
bsp_display_unlock();
}
-static void display_show_complimentary_angle(void)
+static void display_show_complementary_angle(void)
{
- ESP_LOGI(TAG, "roll:%.2f, pitch:%.2f", complimentary_angle.roll, complimentary_angle.pitch);
+ ESP_LOGI(TAG, "roll:%.2f, pitch:%.2f", complementary_angle.roll, complementary_angle.pitch);
bsp_display_lock(0);
- lv_label_set_text_fmt(main_label, "Roll: %.2f\nPitch: %.2f", complimentary_angle.roll, complimentary_angle.pitch);
+ lv_label_set_text_fmt(main_label, "Roll: %.2f\nPitch: %.2f", complementary_angle.roll, complementary_angle.pitch);
lv_obj_set_style_text_align(main_label, LV_TEXT_ALIGN_LEFT, 0);
bsp_display_unlock();
}
@@ -197,7 +197,7 @@ static void display_show_task(void *pvParameters)
display_show_gyro_data();
break;
case 3:
- display_show_complimentary_angle();
+ display_show_complementary_angle();
break;
case 4:
display_show_barometer_data();
@@ -215,7 +215,7 @@ static void mpu6050_read(void *pvParameters)
{
mpu6050_get_acce(mpu6050_dev, &acce);
mpu6050_get_gyro(mpu6050_dev, &gyro);
- mpu6050_complimentory_filter(mpu6050_dev, &acce, &gyro, &complimentary_angle);
+ mpu6050_complimentory_filter(mpu6050_dev, &acce, &gyro, &complementary_angle);
}
static void btn_handler(void *button_handle, void *usr_data)
@@ -277,7 +277,7 @@ void app_main(void)
q_page_num = xQueueCreate(10, sizeof(uint8_t));
xTaskCreate(display_show_task, "display_show_task", 2048 * 2, NULL, 5, NULL);
- // In order to get accurate calculation of complimentary angle we need fast reading (5ms)
+ // In order to get accurate calculation of complementary angle we need fast reading (5ms)
// FreeRTOS resolution is 10ms, so esp_timer is used
const esp_timer_create_args_t cal_timer_config = {
.callback = mpu6050_read,