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,