Compare commits

..

1992 Commits

Author SHA1 Message Date
Xiao Xufeng
f5c3654a1c change(version): Update version to 5.4.2 2025-06-20 14:35:04 +08:00
Jiang Jiang Jian
f0f2980d05 Merge branch 'bugfix/http_client_test_failure_v5.4' into 'release/v5.4'
fix: update root certificate for postman-echo endpoint (v5.4)

See merge request espressif/esp-idf!39847
2025-06-20 14:18:29 +08:00
morris
fe5927aee6 Merge branch 'ci/readme_remove_c61_fix_ci' into 'release/v5.4'
ci(esp32c61): remove c61 support from readme on 5.4

See merge request espressif/esp-idf!39892
2025-06-18 11:30:52 +08:00
morris
ee76b46195 fix(onewire): enable internal pull-up resistor by default
In case there's no pull-up resistor on the external device
2025-06-17 15:09:40 +08:00
wanckl
ea03622621 ci(esp32c61): remove c61 support from readme on 5.4 2025-06-17 15:09:40 +08:00
Jiang Jiang Jian
75f9cc646d Merge branch 'fix/update_dfs_compensate_table_v5.4' into 'release/v5.4'
fix(esp_hw_support): update esp32 dfs table to make the timing drift always negative (v5.4)

See merge request espressif/esp-idf!39839
2025-06-16 20:42:34 +08:00
wuzhenghui
2519605acb change(bt): increase BTDM_MODEM_WAKE_UP_DELAY 2025-06-13 20:37:35 +08:00
wuzhenghui
626123bbeb change(esp_timer): make esp_timer timming drift always be negative 2025-06-13 20:37:30 +08:00
Mahavir Jain
96eb236610 fix: update root certificate for postman-echo endpoint
The certificate chain for postman-echo endpoint has switched to
Let's Encrypt root CA
2025-06-13 11:05:38 +05:30
wuzhenghui
5b64757042 fix(esp_hw_support): config lact in critical 2025-06-13 12:06:18 +08:00
Jiang Jiang Jian
46909c5048 Merge branch 'bugfix/add_missing_deinit_call_v5.4' into 'release/v5.4'
fix(nimble): Add invocation for mempool_deinit (v5.4)

See merge request espressif/esp-idf!39671
2025-06-10 19:23:27 +08:00
morris
e03d8d7ee9 Merge branch 'test/c61_disable_build_test_v5.4' into 'release/v5.4'
test(ci): disable c61 build test on 5.4

See merge request espressif/esp-idf!39630
2025-06-09 17:23:33 +08:00
Island
b3d3a82daa Merge branch 'fix/ble_log_spi_out_timer_delete_v5.4' into 'release/v5.4'
fix(ble): set timer handle to null after deletion (v5.4)

See merge request espressif/esp-idf!39559
2025-06-06 14:19:27 +08:00
Rahul Tank
401f0a7cae fix(nimble): Add invocation for mempool_deinit 2025-06-04 17:02:41 +05:30
wanckl
66c8539368 test(ci): disable c61 build test on 5.4 2025-06-03 20:09:05 +08:00
Zhou Xiao
c3c7164dc5 fix(ble): set timer handle to null after deletion
(cherry picked from commit 1614e71eb6)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-30 19:53:39 +08:00
Jiang Jiang Jian
28980b62c9 Merge branch 'bugfix/add_more_checks_when_receiving_espnow_v5.4' into 'release/v5.4'
fix(wifi): Added more check when receiving espnow data (v5.4)

See merge request espressif/esp-idf!39518
2025-05-30 00:35:27 +08:00
sibeibei
b369c44beb fix(wifi): rx bcn failed when sta off channel under modem state 2025-05-29 20:46:16 +08:00
zhangyanjiao
d4dafbdc35 fix(wifi): Added more check when receiving espnow data 2025-05-29 20:46:16 +08:00
Jiang Jiang Jian
306f101a2b Merge branch 'fix/incorrect_setting_of_sco_packet_type_mask_v5.4' into 'release/v5.4'
fix(bt): fixed incorrect mask was used to exclude sco packets (backport v5.4)

See merge request espressif/esp-idf!39500
2025-05-29 16:19:08 +08:00
Jiang Jiang Jian
8497af9b77 Merge branch 'bugfix/scan_stop_when_conenct_v5.4' into 'release/v5.4'
fix(esp_wifi): Fix locking in incorrect state when stop_scan is called after connect

See merge request espressif/esp-idf!39481
2025-05-29 16:18:35 +08:00
Shreyas Sheth
5fb9c3a849 fix(esp_wifi): Fix locking in incorrect state when stop_scan is called after connect 2025-05-29 12:53:42 +05:30
Jiang Jiang Jian
d5a43edfbc Merge branch 'feature/add_uart_io_deinit_process_v5.4' into 'release/v5.4'
fix(uart): eliminate garbled data on TX/RX line in sleep (v5.4)

See merge request espressif/esp-idf!39263
2025-05-29 13:50:38 +08:00
Jiang Jiang Jian
b901c89f95 Merge branch 'feat/impl_bt_coex_timer_event_v5.4' into 'release/v5.4'
feat(coex): implement BT coex timer event (Backport v5.4)

See merge request espressif/esp-idf!39437
2025-05-29 13:50:16 +08:00
Jiang Jiang Jian
104f57db68 Merge branch 'bugfix/fix_sta_connection_info_error_on_c5_c6_v5.4' into 'release/v5.4'
fix(wifi): fix the issue that sta connection info loss lr info on C5/C6 (v5.4)

See merge request espressif/esp-idf!39439
2025-05-29 11:33:19 +08:00
gongyantao
ac5b71e415 fix(bt): fixed incorrect mask was used to exclude sco packets 2025-05-29 09:55:41 +08:00
zhangyanjiao
49ac962c51 fix(wifi): fix the issue that sta connection info loss lr info on C5/C6 2025-05-28 19:09:34 +08:00
Jiang Jiang Jian
c8b1951189 Merge branch 'fix/rrm_config_set_v5.4' into 'release/v5.4'
Set rrm config condition in case RRM monitoring is enabled

See merge request espressif/esp-idf!39431
2025-05-28 17:56:45 +08:00
Jiang Jiang Jian
f906de4eb6 Merge branch 'bugfix/incorrect_sae_pk_flag_v5.4' into 'release/v5.4'
Disable SAE-PK indication in Assoc Request when not configured (Backport v5.4)

See merge request espressif/esp-idf!39075
2025-05-28 17:56:27 +08:00
Jiang Jiang Jian
7cc3e9c957 Merge branch 'bugfix/supplicant_analyzer_fixes_v5.4' into 'release/v5.4'
Bugfix/supplicant analyzer fixes (v5.4)

See merge request espressif/esp-idf!39455
2025-05-28 14:29:59 +08:00
Jiang Jiang Jian
ebcbbb94fe Merge branch 'bugfix/fix_few_nimble_issues_10052025_v5.4' into 'release/v5.4'
fix(nimble): fix few issues 10052025(v5.4)

See merge request espressif/esp-idf!39014
2025-05-28 14:24:57 +08:00
Jiang Jiang Jian
70ff14e4fa Merge branch 'bugfix/fix_some_external_coexist_issues_v5.4' into 'release/v5.4'
fix(coex): fix some external coexist issue(Backport v5.4)

See merge request espressif/esp-idf!39435
2025-05-28 14:24:53 +08:00
Jiang Jiang Jian
a68299e69f Merge branch 'fix/bootloader_reserved_area_alignment_v5.4' into 'release/v5.4'
fix(esp_system): fix RTC reserved area alignment in the linker script (backport v5.4)

See merge request espressif/esp-idf!39253
2025-05-28 14:24:20 +08:00
akshat
bcd91ec882 bugfix(wifi): Fix incorrect SAE-PK advertisement in assoc request 2025-05-28 14:23:56 +08:00
Jiang Jiang Jian
df50dda690 Merge branch 'bugfix/wps_pbc_overlap_uuid_v5.4' into 'release/v5.4'
fix(wpa_supplicant): Ensure pbc_overlap event is posted correctly (Backport v5.4)

See merge request espressif/esp-idf!39056
2025-05-28 14:22:27 +08:00
Jiang Jiang Jian
fe9669d4fb Merge branch 'ci/fix-custom-oocd-setting_v5.4' into 'release/v5.4'
ci: select OpenOCD binary based on runner (v5.4)

See merge request espressif/esp-idf!39377
2025-05-28 14:20:39 +08:00
Island
9b329bb893 Merge branch 'feat/reduce_bin_size_and_iram_for_ble_rom_code_v5.4' into 'release/v5.4'
feat(ble/controller): Reduce bin size and IRAM for BLE rom code on ESP32-C3 and ESP32-S3 (v5.4)

See merge request espressif/esp-idf!39452
2025-05-28 11:19:00 +08:00
Island
282c1d6576 Merge branch 'bugfix/fix_send_delete_link_key_cmd_1_v5.4' into 'release/v5.4'
Bugfix/fix send delete link key cmd 1 (v5.4)

See merge request espressif/esp-idf!39445
2025-05-28 10:58:37 +08:00
Island
f3e781b8a2 Merge branch 'fix/ble_mesh_micellaneous_update_v5.4' into 'release/v5.4'
Fix/ble mesh micellaneous update v5.4

See merge request espressif/esp-idf!39460
2025-05-28 10:58:14 +08:00
luoxu
6305482abb feat(ble_mesh): update lib to bbb57d10f9 2025-05-27 20:57:18 +08:00
luoxu
549cecbe6e feat(ble_mesh): Change the type of rpl size from uint8 to uint16 2025-05-27 20:57:18 +08:00
luoxu
355e56ba55 fix(ble_mesh): update ble 50 macro on unsupported version 2025-05-27 20:57:18 +08:00
luoxu
736eda2189 fix(ble_mesh): fixed issue where private beacon used incorrect adv type 2025-05-27 20:57:18 +08:00
luoxu
85fcf36fb0 fix(ble_mesh): fixed some issues with ble50 2025-05-27 20:57:18 +08:00
luoxu
822385a92e feat(ble_mesh): Remote Provisioning Server UUID Matchs Supported 2025-05-27 20:57:18 +08:00
luoxu
228470339f fix(ble_mesh): Remote Provisioning Client/Server bugs fixed 2025-05-27 20:57:18 +08:00
Kapil Gupta
2348bc3ff9 ci(esp_wifi): Extend eloop test to verify wifi deinit properly 2025-05-27 13:43:03 +05:30
Kapil Gupta
6d97c71d91 fix(esp_wifi): Fixed some concurrency issues in eloop deinit 2025-05-27 13:42:55 +05:30
Kapil Gupta
3e810f5936 fix(esp_wifi): Add eloop blocking call API for public APIs 2025-05-27 13:42:41 +05:30
Kapil Gupta
221f641eb8 fix(esp_wifi): Fixed static analyzer issues 2025-05-27 13:39:08 +05:30
Kapil Gupta
4514aa8e11 fix(esp_wifi): Disble IP renew skip by default 2025-05-27 13:37:23 +05:30
Zhi Wei Jian
33df4408d7 feat(ble/controller): Reduce bin size and IRAM for BLE rom code
(cherry picked from commit 1d739291ca)

Co-authored-by: zhiweijian <zhiweijian@espressif.com>
2025-05-27 16:03:34 +08:00
Zhang Hai Peng
3ebab4f681 fix(ble/bluedroid): Fixed clear BLE device recored
(cherry picked from commit 21391a45fd)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-05-27 15:13:54 +08:00
Zhang Hai Peng
3b6faa8514 fix(ble/bluedroid): Fixed issue with deleting link key when classic Bluetooth is not used
(cherry picked from commit 7c16bce827)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-05-27 15:13:51 +08:00
linruihao
b50ce3c7ac feat(coex): implement BT coex timer event 2025-05-27 15:00:12 +08:00
Jiang Jiang Jian
6f5c9d4a4c Merge branch 'change/exclude_cve-2023-53154_v5.4' into 'release/v5.4'
change: adds CVE-2023-53154 to cJSON sbom exclude list (v5.4)

See merge request espressif/esp-idf!39416
2025-05-27 14:43:37 +08:00
muhaidong
279dc78e38 fix(coex): fix some external coexist issue 2025-05-27 14:36:28 +08:00
Song Ruo Jing
a46990ff5e fix(uart): fix nmea0183 example wrong knots to m/s unit conversion
Closes https://github.com/espressif/esp-idf/issues/15695
2025-05-27 14:15:33 +08:00
Song Ruo Jing
ec373b51b8 fix(uart): correct C3/S3 module enable porcedure to avoid undesired line noise 2025-05-27 14:15:33 +08:00
Song Ruo Jing
3b3ae85bbe fix(sleep): uart suspend/flush should also check if port is enabled on esp32 2025-05-27 14:15:33 +08:00
Song Ruo Jing
16fced715f docs(uart): improve set/get baud rate API docs
Closes https://github.com/espressif/esp-idf/issues/15449
2025-05-27 14:15:33 +08:00
Song Ruo Jing
1084a1e14c fix(uart): fixed coverity ininitialized scalar variable in uart_tcgetattr 2025-05-27 14:15:33 +08:00
Song Ruo Jing
253c69da08 fix(dedic_gpio): fix calloc to heap_caps_calloc 2025-05-27 14:15:33 +08:00
Song Ruo Jing
bb52e53ede fix(uart): eliminate garbled data on UART TX/RX line in sleep 2025-05-27 14:15:33 +08:00
Song Ruo Jing
60f5828a4a feat(uart): add pin release process to uart driver 2025-05-27 14:15:29 +08:00
Rahul Tank
78214d16ee fix(nimble): Add changes for coverity reported issue 2025-05-27 11:08:25 +05:30
Rahul Tank
66c12d4efe fix(nimble): Add support for minimilistic builds 2025-05-27 11:07:33 +05:30
Rahul Tank
89c26078da fix(nimble): Extend support for allow connect during scan for more chips 2025-05-27 11:06:12 +05:30
Rahul Tank
c36adf0947 fix(nimble): Add configurable option to select ext adv v2 command 2025-05-27 11:04:54 +05:30
Astha Verma
6e4a2619ee fix(nimble): Added api's for fetching gatt cache info and discover included service 2025-05-27 11:03:20 +05:30
tarun.kumar
11334e1afd fix(wifi) : Set rrm config condition in case RRM monitoring is enabled 2025-05-27 10:53:07 +05:30
Jiang Jiang Jian
606ba21345 Merge branch 'feat/ble_log_spi_out_dev_phase_3_v5.4' into 'release/v5.4'
Feat/ble log spi out dev phase 3 (v5.4)

See merge request espressif/esp-idf!39355
2025-05-27 11:32:51 +08:00
Omar Chebib
fd7cfe0b04 fix(esp_system): fix RTC reserved area alignment in the linker script
Make sure the size of the RTC reserved area complies with the alignment requirement.

Closes https://github.com/espressif/esp-idf/issues/13082
2025-05-27 11:20:07 +08:00
Jiang Jiang Jian
76b003c8d6 Merge branch 'bugfix/fix_ble_scan_no_adv_report_when_connected_v5.4' into 'release/v5.4'
Fixed missing ADV reports after bonding and connection on ESP32-C3 and ESP32-S3 (v5.4)

See merge request espressif/esp-idf!39275
2025-05-27 11:15:50 +08:00
Jiang Jiang Jian
3c118a4a10 Merge branch 'bugfix/handle_flow_control_flag_v5.4' into 'release/v5.4'
fix(nimble): Add chip dependancy flag for Flow control feature (v5.4)

See merge request espressif/esp-idf!39294
2025-05-27 11:15:32 +08:00
Jiang Jiang Jian
89edea04e1 Merge branch 'bugfix/esp32s2_memprot_clear_v5.4' into 'release/v5.4'
fix(esp_hw_support): clear the memory protection interrupt status on boot (backport v5.4)

See merge request espressif/esp-idf!38052
2025-05-27 11:14:39 +08:00
Jiang Jiang Jian
871aeae6ad Merge branch 'fix/lp_periph_use_int_raw_v5.4' into 'release/v5.4'
change(lp-core): Update LP I2C and LP UART drivers to use raw interrupt status (v5.4)

See merge request espressif/esp-idf!39249
2025-05-27 11:11:29 +08:00
Jiang Jiang Jian
9d6a4e6962 Merge branch 'docs/fix_p4_usb_jtag_pins_v5.4' into 'release/v5.4'
docs(jtag): fix esp32p4 usb jtag pins (v5.4)

See merge request espressif/esp-idf!39157
2025-05-27 11:02:02 +08:00
Jiang Jiang Jian
82eba308c8 Merge branch 'docs/autocolor_multiline_v5.4' into 'release/v5.4'
docs(tools/idf-monitor): Add note about autocoloring limitation on multiline logs (v5.4)

See merge request espressif/esp-idf!39147
2025-05-27 11:01:24 +08:00
Jiang Jiang Jian
0ba1b04ebb Merge branch 'bugfix/fix_some_ble_bugs_0422_v5.4' into 'release/v5.4'
Bugfix/fix some ble bugs 0422 (v5.4)

See merge request espressif/esp-idf!39072
2025-05-27 10:58:54 +08:00
Jiang Jiang Jian
5c11f71fbc Merge branch 'backport/backport_some_changes_250512_v5.4' into 'release/v5.4'
fix(wifi): fix some wifi bugs(backport v5.4)

See merge request espressif/esp-idf!39400
2025-05-27 10:52:57 +08:00
Jiang Jiang Jian
87c18b1a46 Merge branch 'feat/socket_count_checks_v5.4' into 'release/v5.4'
feat(network/lwip): Add checks for maximum socket count (v5.4)

See merge request espressif/esp-idf!38865
2025-05-27 10:32:30 +08:00
Jiang Jiang Jian
fc5b878c65 Merge branch 'fix/remove-unnecessary-select_v5.4' into 'release/v5.4'
fix(esp_system): Remove unnecessary select from esp_system/Kconfig (v5.4)

See merge request espressif/esp-idf!37520
2025-05-26 19:52:26 +08:00
Jiang Jiang Jian
c8848f4147 Merge branch 'fix/slot0_requires_all_pins_in_1bit_mode_issue_v5.4' into 'release/v5.4'
sd: fixed all pins need to be set when using slot0 on esp32p4 issue (v5.4)

See merge request espressif/esp-idf!39306
2025-05-26 19:48:59 +08:00
Jiang Jiang Jian
aed8bdc8dd Merge branch 'update/v5.4_esp-idf-doc-env-v5.4_ubuntu_24.04' into 'release/v5.4'
Update esp-idf-doc-env-v5.4 image

See merge request espressif/esp-idf!38955
2025-05-26 19:48:14 +08:00
Jiang Jiang Jian
b53f520ebc Merge branch 'fix/fix_esp_timer_accuracy_when_do_dfs_v5.4' into 'release/v5.4'
fix(esp_hw_support): improve esp timer accuracy on DFS for esp32 & esp32s2 (v5.4)

See merge request espressif/esp-idf!39340
2025-05-26 19:46:58 +08:00
Jiang Jiang Jian
ee04629723 Merge branch 'feat/some_xip_psram_related_optimisations_and_fixes_v5.4' into 'release/v5.4'
feat(esp_psram): Add some wasted XIP PSRAM memory in heap and PSRAM protection (v5.4)

See merge request espressif/esp-idf!38872
2025-05-26 19:46:08 +08:00
Jiang Jiang Jian
9a36e3fea9 Merge branch 'contrib/github_pr_15059_v5.4' into 'release/v5.4'
feat(https): Get TLS errors from http client (GitHub PR) (v5.4)

See merge request espressif/esp-idf!39142
2025-05-26 19:45:50 +08:00
Jiang Jiang Jian
afa7b83ed7 Merge branch 'bugfix/gpio_dump_io_config_v5.4' into 'release/v5.4'
fix(gpio): fix pu, pd, drv value incorrect from gpio_dump_io_configuration on esp32 (v5.4)

See merge request espressif/esp-idf!37778
2025-05-26 19:45:25 +08:00
Jiang Jiang Jian
b999d102d1 Merge branch 'feat/calibrate_bus_latency_v5.4' into 'release/v5.4'
Feat/calibrate bus latency v5.4

See merge request espressif/esp-idf!39131
2025-05-26 19:44:51 +08:00
Jiang Jiang Jian
cf0c42936b Merge branch 'fix/fix_esp32p4_stuck_in_pd_ana_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix esp32p4 may get stuck when entering deepsleep (v5.4)

See merge request espressif/esp-idf!39282
2025-05-26 19:44:17 +08:00
Jiang Jiang Jian
c61c31e884 Merge branch 'ci/enable_gcov_test_v5.4' into 'release/v5.4'
ci: enable gcov example for all chips (v5.4)

See merge request espressif/esp-idf!39164
2025-05-26 19:42:51 +08:00
Jiang Jiang Jian
84174f6ffc Merge branch 'feat/apptrace-crc16_v5.4' into 'release/v5.4'
Store CRC16 checksum value in the PERFMON1 reg (v5.4)

See merge request espressif/esp-idf!39209
2025-05-26 19:42:34 +08:00
Jiang Jiang Jian
28c4303059 Merge branch 'refactor/add_dfs_init_auto_test_v5.4' into 'release/v5.4'
fix(mcpwm): the wrong pm lock type on esp32 and esp32s3 (v5.4)

See merge request espressif/esp-idf!39193
2025-05-26 19:41:09 +08:00
Jiang Jiang Jian
f8be92085d Merge branch 'fix/gattc_proc_comparison_v5.4' into 'release/v5.4'
fix(nimble): Fix proc rx entry comparison (v5.4)

See merge request espressif/esp-idf!39187
2025-05-26 19:40:47 +08:00
Jiang Jiang Jian
e5145a9352 Merge branch 'refactor/usb_dwc_buff_delay_on_p4_backport_v5.4' into 'release/v5.4'
refactor(hcd_dwc): Apply ls_via_fs_hub delay for all targets (backport to v5.4)

See merge request espressif/esp-idf!39149
2025-05-26 19:40:06 +08:00
Jiang Jiang Jian
6837ed3974 Merge branch 'fix/usbjtag_after_tinyusb_backport_v5.4' into 'release/v5.4'
fix(usb/phy): Fix ability to switch back to USB/JTAG after uninstalling TinyUSB (backport to v5.4)

See merge request espressif/esp-idf!39126
2025-05-26 19:39:25 +08:00
Jiang Jiang Jian
b29391408b Merge branch 'feature/parttable_tool_use_only_ascii_for_names_v5.4' into 'release/v5.4'
fix(partition_table): Ignore UTF-8 BOM bytes in csv file (v5.4)

See merge request espressif/esp-idf!39180
2025-05-26 19:38:42 +08:00
Jiang Jiang Jian
12143d6587 Merge branch 'contrib/github_pr_15942_v5.4' into 'release/v5.4'
fix(esp_hw_support): Fix compile error on esp_cpu_int_has_handler on ESP32-P4 (GitHub PR) (v5.4)

See merge request espressif/esp-idf!39118
2025-05-26 19:38:22 +08:00
Jiang Jiang Jian
c51c27e879 Merge branch 'fix/fix_usb_hs_phy_leakage_on_deepsleep_v5.4' into 'release/v5.4'
fix(esp_hw_support): Fix deepsleep leakage after initializing USB HS phy (v5.4)

See merge request espressif/esp-idf!39168
2025-05-26 19:36:29 +08:00
Jiang Jiang Jian
10bf6f8b0d Merge branch 'feat/usb_host_move_dma_cap_mem_to_psram_p4_backport_v5.4' into 'release/v5.4'
feat(usb_host): Move DMA capable memory to external ram on P4 (backport v5.4)

See merge request espressif/esp-idf!39078
2025-05-26 19:35:12 +08:00
Jiang Jiang Jian
e84c28eff8 Merge branch 'freertos_sysview_deadlock_fix_v5.4' into 'release/v5.4'
fix(app_trace): prevent deadlock on sysview start (v5.4)

See merge request espressif/esp-idf!39137
2025-05-26 19:34:22 +08:00
Jiang Jiang Jian
9bb2fd0a83 Merge branch 'fix/cache_support_duing_pure_ram_app_v5.4' into 'release/v5.4'
fix(esp_mm): Move cache-related sources out of pure RAM app check (v5.4)

See merge request espressif/esp-idf!39063
2025-05-26 19:33:28 +08:00
Jiang Jiang Jian
43d3dd7b9c Merge branch 'bugfix/secure_ota_no_secure_boot_v5.4' into 'release/v5.4'
fix: secure OTA without secure boot issue for MMU page size configurable SoCs (v5.4)

See merge request espressif/esp-idf!39124
2025-05-26 19:30:53 +08:00
Jiang Jiang Jian
b4cacfe9ae Merge branch 'fix/fix_usj_pad_leakage_v5.4' into 'release/v5.4'
fix(esp_hw_support): always disable USJ pad in sleep to supress leakage (v5.4)

See merge request espressif/esp-idf!39106
2025-05-26 19:29:39 +08:00
akshat
4cc09f2436 fix(wpa_supplicant): Disconnect from previous AP while initiating WPS 2025-05-26 19:27:46 +08:00
akshat
4d8b266c08 fix(wpa_supplicant): Detect PBC overlap even when UUID is null 2025-05-26 19:27:46 +08:00
akshat
255c34ba9f fix(wpa_supplicant): Ensure pbc_overlap event is posted correctly
Preserves the pbc_overlap flag to allow proper event posting.
This ensures that pbc overlap detection functions as expected.
2025-05-26 19:27:46 +08:00
Jiang Jiang Jian
022805670d Merge branch 'bugfix/enable_additional_lp_io_wakeup_v5.4' into 'release/v5.4'
fix(lp_io): enable setting edge type wakeup sources for targets that support this (v5.4)

See merge request espressif/esp-idf!36010
2025-05-26 19:26:28 +08:00
Tomáš Rohlínek
0a9105a406 feat(network/lwip): Add checks for maximum socket count 2025-05-26 19:23:31 +08:00
Ashish Sharma
14a41c29c9 feat(cjson): update to latest upstream 2025-05-26 17:39:50 +08:00
Ashish Sharma
02a0db1dc4 change: adds CVE-2023-53154 to cJSON sbom exclude list 2025-05-26 17:31:11 +08:00
Zhou Xiao
a13ddd5c85 change(ble): make falling edge when disabling ts sync 2025-05-26 15:35:18 +08:00
yinqingzhao
bdc1f1b172 fix(wifi): fix some wifi bugs 2025-05-26 14:48:53 +08:00
Zhou Xiao
e2742ca1f7 fix(ble): fixed spi log init failure return value for ESP32 2025-05-26 10:47:14 +08:00
Zhou Xiao
d6cbc45350 fix(ble): fixed ts sync sleep support trigger 2025-05-23 19:13:00 +08:00
Zhou Xiao
279777aec8 fix(ble): fixed printf va list cross function pass failure 2025-05-23 12:29:46 +08:00
Samuel Obuch
6ee607b00f ci: select OpenOCD binary based on runner 2025-05-23 00:41:15 +02:00
Zhou Xiao
10ec6c6f27 fix(ble): fixed upper layer trans append failure bug
(cherry picked from commit 1e6bc70837)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:55:09 +08:00
Zhou Xiao
772fa9b2c7 feat(ble): support ts sync for sleep app
(cherry picked from commit e10460ce14)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:55:07 +08:00
Zhou Xiao
1bde1985ff feat(ble): support controller raw log print out
(cherry picked from commit ed09e97c66)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:55:05 +08:00
Zhou Xiao
1ddc2a69c1 feat(ble): refactored loss report module and represent frame using struct
(cherry picked from commit 9800d715a5)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:55:02 +08:00
Zhou Xiao
eb73902c9c feat(ble): support le audio log buffer separation
(cherry picked from commit cd3aa6527c)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:55:00 +08:00
Zhou Xiao
7298a27121 feat(ble): optimized printf functions code size and speed
(cherry picked from commit e4be25ba63)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:54:57 +08:00
Zhou Xiao
c690670f65 feat(ble): refactored flush module and provided public flush api
(cherry picked from commit 70792443c7)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:54:55 +08:00
Zhou Xiao
1cc5a41322 feat(ble): refactored ll isr buffer append and buffer flush using event handler
(cherry picked from commit bba90309e7)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:54:52 +08:00
Zhou Xiao
4f1e4cc83b feat(ble): provided dynamic spi enable/disable api
(cherry picked from commit 3568f19fef)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:54:50 +08:00
Zhou Xiao
bfdc8f3924 feat(ble): support hci log buffer separation
(cherry picked from commit 16a3b2c71b)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:54:47 +08:00
Zhou Xiao
25cd0ef51a feat(ble): optimized macros readability
(cherry picked from commit f8699785e9)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-22 16:54:45 +08:00
wuzhenghui
3fa79684cd ci(esp_timer): add UT case for esp_timer period alarm with DFS 2025-05-22 15:18:22 +08:00
wuzhenghui
b5da8a52c6 feat(esp_hw_support): compensate the error introduced to LACT during APB frequency switching 2025-05-22 15:18:21 +08:00
wuzhenghui
db6aedef25 fix(esp_hw_support): update systimer step immediately when XTAL changes on esp32s2 2025-05-22 15:18:21 +08:00
wuzhenghui
78e9c47580 fix(esp_hw_support): update LACT clock prescale immediately when APB changes on esp32 2025-05-22 15:18:16 +08:00
armando
6e3d0e5384 fix(sd): fixed menuconfig multi pin definitions issue 2025-05-21 11:11:33 +08:00
armando
d6b5320bf6 fix(sd): fixed slot0 requires all pins to be set when using 1bit iomux mode on p4 2025-05-21 11:11:28 +08:00
Rahul Tank
58f1f092e9 fix(nimble): Add chip dependancy flag for Flow control feature 2025-05-20 18:10:26 +05:30
wuzhenghui
e27321ab51 fix(esp_hw_support): fix esp32p4 may get stuck when entering deepsleep 2025-05-20 15:52:52 +08:00
Song Ruo Jing
c3e4134b0c feat(gpio): gpio_reset_pin should do IO reservation revoke
Closes https://github.com/espressif/esp-idf/issues/15598
2025-05-20 15:30:26 +08:00
Song Ruo Jing
8f231272f6 fix(gpio): fix IO output enable control
oen_sel and oen_inv_sel fields from func_out_sel_cfg register
2025-05-20 15:30:26 +08:00
Song Ruo Jing
9ed617fb17 fix(gpio): removed unnecessary step when routing input signal to a pin 2025-05-20 15:30:26 +08:00
Song Ruo Jing
f61b453a25 fix(gpio): fix 8/16-bit gpio, rtc/lp_io register access 2025-05-20 15:30:26 +08:00
Song Ruo Jing
6cffc5c994 fix(gpio): fix pu, pd, drv value incorrect from gpio_dump_io_configuration on esp32
Closes https://github.com/espressif/esp-idf/issues/14931
2025-05-20 15:30:14 +08:00
Island
734b1b1be5 Merge branch 'change/ble_update_lib_20250516_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250516 - Update ESP BLE Controller Lib (v5.4)

See merge request espressif/esp-idf!39237
2025-05-20 11:41:52 +08:00
Zhang Hai Peng
abb3b2d70c fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(4713205)
- Fix: Missing ADV reports after bonding and connection


(cherry picked from commit 244d4f8fa7)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-05-20 11:13:32 +08:00
Zhao Wei Liang
6f99672c32 feat(ble): support creating connections during scanning process on ESP32-C5
(cherry picked from commit 9d687daf36)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-05-19 19:17:03 +08:00
Sudeep Mohanty
6b75576db2 change(lp-core): Update LP I2C and LP UART drivers to use raw interrupt status
This commit updates the LP I2C and LP UART drivers to use the raw
interrupt status without enabling the interrupts.
2025-05-19 10:33:21 +02:00
Zhao Wei Liang
6a9fedcab3 fix(ble): added missed printf for ll log interface
(cherry picked from commit d12e072b35)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-05-19 12:04:21 +08:00
Zhao Wei Liang
2f92b39cc5 feat(ble): support creating connections during scanning process on ESP32-H2
(cherry picked from commit 207d85a5f7)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-05-19 12:04:18 +08:00
Zhao Wei Liang
efd16c699a fix(ble): fixed occasional assert issue in scan and connection scenarios on ESP32-C6
(cherry picked from commit cd6038b6cf)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-05-19 12:04:16 +08:00
Zhao Wei Liang
d15978a30d change(ble): [AUTO_MR] Update lib_esp32c2 to 664e4255
(cherry picked from commit 3cfd4d0166)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-05-19 12:04:14 +08:00
Zhao Wei Liang
60d528f7a7 change(ble): [AUTO_MR] Update lib_esp32c6 to 1304a9d0
(cherry picked from commit 69158d5064)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-05-19 12:04:11 +08:00
Zhao Wei Liang
8a447d44c6 change(ble): [AUTO_MR] Update lib_esp32c5 to 1304a9d0
(cherry picked from commit 27220c1b4c)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-05-19 12:04:09 +08:00
Zhao Wei Liang
af84660236 change(ble): [AUTO_MR] Update lib_esp32h2 to 1304a9d0
(cherry picked from commit 29f89efea6)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-05-19 12:04:07 +08:00
Erhan Kurubas
41ac26292f feat(apptrace): Store CRC16 checksum value of exposed block in the perfmon reg 2025-05-16 11:32:41 +02:00
Konstantin Kondrashov
809925eb60 refactor(partition_table): Refactoring of code style 2025-05-16 09:42:03 +03:00
morris
488ab842e3 fix(mcpwm): the wrong pm lock type on esp32 and esp32s3 2025-05-16 10:50:43 +08:00
Sumeet Singh
4bfd493087 fix(nimble): Fix proc rx entry comparison (v5.4) 2025-05-15 19:44:48 +05:30
Konstantin Kondrashov
41dd352149 fix(partition_table): Ignore UTF-8 BOM bytes in csv file 2025-05-15 13:35:28 +03:00
Samuel Obuch
d452abc17e ci: fix app_trace_basic rules and test 2025-05-15 11:29:27 +02:00
Samuel Obuch
3c673cbea3 ci: enable gcov example for all chips 2025-05-15 11:29:22 +02:00
wuzhenghui
1811757ad9 fix(esp_hw_support): Fix deepsleep leakage after initializing USB HS phy 2025-05-15 16:05:05 +08:00
Anton Maklakov
7ec02857f4 docs(jtag): fix esp32p4 usb jtag pins 2025-05-15 12:13:31 +07:00
renpeiying
f114a94369 docs: Update CN for idf-monitor.rst 2025-05-14 13:55:08 +02:00
Peter Dragun
bb3655d6e7 docs(tools/idf-monitor): Add note about autocoloring limitation on multiline logs
Closes https://github.com/espressif/esp-idf/issues/15793
2025-05-14 13:54:55 +02:00
Roman Leonov
2034360d96 refactor(hcd_dwc): Apply ls_via_fs_hub delay for all targets 2025-05-14 13:53:34 +02:00
nilesh.kale
10fe93f1c3 fix(esp_http_client): update code format for API
This commit update code format as per IDF standard for API
esp_http_client_get_and_clear_last_tls_error().
2025-05-14 15:25:06 +05:30
Lorenzo Consolaro
5bd8026249 feat(https): Get TLS errors from http client
update PR

update mr

Update components/esp_http_client/esp_http_client.c

Co-authored-by: Nilesh Kale <nilesh.kale@espressif.com>
2025-05-14 15:25:06 +05:30
Samuel Obuch
23773bb4dc fix(sysview): do not use freertos ticks to prevent deadlock 2025-05-14 11:22:21 +02:00
Tan Yan Quan
5e3f2e7129 feat(openthread): change border agent to kconfig option 2025-05-14 16:12:27 +08:00
Tan Yan Quan
a53f89e66c fix(openthread): handle SetTimeSyncState when ifconfig up or down 2025-05-14 16:12:17 +08:00
Tan Yan Quan
f59e0b6dc7 feat(openthread): support bus_latency for dual-chip BR solution 2025-05-14 16:12:10 +08:00
John Boiles
2557132185 fix(usb/phy): Fix ability to switch back to USB/JTAG after uninstalling TinyUSB
Fixes #15912. This is a revert of a change made in 005ae0554 that breaks the
ability to re-initalize the USB/JTAG device after uninstalling TinyUSB.

Closes https://github.com/espressif/esp-idf/issues/15912
2025-05-14 08:25:40 +02:00
Mahavir Jain
e1d41ada5c test: add secure image verification case for C6/H2 2025-05-14 10:57:09 +05:30
Mahavir Jain
09fbed0eec fix: secure OTA without secure boot issue for MMU page size configurable SoCs
For secure app verification during OTA update case, the image was
getting memory mapped twice and hence the failure in verification.

Modified from memory mapped flash read to SPI flash read approach
for the MMU page size from image header.

Regression from 07318a4987

Closes https://github.com/espressif/esp-idf/issues/15936
2025-05-14 10:55:48 +05:30
Weltenprinz
d34bdc8394 fix(esp_hw_support): Fix compile error on esp_cpu_int_has_handler on ESP32-P4
Merges https://github.com/espressif/esp-idf/pull/15942
Closes https://github.com/espressif/esp-idf/issues/15941
2025-05-13 18:20:42 +03:00
wuzhenghui
daaba0f36c fix(esp_hw_support): always disable USJ pad in sleep to supress leakage 2025-05-13 20:11:18 +08:00
peter.marcisovsky
95bd653ec1 feat(usb_host): Move DMA capable memory to external ram on P4
- DWC-OTG internal DMA can access psram on esp32p4
    - Move DMA memory buffs to psram, to save internal ram
    - HCD tests and MSC example runs in CI with psram enabled
2025-05-13 13:31:17 +02:00
Peter Macko
417fe048a1 change(ci): Update esp-idf-docs-env-v5.4 image
- Add Sphinx warnings caused by [#11323](https://github.com/doxygen/doxygen/issues/11323)
- Update esp-idf-doc-env-v5.4 to use the updated parent image (Ubuntu 24.04 and Node.js 22)
- Exclude sphinx-known-warnings.txt from pre-commit checks.
2025-05-13 11:21:58 +02:00
Zhang Hai Peng
0743b4ad6e fix(ble/bluedroid): Reduce Bluedroid host log output over SPI
(cherry picked from commit 0586d10317)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-05-13 16:14:14 +08:00
Zhang Hai Peng
8a11127ddd fix(ble/bluedroid): Added value len check in esp_ble_gatts_send_indicate()
(cherry picked from commit bfa0fff2e5)

Co-authored-by: Nebojsa Cvetkovic <nebkat@gmail.com>
2025-05-13 16:14:12 +08:00
Zhang Hai Peng
e2915a60c5 fix(ble/bluedroid): Change maximum length of attribute value to 517
(cherry picked from commit df8c1f7a96)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-05-13 16:14:09 +08:00
Zhang Hai Peng
901fc0c9ac docs(ble): clarify meaning of 0 value for esp_ble_gap_start_ext_scan() parameters
(cherry picked from commit ebb76933d0)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-05-13 16:14:07 +08:00
Zhang Hai Peng
4f050ed635 fix(ble/bluedroid): Fixed BLE GAP appearance configuration check
(cherry picked from commit 6552854cb5)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-05-13 16:14:04 +08:00
nilesh.kale
93ca084b62 fix(esp_mm): Move cache-related sources out of pure RAM app check
This change resolves build issues when compiling with
CONFIG_APP_BUILD_TYPE_PURE_RAM_APP enabled.
2025-05-13 12:57:19 +05:30
Jan Beran
fdca2c76f3 fix(esp_system): Remove unnecessary select from esp_system/Kconfig 2025-05-12 09:51:04 +02:00
Marius Vikhammer
fe75355314 Merge branch 'bugfix/heap_in_flash_v5.4' into 'release/v5.4'
fix(heap): fixed CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH not working together with CONFIG_HEAP_TLSF_USE_ROM_IMPL (v5.4)

See merge request espressif/esp-idf!38121
2025-05-12 11:50:39 +08:00
Jiang Jiang Jian
fd37cd46b2 Merge branch 'feat/nvs_pytest_add_non_ascii_string_test_v5.4' into 'release/v5.4'
feat: Add NVS generator check test for CRC of non-ASCII strings (v5.4)

See merge request espressif/esp-idf!38842
2025-05-12 10:46:10 +08:00
Jiang Jiang Jian
063d9d4307 Merge branch 'contrib/github_pr_15132_v5.4' into 'release/v5.4'
fix(newlib): usleep returning early (GitHub PR) (v5.4)

See merge request espressif/esp-idf!38708
2025-05-12 10:42:50 +08:00
morris
77ae1d2b04 Merge branch 'bugfix/fixed_mismatch_of_tx_queue_statue_v5.4' into 'release/v5.4'
fix(i2s): fixed the false buf catenate while use preload (v5.4)

See merge request espressif/esp-idf!38967
2025-05-12 10:35:14 +08:00
Marius Vikhammer
2fcebb7483 fix(lp_io): allow edge wakeup types for LP-IO on chips which support it 2025-05-12 09:48:30 +08:00
Marius Vikhammer
cccccd6da8 fix(newlib): fixed newlib malloc wrappers IRAM/flash placement
If HEAP_PLACE_FUNCTION_INTO_FLASH = y then we should also place
the newlib wrappers for the heap in to flash.
2025-05-12 09:47:08 +08:00
Marius Vikhammer
209ac93ac2 fix(heap): fixed HEAP_PLACE_FUNCTION_INTO_FLASH disabled if heap impl in ROM 2025-05-12 09:47:08 +08:00
Rahul Tank
4a927ac8d6 Merge branch 'bugfix/provide_user_option_delete_pair_v5.4' into 'release/v5.4'
fix(nimble): Added option to stack to handle repeat pairing internally (v5.4)

See merge request espressif/esp-idf!38959
2025-05-10 22:55:07 +08:00
Shu Chen
3fc7689ea1 Merge branch 'feat/ot_br_esp32p4_v5.4' into 'release/v5.4'
feat(br): support ot_br example for esp32p4 (v5.4)

See merge request espressif/esp-idf!39003
2025-05-09 19:46:49 +08:00
Jiang Jiang Jian
4f09162f42 Merge branch 'bugfix/hwlp_coproc_saving_master_v5.4' into 'release/v5.4'
fix(freertos): workaround a hardware bug related to HWLP coprocessor (backport v5.4)

See merge request espressif/esp-idf!38059
2025-05-09 19:31:06 +08:00
Jiang Jiang Jian
ed8580011c Merge branch 'fix/reduce_rtc_text_size_v5.4' into 'release/v5.4'
fix(system): linker script: free unused .rtc.text memory for esp32c3, esp32s2 (v5.4)

See merge request espressif/esp-idf!35366
2025-05-09 18:54:01 +08:00
Jiang Jiang Jian
a3b5428364 Merge branch 'docs/fix-kconfserver-link_v5.4' into 'release/v5.4'
docs: Fix link to the kconfserver documentation (v5.4)

See merge request espressif/esp-idf!38905
2025-05-09 17:58:50 +08:00
Jiang Jiang Jian
90607ee77b Merge branch 'bugfix/esp32_c6_rev0_ecdsa_build_v5.4' into 'release/v5.4'
fix: Secure boot (ECDSA) build failure for C6 rev0 target (v5.4)

See merge request espressif/esp-idf!38834
2025-05-09 17:57:55 +08:00
Jiang Jiang Jian
aa1db69a13 Merge branch 'feat/remove_const_from_voltopart_v5.4' into 'release/v5.4'
feat(fatfs/diskio): Remove const from PARTITION VolToPart (v5.4)

See merge request espressif/esp-idf!38782
2025-05-09 17:55:57 +08:00
morris
bb2c83ef20 Merge branch 'fix/rmt_race_condition_v5.4' into 'release/v5.4'
fix(rmt): fix race condition and add receive config error message (v5.4)

See merge request espressif/esp-idf!38998
2025-05-09 17:20:53 +08:00
Mahavir Jain
103db4a4ac Merge branch 'fix/async_handler_example_stack_overflow_issue_v5.4' into 'release/v5.4'
fix(esp_http_server): Async handler example stack overflow fix (v5.4)

See merge request espressif/esp-idf!38996
2025-05-09 17:12:27 +08:00
Tan Yan Quan
58f08be521 feat(openthread/br): update thread-lib for esp32p4 and OT upstream ec2b0d487
* esp-openthread: thread_zigbee/esp-openthread@80d6e2f8e
* openthread: espressif/openthread@ec2b0d487
* esp-idf: espressif/esp-idf@64d713a71
2025-05-09 07:43:49 +00:00
Tan Yan Quan
64d713a712 feat(openthread): update OT upstream to ec2b0d487 2025-05-09 14:42:15 +08:00
Tan Yan Quan
58c1339077 feat(openthread): support esp32p4 as ot_br 2025-05-09 14:40:48 +08:00
Island
8ad0d3d8f2 Merge branch 'change/ble_update_lib_20250430_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250430 - Update ESP BLE Controller Lib (v5.4)

See merge request espressif/esp-idf!38974
2025-05-09 14:05:17 +08:00
Island
1b1796fb2d Merge branch 'docs/update_ble_feature_status_latest_v5.4' into 'release/v5.4'
Updated BLE feature status (v5.4)

See merge request espressif/esp-idf!38991
2025-05-09 14:02:54 +08:00
Chen Jichang
65e8047c07 fix(rmt): fix race condition and add receive config error message
Closes https://github.com/espressif/esp-idf/issues/15842
Closes https://github.com/espressif/esp-idf/issues/15836
2025-05-09 13:44:18 +08:00
hrushikesh.bhosale
ccdd373eca fix(esp_http_server): Async handler example stack overflow fix
1. In async handler example, on hitting /long URI and closing the
connection forcefully from client (example ctrl + c) cause more stack
size (almost 200 bytes) than successfull request.
2. The connection should be closed from the server as soon as the client
closes the connect (i.e. handler should return ESP_FAIL to close the
connection)
2025-05-09 10:18:13 +05:30
Mahavir Jain
daf1057209 fix: Secure boot (ECDSA) build failure for C6 rev0 target
Closes https://github.com/espressif/esp-idf/issues/15856
2025-05-09 12:03:07 +08:00
Alexey Lapshin
c06fb3b759 fix(system): linker script: free unused .rtc.text memory for esp32c3/esp32s2/esp32s3 2025-05-09 11:39:24 +08:00
Omar Chebib
827f6bca2b fix(freertos): optimize HWLP context switch by disabling it when unused 2025-05-09 11:38:33 +08:00
Omar Chebib
d973153488 fix(freertos): workaround a hardware bug related to HWLP coprocessor
This commit manually sets the HWLP context to dirty when a Task that needs it is scheduled it.
2025-05-09 11:38:33 +08:00
Omar Chebib
f3fad943fd fix(esp_hw_support): clear the memory protection interrupt status on boot
Fixes https://github.com/espressif/esp-idf/issues/15359
2025-05-09 11:37:40 +08:00
Wei Yu Han
4c62b9b8e9 Updated BLE feature status
(cherry picked from commit b6fc400d1d818094de959930c20e1583c2e22c1a)

Co-authored-by: weiyuhan <weiyuhan@espressif.com>
2025-05-09 11:36:42 +08:00
Jiang Jiang Jian
796ca12684 Merge branch 'fix/ble_mesh_trans_pending_fix_v5.4' into 'release/v5.4'
fix(ble_mesh): remove tx pending assert (v5.4)

See merge request espressif/esp-idf!38936
2025-05-09 11:35:06 +08:00
morris
d62e3c7d14 Merge branch 'contrib/github_pr_15638_v5.4' into 'release/v5.4'
fix(i2c): Fix clear bus issue in legacy i2c driver, etc. (backport v5.4)

See merge request espressif/esp-idf!38828
2025-05-09 10:38:11 +08:00
Jiang Jiang Jian
d2b2909f6a Merge branch 'bugfix/fix_modem_state_rx_bcn_failed_v5.4' into 'release/v5.4'
fix(wifi):fix modem state rx bcn failed when tbtt update, support modem state for coexist (backport v5.4)

See merge request espressif/esp-idf!38935
2025-05-09 10:15:57 +08:00
Wang Meng Yang
304acd5c4c Merge branch 'feat/add_sdkconfig_for_secure_connection_v5.4' into 'release/v5.4'
fix(bt): disable dm1 for acl-u when aes-ccm is on in peripheral(backport v5.4)

See merge request espressif/esp-idf!38975
2025-05-09 09:38:58 +08:00
morris
a2022990a4 Merge branch 'ci/remove_c5_support_from_readme' into 'release/v5.4'
ci(esp32c5): remove c5 support from readme on v5.4

See merge request espressif/esp-idf!38851
2025-05-08 18:27:24 +08:00
gongyantao
44cc3f963d fix(bt): disable dm1 for acl-u when aes-ccm is on in peripheral 2025-05-08 18:20:45 +08:00
Rahul Tank
581dbafe22 fix(nimble): Added option to stack to handle repeat pairing internally 2025-05-08 15:33:05 +05:30
Rahul Tank
5d4d3c697e Merge branch 'feat/autopts_and_ssc_fixes_v5.4' into 'release/v5.4'
feat(nimble): Added fixes related to SSC and AutoPTS testing (v5.4)

See merge request espressif/esp-idf!38796
2025-05-08 17:59:05 +08:00
Mahavir Jain
977a9182ea Merge branch 'feat/c6_v002_compatibility_v5.4' into 'release/v5.4'
hw_support: Add Kconfig option for c6 v0.2 (v5.4)

See merge request espressif/esp-idf!38942
2025-05-08 16:48:31 +08:00
Shen Wei Long
08dbf8b7ff fix(ble): update ld file on ESP32-C2
(cherry picked from commit ee6607b489)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-05-08 14:54:15 +08:00
Shen Wei Long
ef8873f8b8 change(ble): [AUTO_MR] Update lib_esp32c2 to 16e16586
(cherry picked from commit 26754d8e71)

Co-authored-by: Shen Weilong <shenweilong@espressif.com>
2025-05-08 14:54:13 +08:00
Shen Wei Long
fe0899f94f change(ble): [AUTO_MR] Update lib_esp32c6 to 9ecb81c8
(cherry picked from commit a477bfb140)

Co-authored-by: Shen Weilong <shenweilong@espressif.com>
2025-05-08 14:54:11 +08:00
Shen Wei Long
59b8d97e3e change(ble): [AUTO_MR] Update lib_esp32c5 to 9ecb81c8
(cherry picked from commit 852a095b59)

Co-authored-by: Shen Weilong <shenweilong@espressif.com>
2025-05-08 14:54:08 +08:00
Shen Wei Long
3da6ad8f3a change(ble): [AUTO_MR] Update lib_esp32h2 to 9ecb81c8
(cherry picked from commit a3cc91dbf0)

Co-authored-by: Shen Weilong <shenweilong@espressif.com>
2025-05-08 14:54:06 +08:00
laokaiyao
30e78a644c fix(i2s): fixed the false buf catenate while use preload
Closes https://github.com/espressif/esp-idf/issues/15775
2025-05-08 14:24:10 +08:00
Shu Chen
c5f88c452c Merge branch 'feat/mtd_parent_search_v5.4' into 'release/v5.4'
feat(openthread): enable parent search function for MTD (v5.4)

See merge request espressif/esp-idf!38820
2025-05-08 14:13:05 +08:00
Shu Chen
323af330b9 Merge branch 'fix/calibrate_csl_rx_v5.4' into 'release/v5.4'
fix(openthread): calibrate CSL parameters (v5.4)

See merge request espressif/esp-idf!38533
2025-05-08 14:11:45 +08:00
Jiang Jiang Jian
5e7a047ad7 Merge branch 'bugfix/tsens_read_abnormal_value_v5.4' into 'release/v5.4'
fix: tsens read abnormal value in esp32c2eco4 (backport v5.4)

See merge request espressif/esp-idf!38900
2025-05-08 12:40:14 +08:00
laokaiyao
4318434aa6 ci(esp32c5): remove c5 support from readme on v5.4 2025-05-08 11:08:07 +08:00
Rahul Tank
151dc0bd74 Merge branch 'bugfix/conn_with_scan_c6_h2_v5.4' into 'release/v5.4'
fix(nimble): Enable support for Connect with scan for 32/ c6/ h2 chip (v5.4)

See merge request espressif/esp-idf!38852
2025-05-08 00:28:01 +08:00
Sumeet Singh
ffaa688582 feat(nimble): Added some fixes for autopts testing 2025-05-07 16:58:36 +05:30
Island
c799865f91 Merge branch 'bugfix/fix_scan_stopped_with_high_rtc_freq_v5.4' into 'release/v5.4'
fix(ble): fix rtc freq set too high on ESP32-C2 (v5.4)

See merge request espressif/esp-idf!38931
2025-05-07 18:47:22 +08:00
Xiao Xufeng
94217c03ec feat(soc): add config option for c6 v0.2 2025-05-07 16:45:53 +08:00
Rahul Tank
b65d20d371 fix(nimble): Enable support for Connect with scan for esp32/c6/ h2 chip 2025-05-07 12:40:18 +05:30
Island
8686f29e4f Merge branch 'fix/ble_mesh_fixed_insufficient_link_close_v5.4' into 'release/v5.4'
fix(ble_mesh): fixed issue with insufficient link close transmit cnt (v5.4)

See merge request espressif/esp-idf!38898
2025-05-07 14:58:26 +08:00
luoxu
b1d1170499 fix(ble_mesh): remove tx pending assert 2025-05-07 14:55:21 +08:00
Li Shuai
7014cfc831 fix(esp_hw_support): fix modem wakeup req always high caused by pmu min slp cycle update 2025-05-07 14:25:05 +08:00
Li Shuai
d5ff59f144 change(esp_hw_support): add interface to calculate slow clock period by clock frequency 2025-05-07 14:15:20 +08:00
Rahul Tank
6af56914c8 Merge branch 'fix/optimize_nimble_throughput_example_v5.4' into 'release/v5.4'
fix(nimble): Added support of Dynamic switching between different Phy modes. (v5.4)

See merge request espressif/esp-idf!38910
2025-05-07 12:38:55 +08:00
sibeibei
444dddd87d fix(wifi):fix modem state rx bcn failed when tbtt update, support modem state for coexist 2025-05-07 11:57:55 +08:00
morris
be8d37700b Merge branch 'feature/usb_host_ext_hub_collective_backport_v5.4' into 'release/v5.4'
feat(usb_host): External Hub collective backport to v5.4

See merge request espressif/esp-idf!37266
2025-05-07 10:48:35 +08:00
morris
02a4deca7d Merge branch 'contrib/github_pr_15853_v5.4' into 'release/v5.4'
Fix for an infinite wait in spi-lcd-touch example (GitHub PR) (v5.4)

See merge request espressif/esp-idf!38899
2025-05-07 10:46:02 +08:00
Jin Chen
ffad40df88 fix(ble): fix rtc freq set too high on ESP32-C2
(cherry picked from commit 6a80deac03)

Co-authored-by: cjin <jinchen@espressif.com>
2025-05-07 10:18:38 +08:00
Roman Leonov
e329d34109 refactor(ext_port): Removed ext_hub dependency 2025-05-06 15:22:15 +02:00
Roman Leonov
f78927334f refactor(ext_port): Changed the mechanism for hub class request
Merged all Hub Class specific request to one function.
Added a callback for the External Port Driver to break the dependency from ext_hub.h
2025-05-06 15:02:03 +02:00
Roman Leonov
08fd2d8d4e feat(ext_hub): Added device error handling 2025-05-06 14:58:26 +02:00
Roman Leonov
fb6e803bfa feat(usbh): Added uid presence check in USBH device object list 2025-05-06 14:58:26 +02:00
Shreeyash
4dfa2beaf1 fix(nimble): Added support for 1m, 2m, coded phy channels and optimized throughput 2025-05-06 17:58:17 +05:30
Rahul Tank
05e67781a1 Merge branch 'bugfix/add_adv_type_parse_v5.4' into 'release/v5.4'
fix(nimble): Add API to parse adv report for given type (v5.4)

See merge request espressif/esp-idf!38789
2025-05-06 19:55:48 +08:00
Jiang Jiang Jian
beb0bcc970 Merge branch 'bugfix/wps_msg_timeout_increase_v5.4' into 'release/v5.4'
fix(esp_wifi): Increase WPS message timeout (v5.4)

See merge request espressif/esp-idf!38875
2025-05-06 16:37:56 +08:00
akshat
71fde740e1 fix(wpa_supplicant): Fix build errors when Supplicant logs are enabled 2025-05-06 12:47:33 +05:30
Kapil Gupta
0de5180d8a fix(esp_wifi): Increase WPS timeout 2025-05-06 12:46:42 +05:30
Jan Beran
d0dd9c0511 docs: Fix link to the kconfserver documentation 2025-05-06 09:15:04 +02:00
Chen Jichang
c979548bfe fix(lcd): fix test failure regression 2025-05-06 14:31:32 +08:00
Chen Jichang
0daccd7f30 fix(lcd): fix the infinite wait when lvgl timer is no ready
Merges https://github.com/espressif/esp-idf/pull/15853
2025-05-06 14:31:32 +08:00
sibeibei
e2a1b933e8 fix: tsens read abnormal value in esp32c2eco4 2025-05-06 14:20:17 +08:00
Jiang Jiang Jian
45d95b1bd8 Merge branch 'fix/fix_esp32p4_retention_cost_v5.4' into 'release/v5.4'
fix(esp_hw_support): optimize retention cost and update sleep time compensation (v5.4)

See merge request espressif/esp-idf!38744
2025-05-06 14:18:49 +08:00
Decstar77
7cef584834 fix(spi-lcd-touch-example): Fix for an infinite wait caused by UINT32_MAX 2025-05-06 14:14:14 +08:00
Jiang Jiang Jian
89a76e918e Merge branch 'docs/update_ble_feature_support_status_v5.4' into 'release/v5.4'
Docs: update ble feature support status (v5.4)

See merge request espressif/esp-idf!37091
2025-05-06 14:02:31 +08:00
morris
0448c4bda5 Merge branch 'fix/usb_host_hcd_dma_ls_via_fs_hubs_backport_v5.4' into 'release/v5.4'
fix(hcd): Added delay to slow down scatter-gather dma for ls device via fs hubs (backport v5.4)

See merge request espressif/esp-idf!38650
2025-05-06 13:41:08 +08:00
Luo Xu
df82a96f15 fix(ble_mesh): fixed issue with insufficient link close transmit cnt
(cherry picked from commit ad1073693e)

Co-authored-by: luoxu <luoxu@espressif.com>
2025-05-06 12:23:33 +08:00
Jiang Jiang Jian
6a75fd8518 Merge branch 'bugfix/fix_not_update_country_in_beacon_v5.4' into 'release/v5.4'
fix(wifi): fix not update country in beacon(backport v5.4)

See merge request espressif/esp-idf!38831
2025-05-06 09:54:43 +08:00
harshal.patil
26586deb7d fix(esp_psram): Add XIP PSRAM alignment gaps in heap only if PSRAM protection is enabled 2025-05-05 11:52:15 +05:30
harshal.patil
9406fde68d feat(cpu_region_protect): Enable basic memory protection for SPIRAM 2025-05-05 11:52:04 +05:30
Rahul Tank
10d6bee001 Merge branch 'bugfix/fix_ext_disc_example_usage_v5.4' into 'release/v5.4'
fix(nimble): Corrected structure field name usage in examples (v5.4)

See merge request espressif/esp-idf!38858
2025-05-05 13:44:32 +08:00
harshal.patil
f77e96e7c6 feat(esp_psram): Add the gap created due to alignment of XIP segments in heap 2025-05-05 11:09:52 +05:30
harshal.patil
fac460f89e feat(esp_psram): Add some helper APIs to get usable PSRAM memory size 2025-05-05 11:09:52 +05:30
Mahavir Jain
b62c2cef1b Merge branch 'docs/fix_unterminated_quotes_v5.4' into 'release/v5.4'
fix(docs): Fix unterminated quotes in secure-boot-v2.rst (v5.4)

See merge request espressif/esp-idf!38885
2025-05-02 18:48:59 +08:00
harshal.patil
9276f7b294 fix(docs): Fix unterminated quotes in secure-boot-v2.rst 2025-05-02 15:16:39 +05:30
morris
92a5676c6e Merge branch 'fix/usb_comprehensive_heap_backport_v5.4' into 'release/v5.4'
fix(usb/host): Do not call heap_caps_get_allocated_size() in USB host driver (backport to v5.4)

See merge request espressif/esp-idf!38864
2025-05-01 07:58:56 +08:00
Roland Dobai
f811882a11 Merge branch 'ci/rename-packages_v5.4' into 'release/v5.4'
ci: rename local idf_ci folder, avoid name collision (v5.4)

See merge request espressif/esp-idf!38757
2025-04-30 17:17:23 +08:00
Tomas Rezucha
462c1ed957 fix(usb/host): Do not call heap_caps_get_allocated_size() in USB host driver
It causes heap corruption if heap poisoning is enabled on ESP32-P4.
It returns incorrect size on ESP32-S3.

Closes https://github.com/espressif/esp-idf/issues/15815
2025-04-30 08:38:37 +02:00
morris
733ff2bff6 Merge branch 'fix/fix_image_check_16_mega_bytes_limit_v5.4' into 'release/v5.4'
bootloader: fixed image cannot exceed 16MB issue (v5.4)

See merge request espressif/esp-idf!38846
2025-04-30 14:22:35 +08:00
Shu Chen
2423cd3257 Merge branch 'fix/fix_ot_set_mac_framecounter_v5.4' into 'release/v5.4'
backport: OpenThread features and bug fixes to v5.4

See merge request espressif/esp-idf!38816
2025-04-30 13:04:27 +08:00
Marius Vikhammer
93c7af19c7 Merge branch 'bugfix/linux_host_test_v5.4' into 'release/v5.4'
fix(linux): fix mixed linux host test issues found after CI docker image upgrade (v5.4)

See merge request espressif/esp-idf!38232
2025-04-30 13:02:25 +08:00
Aditya Patwardhan
f3617e69b6 Merge branch 'fix/build_failure_when_sha1_config_is_disabled_v5.4' into 'release/v5.4'
Fix build failure when CONFIG_MBEDTLS_SHA1_C is disabled (v5.4)

See merge request espressif/esp-idf!38815
2025-04-30 12:06:16 +08:00
Island
3e39358976 Merge branch 'bugfix/fix_cble50y25_207_v5.4' into 'release/v5.4'
Fixed MIC error disconnection when pairing with iOS devices on ESP32-C3 and ESP32-S3(edf923e) (v5.4)

See merge request espressif/esp-idf!38764
2025-04-30 11:16:53 +08:00
Marius Vikhammer
7781b4ac2b Merge branch 'fix/multi_core_race_cond_in_panic_handler_v5.4' into 'release/v5.4'
fix(panic_handler): Prevent race condition in panic handler (v5.4)

See merge request espressif/esp-idf!38664
2025-04-30 11:02:07 +08:00
armando
0255950b63 fix(bootloader): fixed image cannot exceed 16MB issue
flash 32-bit-addr is an experimental feature that has multiple
dependencies, e.g. flash chip vendor, etc.

If CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH can be enabled
successfully and tests are passed, we can allow images to be
placed on higher-than-16MB flash addresses
2025-04-30 10:33:10 +08:00
Rahul Tank
fec3a5f5bd fix(nimble): Corrected structure field name usage in examples 2025-04-29 21:44:57 +05:30
Adam Múdry
5929a8eacc feat: Add NVS generator check test for CRC of non-ASCII strings 2025-04-29 16:47:24 +02:00
yinqingzhao
c10d0fd84a fix(wifi): fix not update country in beacon 2025-04-29 21:44:38 +08:00
C.S.M
94cbc9bbac fix(i2c): Fix that fsm reset cause i2c scl frequency changed on esp32s2 2025-04-29 16:58:36 +08:00
C.S.M
30f60557ec fix(i2c): Fix some i2c coverity issue 2025-04-29 16:20:27 +08:00
C.S.M
d41636cfad fix(i2c): I2C should not clear bus in a nack state 2025-04-29 16:20:27 +08:00
Jonathan Swoboda
7079f03fb6 fix(i2c): Fix clear bus issue in legacy i2c driver,
Closes https://github.com/espressif/esp-idf/pull/15638
2025-04-29 16:20:27 +08:00
Rahul Tank
ddac3bfa71 fix(nimble): Add API to parse adv report for given type 2025-04-29 12:25:24 +05:30
Tan Yan Quan
cac14a0a61 feat(openthread): enable parent search function for MTD 2025-04-29 14:37:07 +08:00
morris
678ac6a83a Merge branch 'bugfix/remove_invalid_link_in_parlio_rx_example_v5.4' into 'release/v5.4'
fix(parlio_rx): remove invalid link in example readme (v5.4)

See merge request espressif/esp-idf!38750
2025-04-29 14:23:57 +08:00
Xu Si Yu
352ea8d02c feat(openthread): add a callback to handle rcp reset failure 2025-04-29 14:23:35 +08:00
Xu Si Yu
f1ae86f830 feat(openthread): dns server of border router bind unspecified netif 2025-04-29 14:23:34 +08:00
Xu Si Yu
0804c77a51 fix(openthread): use esp_netif_tcpip_exec when sending a trel message 2025-04-29 14:23:34 +08:00
Xu Si Yu
e134817623 feat(openthread): add a function to ensure monotonically increasing frame counter 2025-04-29 14:12:50 +08:00
Jiang Jiang Jian
ed9d55a0cb Merge branch 'refactor/sae_pt_flag_v5.4' into 'release/v5.4'
refactor(wifi): Optimize wifi bin size for station mode (Backport v5.4)

See merge request espressif/esp-idf!38306
2025-04-29 13:47:41 +08:00
laokaiyao
5750b0cc8f ci(esp32c5): disable c5 target tests on v5.4 2025-04-29 13:44:47 +08:00
laokaiyao
26a7397b35 fix(parlio_rx): remove invalid link in example readme 2025-04-29 13:44:47 +08:00
Kapil Gupta
ad4f3277db fix(esp_wifi): Use supplicant's internal SHA1 if not available from IDF 2025-04-29 11:10:56 +05:30
harshal.patil
05353d8d8f fix(mbedtls): Fix config dependencies when ROM mbedtls is used 2025-04-29 10:53:06 +05:30
harshal.patil
1f0aa66f4e fix(wpa_supplicant): Disable fastpbkdf2 when s/w and h/w SHA1 is disabled 2025-04-29 10:53:06 +05:30
harshal.patil
37dba24869 fix(esp-tls): Fix build failure when CONFIG_MBEDTLS_SHA1_C is disabled 2025-04-29 10:53:06 +05:30
Marius Vikhammer
ad821b3367 test(app_format): fixed buffer overflow in esp_app_format test 2025-04-29 11:59:36 +08:00
Marius Vikhammer
cb29838788 test(heap): fixed align_alloc issues in host test 2025-04-29 11:59:36 +08:00
Marius Vikhammer
b1d1494290 ci(linux): re-enable failures for test_pytest_linux jobs 2025-04-29 11:59:36 +08:00
Marius Vikhammer
204017af9f test(log): fixed buffer overflow in log host test fixture 2025-04-29 11:59:36 +08:00
Alexey Gerenkov
986a52a52f Merge branch 'feature/update-openocd-to-v0.12.0-esp32-20250422_v5.4' into 'release/v5.4'
feat(tools): update openocd version to v0.12.0-esp32-20250422 (v5.4)

See merge request espressif/esp-idf!38799
2025-04-28 23:33:31 +08:00
Sudeep Mohanty
8423f5fc46 test(newlib): Added unit tests for usleep and sleep_for functions
This commit adds unit tests to verify the basic functionality of
usleep() and this_thread::sleep_for() std functions.
2025-04-28 17:07:52 +02:00
Stephen Noonan
ac386c7416 fix(newlib): usleep returning early
This commit updates usleep() to always sleep for the required sleep
period or more. This fixes a bug where the usleep() could sleep for less
than the request sleep period.

Closes https://github.com/espressif/esp-idf/pull/15132
2025-04-28 17:07:17 +02:00
Rahul Tank
837eecabca Merge branch 'bugfix/blufi_add_missing_adv_stop_v5.4' into 'release/v5.4'
fix(nimble): Added code for missing adv stop in blufi (v5.4)

See merge request espressif/esp-idf!38718
2025-04-28 19:19:18 +08:00
Sajia
36940f8c0e refactor(wifi): Optimize wifi bin size for station mode 2025-04-28 14:28:01 +05:30
Marius Vikhammer
204907a927 Merge branch 'feat/heap-update-to-latest-tlsf_v5.4' into 'release/v5.4'
feat(heap): Update to latest TLSF (v5.4)

See merge request espressif/esp-idf!38711
2025-04-28 15:58:25 +08:00
chenjianhua
96bde12558 fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(edf923e)
- Fixed ble lib linkage issue
2025-04-28 14:10:14 +08:00
Chen Jian Hua
07233ed2d3 fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(edf923e)
- Fixed MIC error disconnection when pairing with iOS devices


(cherry picked from commit 0df0b53b0a)

Co-authored-by: chenjianhua <chenjianhua@espressif.com>
2025-04-28 14:09:56 +08:00
Jiang Jiang Jian
d0068c4203 Merge branch 'bugfix/fix_some_wifi_bugs_0427_v5.4' into 'release/v5.4'
fix(phy): fix phy data partition restoring default fails issue(Backport v5.4)

See merge request espressif/esp-idf!38770
2025-04-28 10:50:28 +08:00
Wang Meng Yang
e912a4f6ba Merge branch 'bugfix/l2cap_no_report_stop_server_evt_v5.4' into 'release/v5.4'
fix(bt): Fixed l2cap not reporting stop server completion event(v5.4)

See merge request espressif/esp-idf!38698
2025-04-28 08:19:43 +08:00
Adam Múdry
f7054acf46 feat(fatfs/diskio): Remove const from PARTITION VolToPart
Closes https://github.com/espressif/esp-idf/issues/14148
2025-04-28 01:21:48 +02:00
Jiang Jiang Jian
475301889e Merge branch 'fix/fix_usj_pad_retention_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix usj pad config bad retention (v5.4)

See merge request espressif/esp-idf!38746
2025-04-27 19:32:13 +08:00
Rahul Tank
012b9c7031 Merge branch 'bugfix/ios_hid_failure_v5.4' into 'release/v5.4'
fix(nimble): Update hid device example in nimble to work with iOS (v5.4)

See merge request espressif/esp-idf!38676
2025-04-27 18:36:25 +08:00
muhaidong
592e747c78 fix(wifi): fix some wifi bugs 250427
1. fix ersu compatibility issue
2. fix association timeout timer issue for wep shared auth
2025-04-27 15:18:21 +08:00
muhaidong
57fd0fe836 fix(phy): fix phy data partition restoring default fails issue
Closes https://github.com/espressif/esp-idf/issues/14698
2025-04-27 14:58:24 +08:00
Island
b9123d5554 Merge branch 'feat/add_sync_cte_type_in_pa_sync_v5.4' into 'release/v5.4'
Feat/add sync cte type in pa sync (v5.4)

See merge request espressif/esp-idf!38592
2025-04-27 14:11:35 +08:00
Island
fcd5c75e3a Merge branch 'feat/spi_ble_log_improvement_v5.4' into 'release/v5.4'
feat(ble): Improved SPI BLE Log functionality (v5.4)

See merge request espressif/esp-idf!38741
2025-04-27 14:04:32 +08:00
Island
0bfda8cfda Merge branch 'feat/optimize_cble50y24_109_v5.4' into 'release/v5.4'
feat(bt/bluedroid): Added throughput mode for BLE SPP example (v5.4)

See merge request espressif/esp-idf!38693
2025-04-27 10:15:05 +08:00
Alexey Gerenkov
abd28fb2be feat(tools): update openocd version to v0.12.0-esp32-20250422 2025-04-26 12:40:11 +02:00
Jiang Jiang Jian
5295bc39e5 Merge branch 'fix/update_os_time_struct_v5.4' into 'release/v5.4'
Modifying os_time_t datatype for platform and compiler independence

See merge request espressif/esp-idf!38736
2025-04-25 18:28:16 +08:00
Fu Hanxi
bed18219c6 ci: rename local idf_ci folder, avoid name collision 2025-04-25 11:26:15 +02:00
wuzhenghui
33aca83c63 change(ci): remove esp32c5 from readme since esp32c5 skipped CI build 2025-04-25 17:13:27 +08:00
wuzhenghui
dbd4934205 fix(esp_hw_support): specify optimize options to avoid dirtying L2 mem after L1D$ writeback 2025-04-25 17:13:27 +08:00
wuzhenghui
8cfe912053 fix(esp_hw_support): fix wrong APB clock freq on retenion 2025-04-25 17:13:26 +08:00
wuzhenghui
192ffcb894 feat(esp_hw_support): count pau backup time into sleep rejection judgment 2025-04-25 17:13:26 +08:00
wuzhenghui
41e6e25e2d feat(esp_hw_support): remeasure sleep_time_overhead_out if min_freq_mhz changed 2025-04-25 17:13:26 +08:00
wuzhenghui
81860c55d6 feat(esp_hw_support): use non-lock regi2c fast-up cpll/mpll enable process after sleep wakeup 2025-04-25 17:13:22 +08:00
wuzhenghui
c29cd7333b fix(esp_hw_support): fix usj pad config bad retention
Closes https://github.com/espressif/esp-idf/issues/15797
2025-04-25 15:52:10 +08:00
wuzhenghui
41dd6ef81a feat(esp_hw_support): optimize esp32p4 GPIO retention link 2025-04-25 15:26:05 +08:00
wuzhenghui
d9fdab14d0 fix(esp_hw_support): iomux slp_sel is not avaliable to isolate mspi pin leakage on esp32p4 2025-04-25 15:26:02 +08:00
Sudeep Mohanty
f56cf54183 fix(panic_handler): Prevent race condition in panic handler
This commit updates all RTC WDT contexts to be local instead of global
to avoid race conditions when both cores enter the panic handler
simultaneously.
2025-04-25 09:10:58 +02:00
Zhou Xiao
1771685866 feat(ble): Improved SPI BLE Log functionality
* Added checksum for every frame
* Added SPI slave transaction interval workaround
* Added SPI tx done isr issue workaround
* Turned buffer flush to a menuconfig and disabled by default
* Modified packet loss write operation and trigger condition
* Optimized buffer append efficiency for controller ISR


(cherry picked from commit 243705c143)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-04-25 14:53:46 +08:00
tarun.kumar
96e06bd2ca fix(esp_wifi): Modifying os_time_t datatype for platform and compiler independence 2025-04-25 11:21:31 +05:30
Rahul Tank
f3b3c4362c fix(nimble): Update hid device example in nimble to work with iOS 2025-04-25 10:43:09 +05:30
Wang Meng Yang
a15c978f08 Merge branch 'feat/add_api_get_avrc_status_v5.4' into 'release/v5.4'
feat(bt): Add API to get some information of Classic Bluetooth profile(v5.4)

See merge request espressif/esp-idf!38685
2025-04-25 12:05:15 +08:00
xiongweichao
be9713fe10 fix(bt): Fixed l2cap not reporting stop server completion event 2025-04-25 11:39:51 +08:00
morris
705592c719 Merge branch 'test/parlio_rx_cache_safe_v5.4' into 'release/v5.4'
Reenable parlio rx cache safe test (v5.4)

See merge request espressif/esp-idf!38683
2025-04-25 10:09:56 +08:00
Martin Vychodil
1c29e55deb Merge branch 'fix/nvs_logger_json_output_v5.4' into 'release/v5.4'
fix(nvs_flash/nvs_tool): Fix nvs_tool.py to output required values (v5.4)

See merge request espressif/esp-idf!38681
2025-04-25 00:46:40 +08:00
Jiang Jiang Jian
b4bbfe16c1 Merge branch 'fix/fix_dhcp_server_recv_decline_issue_v54' into 'release/v5.4'
fix(dhcp): fix dhcp server recv decline issue v54

See merge request espressif/esp-idf!38507
2025-04-24 19:52:13 +08:00
Jiang Jiang Jian
97af977d0b Merge branch 'bugfix/fix_some_wifi_bugs_0421_v5.4' into 'release/v5.4'
fix(wifi): fix some wifi bugs 0421 (v5.4)

See merge request espressif/esp-idf!38594
2025-04-24 19:46:22 +08:00
Rahul Tank
cb29590a70 fix(nimble): Added code for missing adv stop in blufi 2025-04-24 14:17:39 +05:30
Guillaume Souchere
826f8a5f53 feat(heap): Update to latest TLSF
- this new version of TLSF uses uintptr_t instead of unsigned int
  casting in tlsf_malloc_addr to allow proper use of the function
  on 64bit targets.
2025-04-24 10:39:41 +02:00
morris
0e584aa200 Merge branch 'bugfix/fix_esp32_touch_example_task_watchdog_issue_v5.4' into 'release/v5.4'
fix(legacy_touch): fixed touch read WDT issue on esp32 (v5.4)

See merge request espressif/esp-idf!38581
2025-04-24 16:37:19 +08:00
Aditya Patwardhan
7dfccfb5d0 Merge branch 'bugfix/crypto_reset_on_exit_v5.4' into 'release/v5.4'
fix(esp_system): reset crypto peripherals before device restart (v5.4)

See merge request espressif/esp-idf!38475
2025-04-24 15:27:57 +08:00
Marius Vikhammer
63d0aa7ecb Merge branch 'fix/dram_dma_aligned_attr_for_p4_v5.4' into 'release/v5.4'
fix(esp_common): Fix DRAM_DMA_ALIGNED_ATTR for ESP32-P4 (v5.4)

See merge request espressif/esp-idf!38643
2025-04-24 14:43:53 +08:00
Marius Vikhammer
ef797e0239 Merge branch 'fix/freertos_tickless_idle_tick_jump_v5.4' into 'release/v5.4'
fix(freertos): Fixed tickless idle tick count accounting (v5.4)

See merge request espressif/esp-idf!38510
2025-04-24 13:35:50 +08:00
morris
8770ad5fcc Merge branch 'fix/fix_p4_adc_reread_oneshot_error' into 'release/v5.4'
fix(ADC): fix P4 ADC oneshot error when reread  (v5.4)

See merge request espressif/esp-idf!38634
2025-04-24 13:13:26 +08:00
zwl
edaea6dc23 feat(ble): add configuration command during RF testing 2025-04-24 12:08:47 +08:00
zhangbowen
c9a7aea7d2 feat(bt/bluedroid): Added throughput mode for BLE SPP example 2025-04-24 12:08:01 +08:00
Shu Chen
70e0e18576 Merge branch 'fix/meshcop_udp_port_v5.4' into 'release/v5.4'
fix(openthread/meshcop): get right udp port for publishing meshcop-e (v5.4)

See merge request espressif/esp-idf!38659
2025-04-24 11:04:55 +08:00
Shu Chen
c0146964d2 Merge branch 'fix/ieee802154_tx_ack_timeout_crash_v5.4' into 'release/v5.4'
fix(802.15.4): fix 15.4 process for unsupported frame (v5.4)

See merge request espressif/esp-idf!38669
2025-04-24 10:58:44 +08:00
morris
50e1d46980 fix(parlio): reenable parlio rx driver cache safe test 2025-04-24 10:41:08 +08:00
morris
bd396ad476 fix(spi): allocate driver memory with caps explicitly 2025-04-24 10:41:08 +08:00
Island
e6885983fa Merge branch 'feat/support_136k_rc_clk_on_ble_sleep_v5.4' into 'release/v5.4'
Feat/support 136k rc clk on ble sleep (v5.4)

See merge request espressif/esp-idf!38621
2025-04-24 10:37:55 +08:00
xiongweichao
b59e8634f2 feat(bt): Add API to get some information of Classic Bluetooth profile 2025-04-24 10:34:07 +08:00
morris
7e11597089 Merge branch 'bugfix/fix_i2s_assign_and_check_sequence_v5.4' into 'release/v5.4'
fix(i2s): fixed i2s inappropriate check and assign sequence (v5.4)

See merge request espressif/esp-idf!38605
2025-04-24 10:32:48 +08:00
Jiang Jiang Jian
4854f415e4 Merge branch 'bugfix/fix_bt_access_ext_mem_in_intr_v5.4' into 'release/v5.4'
fix(bt/controller): Fixed access external memory in isr context (v5.4)

See merge request espressif/esp-idf!38572
2025-04-24 10:29:45 +08:00
wangtao@espressif.com
c8e36049b1 fix(dhcp): fix dhcp server recv decline issue 2025-04-24 10:29:26 +08:00
hrushikesh.bhosale
6988a149b4 feat(nvs_tool): Test for print_minimal_json
Added the test for the print_minimal_json function
and setup_minimal_json function to setup the test.
2025-04-23 16:23:18 +02:00
hrushikesh.bhosale
f21a30fee2 fix(nvs_flash/nvs_tool): Fix nvs_tool.py to output required values
nvs_tool.py did not provide the minimal output support which outputs
the only necessary data.

nvs_tool.py minimal text ouptut, the deliminators were not handled
in the output

Closes https://github.com/espressif/esp-idf/issues/15274
2025-04-23 16:23:18 +02:00
Rahul Tank
81c34b09f0 Merge branch 'fix/pawr_docs_v5.4' into 'release/v5.4'
feat(nimble):Added tutorials for PAwR examples (v5.4)

See merge request espressif/esp-idf!38622
2025-04-23 19:44:40 +08:00
Rahul Tank
b5802d7230 Merge branch 'feat/pawr_bugfix_v5.4' into 'release/v5.4'
fix(nimble): Fix sync handle assignment for pawr connection (v5.4)

See merge request espressif/esp-idf!38502
2025-04-23 19:35:28 +08:00
zwx
dcb1e52988 fix(802.15.4): fix 15.4 process for unsupported frame 2025-04-23 19:01:34 +08:00
Island
69173b1864 Merge branch 'bugfix/fix_some_ble_bugs_250331_esp32c3_v5.4' into 'release/v5.4'
Fixed some BLE bugs 250331 on esp32c3 (v5.4)

See merge request espressif/esp-idf!38580
2025-04-23 18:13:52 +08:00
Tan Yan Quan
98363edfaf fix(openthread/meshcop): get right udp port for publishing meshcop-e
* esp-openthread: thread_zigbee/esp-openthread@ad81e1b23
* openthread: espressif/openthread@8c30b93fe
* esp-idf: espressif/esp-idf@a97879b71
2025-04-23 10:10:35 +00:00
Mahavir Jain
5cdc53df23 fix(esp_system): reset crypto peripherals before device restart
This change addresses a rare but critical issue observed on certain
ESP32-C3 and ESP32-S3 devices, where secure boot verification
intermittently fails due to improper cleanup of crypto peripherals
during a restart.

Background – Restart Behavior in IDF
------------------------------------
In ESP-IDF, when the device restarts (via `esp_restart()` or due to a
panic/exception), a partial peripheral reset is performed followed by a
CPU reset. However, until now, crypto-related peripherals were not
included in this selective reset sequence.

Problem Scenario
----------------
If a restart occurs while the application is in the middle of a bignum
operation (i.e., using the MPI/Bignum peripheral), the ROM code may
encounter an inconsistent peripheral state during the subsequent boot.
This leads to transient RSA-PSS secure boot verification failures.

Following such a failure, the ROM typically triggers a full-chip reset
via the watchdog timer (WDT). This full reset clears the crypto
peripheral state, allowing secure boot verification to succeed on the
next boot.

Risk with Aggressive Revocation
-------------------------------
If secure boot aggressive revocation is enabled (disabled by default in
IDF), this transient verification failure could mistakenly lead to
revocation of the secure boot digest.

If your product configuration has aggressive revocation enabled,
applying this fix is strongly recommended.

Frequency of Occurrence
-----------------------
The issue is rare and only occurs in corner cases involving
simultaneous use of the MPI peripheral and an immediate CPU reset.

Fix
---
This fix ensures that all crypto peripherals are explicitly reset prior
to any software-triggered restart (including panic scenarios),
guaranteeing a clean peripheral state for the next boot and preventing
incorrect secure boot behavior.
2025-04-23 17:53:09 +08:00
Marius Vikhammer
a97879b71c Merge branch 'feature/add_core_num_def_for_linux_v5.4' into 'release/v5.4'
feat(soc): Adds core_num definition for Linux target (v5.4)

See merge request espressif/esp-idf!38485
2025-04-23 17:38:08 +08:00
Jiang Jiang Jian
ee317c3d6f Merge branch 'bugfix/sae_send_confirm_v5.4' into 'release/v5.4'
fix(esp_wifi): Fix send_confirm according to specification provided by IEEE 802.11 (v5.4)

See merge request espressif/esp-idf!38434
2025-04-23 16:37:50 +08:00
Roman Leonov
b760531d5b fix(usb_host): Correctly initialize set pipe ep char 2025-04-23 10:09:18 +02:00
Roman Leonov
56daed6169 fix(hcd): Added delay to slow down scatter-gather dma for ls device via fs hubs 2025-04-23 10:09:18 +02:00
Konstantin Kondrashov
5c3910d8ca fix(esp_common): Fix DRAM_DMA_ALIGNED_ATTR for P4 2025-04-23 10:37:00 +03:00
gaoxu
c04ae03729 fix(ADC): fix P4 ADC oneshot error when reread 2025-04-23 11:33:06 +08:00
linruihao
224e9feed9 fix(bt/controller): Fixed access external memory in isr context 2025-04-23 11:25:48 +08:00
Jin Cheng
529a471a55 fix(bt/controller): update libbtdm_app.a
- fixed errors in the coexistance of ACL and SCO
- fixed dynamic priority config error in dual mode
2025-04-23 11:25:48 +08:00
Island
180ee9ef0e Merge branch 'feat/optimize_cble50y24_111_v5.4' into 'release/v5.4'
feat(bt/bluedroid): Added BLE eddystone sender example (v5.4)

See merge request espressif/esp-idf!38158
2025-04-23 10:32:30 +08:00
morris
15da3ccc52 Merge branch 'ci/disable_c5_target_test_on_v5.4' into 'release/v5.4'
ci(esp32c5): disable esp32c5 build and target test on v5.4

See merge request espressif/esp-idf!38587
2025-04-23 09:56:36 +08:00
Abhinav Kudnar
2a86fcd4e5 feat(nimble):Added tutorials for PAwR examples 2025-04-22 19:18:03 +08:00
Jin Chen
b0e1c7b244 feat(ble): support ble sleep using 136 kHz RC on ESP32-H2
(cherry picked from commit 6c8ee69151)

Co-authored-by: cjin <jinchen@espressif.com>
2025-04-22 19:05:50 +08:00
Jin Chen
bc5962499d feat(ble): support ble sleep using 136 kHz RC on ESP32-C6
(cherry picked from commit 718dd7a87a)

Co-authored-by: cjin <jinchen@espressif.com>
2025-04-22 19:05:48 +08:00
Jin Chen
3dc694f167 feat(ble): support ble sleep using 136 kHz RC on ESP32-C5
(cherry picked from commit cb8ea7951c)

Co-authored-by: cjin <jinchen@espressif.com>
2025-04-22 19:05:45 +08:00
Jin Chen
5226629d18 feat(ble): support ble sleep using 136 kHz RC on ESP32-C2
(cherry picked from commit 73f1084bf8)

Co-authored-by: cjin <jinchen@espressif.com>
2025-04-22 19:05:43 +08:00
Sudeep Mohanty
8f2f1abdd5 test(freertos): Added a unit test for tickless idle tick jump scenario
This commit adds a unit test to test that tickless idle mode does not
cause an unexpected jump in tick count after tickless idle mode is
exited.
2025-04-22 16:32:08 +08:00
Sudeep Mohanty
3e18049461 fix(freertos): Fixed tickless idle tick count accounting
This commit fixes an issue where the FreeRTOS kernel does not account
for the pended ticks occuring during automatic light-sleep mode and
hence causing a jump in the tick count at a later stage in the
application lifetime.

Closes: https://github.com/espressif/esp-idf/issues/15642
2025-04-22 16:32:08 +08:00
laokaiyao
ecf073e650 ci: disable esp32c5 build and target test on v5.4 2025-04-22 16:07:50 +08:00
laokaiyao
e5e713892b fix(i2s): add check for the minimum sample rate
Closes https://github.com/espressif/esp-idf/issues/15659
2025-04-22 15:37:47 +08:00
laokaiyao
f22cd54760 fix(i2s): reset the dma buf_size while allocation failed
Closes https://github.com/espressif/esp-idf/issues/15648
2025-04-22 15:19:39 +08:00
Jiang Jiang Jian
bb60389063 Merge branch 'esp32/run_panic_debug_v5.4' into 'release/v5.4'
fix(esp32): Fixed qa program may fail issue when cpu 240m (v5.4)

See merge request espressif/esp-idf!37231
2025-04-22 15:06:11 +08:00
morris
93cff127be Merge branch 'fix/gpio_pull_enable_disable_strategy_v5.4' into 'release/v5.4'
fix(i2c,mcpwm): fix gpio pull strategy (v5.4)

See merge request espressif/esp-idf!38565
2025-04-22 13:33:33 +08:00
Island
26b9ba6b63 Merge branch 'bugfix/fix_some_ble_bugs_2503_v5.4' into 'release/v5.4'
Bugfix/fix some ble bugs 2503 (v5.4)

See merge request espressif/esp-idf!38291
2025-04-22 11:49:13 +08:00
zhangyanjiao
53164297d7 fix(wifi): update the wifi lib for espnow and lr issues 2025-04-22 11:06:58 +08:00
zhangyanjiao
c5a61099c1 fix(docs): update max data length in espnow doc 2025-04-22 11:06:58 +08:00
liuning
5bf37234b8 feat(docs): update connectionless module window syncronization documentation 2025-04-22 11:06:58 +08:00
zhangyanjiao
41fed6aec5 fix(wifi): fix the noise floor error on ESP32C5
Closes https://github.com/espressif/esp-idf/issues/15594
2025-04-22 11:06:58 +08:00
zhangyanjiao
56257439a2 fix(wifi/vendor): separate the lr bit in phy mode for station and softAP
Closes https://github.com/espressif/esp-idf/issues/9978
2025-04-22 11:06:58 +08:00
zhangyanjiao
133d40d6d1 fix(wifi): Fixed the scan information error in LR only mode 2025-04-22 11:06:58 +08:00
zhangyanjiao
ab71248476 fix(wifi): Fixed the max log level not work when it exceeds the default log level 2025-04-22 11:06:58 +08:00
zhangyanjiao
8bee78e5ea docs(wifi): update the description for esp_mesh_send() return value
Closes https://github.com/espressif/esp-idf/issues/14440
2025-04-22 11:06:58 +08:00
zhangyanjiao
c9cc85b68c fix(wifi): fix the ESPNOW data length issue and connection issue
1. Changed the max data length to 1470 bytes for ESP-NOW v2.0
2. Added timer to send wake null after STA received assoc response
2025-04-22 11:06:58 +08:00
zhangyanjiao
e9d8241b53 fix(wifi): Update the doc for espnow add peer 2025-04-22 11:06:58 +08:00
zhangyanjiao
1a7ed6c1df fix(wifi): fixed the espnow data length error in example 2025-04-22 11:06:58 +08:00
chaijie@espressif.com
bb8a86856a fix(esp32): Fixed qa program may fail issue when cpu 240m (v5.4) 2025-04-22 10:24:27 +08:00
Chen Jian Hua
cc336b0d88 fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(a684dd5)
- Fixed clear legacy adv error when adv not exist
- Disable anonymous extended adv reporting
- Fixed BLE assert lld_adv.c 2992
- Fixed heap assert due to adv data buffer double freeing
- Fixed BLE 0x08 disconnect when the win size is greater than half of the conn interval


(cherry picked from commit 4602665e5d)

Co-authored-by: chenjianhua <chenjianhua@espressif.com>
2025-04-22 09:58:34 +08:00
laokaiyao
8e6a7845b7 fix(touch): fixed tie option take no effect 2025-04-21 20:45:50 +08:00
Jiang Jiang Jian
be719bfe2d Merge branch 'bugfix/pmkid_password_mismatch_regression_v5.4' into 'release/v5.4'
fix(wifi): Avoid writing to NVS if station configuration is not changed (Backport v5.4)

See merge request espressif/esp-idf!38486
2025-04-21 17:41:38 +08:00
Zhi Wei Jian
6098df35ec feat(ble/bluedroid): Add sync_cte_type in creat_periodic_adv_sync function
(cherry picked from commit eb647d10c6)

Co-authored-by: zhiweijian <zhiweijian@espressif.com>
2025-04-21 17:03:36 +08:00
Zhi Wei Jian
a30d47b6fe fix(ble/bluedroid): Fixed BLE_FEAT_CREATE_SYNC_ENH define error in bluedroid host
(cherry picked from commit cf6135c990)

Co-authored-by: zhiweijian <zhiweijian@espressif.com>
2025-04-21 17:03:33 +08:00
Roland Dobai
17e79ef8b6 Merge branch 'bugfix/linux_cert_bundle_build_warn_v5.4' into 'release/v5.4'
fix(tools): suppress GNU bin-utils warning about executable stack (v5.4)

See merge request espressif/esp-idf!38345
2025-04-21 16:45:44 +08:00
Marius Vikhammer
7256deafc9 Merge branch 'fix/lp_wakeup_cause_bits_accumulation_v5.4' into 'release/v5.4'
fix(ulp): Fix accumulation of wakeup cause bits in ULP (v5.4)

See merge request espressif/esp-idf!38561
2025-04-21 16:42:47 +08:00
laokaiyao
f1903f095a fix(legacy_touch): fixed the concurrent issue in esp32 touch driver 2025-04-21 14:57:29 +08:00
laokaiyao
a9f8ed3bbf fix(touch): fixed touch read WDT issue on esp32
Closes https://github.com/espressif/esp-idf/issues/15629
2025-04-21 14:47:26 +08:00
Island
2038923cc4 Merge branch 'fix/blemesh25-92_v5.4' into 'release/v5.4'
fix(ble_mesh): fixed issues with decrypt failed when resending messages (v5.4)

See merge request espressif/esp-idf!38560
2025-04-21 14:22:04 +08:00
Tan Yan Quan
781123eb08 fix(openthread): check state for ot wake 2025-04-21 10:45:44 +08:00
Tan Yan Quan
72c4063d1a fix(openthread): relax CSL accuracy default value 2025-04-21 10:45:44 +08:00
Island
3ad36321ea Merge branch 'change/ble_update_lib_20250417_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250417 - Update ESP BLE Controller Lib (v5.4)

See merge request espressif/esp-idf!38545
2025-04-21 10:40:38 +08:00
Chen Jichang
cbc6382b26 fix(i2c,mcpwm): fix gpio pull strategy
Closes https://github.com/espressif/esp-idf/issues/15774
2025-04-21 10:35:52 +08:00
Sarvesh Bodakhe
c74773c091 fix(wifi): Avoid writing to NVS if station configuration is not changed
Fixes the regression introduced by f8b1c0976a

Co-authored-by: yinqingzhao <yinqingzhao@espressif.com>
2025-04-19 17:33:39 +05:30
Konstantin Kondrashov
93750520fe fix(ulp): Fix accumulation of wakeup cause bits in ULP
Closes https://github.com/espressif/esp-idf/issues/15794
2025-04-18 15:52:28 +03:00
Luo Xu
5c65747537 fix(ble_mesh): fixed issues with decrypt failed when resending messages
(cherry picked from commit 4803cea3cc)

Co-authored-by: luoxu <luoxu@espressif.com>
2025-04-18 20:23:49 +08:00
Shen Weilong
de00b516b8 change(ble): [AUTO_MR] Update lib_esp32c5 to cd6ba0ec 2025-04-18 19:59:48 +08:00
Alexey Gerenkov
438b6cf3e6 Merge branch 'disable_apptrace_test_on_c5_v5.4' into 'release/v5.4'
ci(change): disable esp32c5 apptrace test (v5.4)

See merge request espressif/esp-idf!38528
2025-04-18 15:29:30 +08:00
Shen Wei Long
ca02c5ec24 change(ble): [AUTO_MR] Update lib_esp32c6 to cd6ba0ec
(cherry picked from commit a89916eef4)

Co-authored-by: Shen Weilong <shenweilong@espressif.com>
2025-04-18 14:10:14 +08:00
Shen Wei Long
5c3edd7a74 change(ble): [AUTO_MR] Update lib_esp32h2 to cd6ba0ec
(cherry picked from commit d48cc9ce2a)

Co-authored-by: Shen Weilong <shenweilong@espressif.com>
2025-04-18 14:10:12 +08:00
morris
af3fa8731f Merge branch 'refactor/gdma_set_iram_safe_in_runtime_v5.4' into 'release/v5.4'
refactor(gdma): use run-time iram-safe config (v5.4)

See merge request espressif/esp-idf!38459
2025-04-18 13:26:42 +08:00
Island
017480b377 Merge branch 'change/ble_update_lib_20250414_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250414 - Update ESP BLE Controller Lib (v5.4)

See merge request espressif/esp-idf!38494
2025-04-18 11:07:01 +08:00
Erhan Kurubas
80ec596e1e ci(change): disable esp32c5 apptrace test 2025-04-17 18:57:10 +02:00
Jiang Jiang Jian
274925fa8a Merge branch 'bugfix/pmf_enabled_sae_query_v5.4' into 'release/v5.4'
fix(wifi): SA Query responses not transmitted (Backport v5.4)

See merge request espressif/esp-idf!38245
2025-04-17 22:44:28 +08:00
Jiang Jiang Jian
dbfa8ba5b2 Merge branch 'fix/fix_uart_console_broken_after_sleep_v5.4' into 'release/v5.4'
fix(esp_hw_support): fixed gpio sleep switching filling junk data to the console UART FIFO (v5.4)

See merge request espressif/esp-idf!38444
2025-04-17 17:14:33 +08:00
Jiang Jiang Jian
79d965f16a Merge branch 'change/allow_keep_sar_poweron_in_light_sleep_v5.4' into 'release/v5.4'
change(esp_hw_support): allow sar power keep on during lightsleep (v5.4)

See merge request espressif/esp-idf!38454
2025-04-17 17:14:11 +08:00
Jiang Jiang Jian
9f8548bb2d Merge branch 'feat/enable_esp32p4_auto_clock_gate_v5.4' into 'release/v5.4'
feat(esp_hw_support): enable auto clock gating for multi peripherals (v5.4)

See merge request espressif/esp-idf!38443
2025-04-17 17:13:40 +08:00
Jiang Jiang Jian
9c9d5cc1a2 Merge branch 'fix/esp32p4_xtal_path_not_on_top_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix esp32p4 xtal_xpd depends on TOP power domain (v5.4)

See merge request espressif/esp-idf!38452
2025-04-17 17:03:47 +08:00
morris
0be344409b Merge branch 'fix/fix_mmu_map_concurrent_issue_v5.4' into 'release/v5.4'
mmu: fix mmu map concurrent issue (v5.4)

See merge request espressif/esp-idf!38411
2025-04-17 15:59:06 +08:00
Wang Meng Yang
4ad27c76c6 Merge branch 'feat/add_l2cap_register_event_v5.4' into 'release/v5.4'
feat(bt): Added events for l2cap register and unregister vfs(v5.4)

See merge request espressif/esp-idf!38421
2025-04-17 14:40:32 +08:00
Abhinav Kudnar
5a6072d035 fix(nimble): Fix sync handle assignment for pawr connection 2025-04-17 14:06:58 +08:00
Jiang Jiang Jian
65e0d49246 Merge branch 'fix/fix_current_leakage_after_ext_osc_detect_failed_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix current leakage if ext32k slow clock source not exists (v5.4)

See merge request espressif/esp-idf!38439
2025-04-17 11:04:57 +08:00
Zhou Xiao
9ef1c15bba fix(ble): remove null pointer assert in npl event deinit
(cherry picked from commit ece108c0bf)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-04-17 10:54:56 +08:00
Zhou Xiao
75343d25d0 change(ble): bugs fixed on spi ble log
* removed spi master in iram select for flash only firmware
* fixed memory issue in transaction init function
* fixed memory issue in transaction deinit function


(cherry picked from commit 7c3b9fa56f)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-04-17 10:54:54 +08:00
Zhou Xiao
46b786d79a feat(ble): support configurable rxbuf opt feat on ESP32-C6
(cherry picked from commit 5fbbec8655)

Co-authored-by: cjin <jinchen@espressif.com>
2025-04-17 10:54:52 +08:00
Zhou Xiao
e90390a90a feat(ble): support configurable rxbuf opt feat on ESP32-H2
(cherry picked from commit 4937d3c883)

Co-authored-by: cjin <jinchen@espressif.com>
2025-04-17 10:54:49 +08:00
Zhou Xiao
0cc6e2bb36 feat(ble): use new section for ble sleep on ESP32-C2
(cherry picked from commit ce4e012c8b)

Co-authored-by: cjin <jinchen@espressif.com>
2025-04-17 10:54:47 +08:00
Zhou Xiao
ebef86f435 change(ble): [AUTO_MR] Update lib_esp32c2 to fca2b9ea
(cherry picked from commit 09467baed0)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-04-17 10:54:45 +08:00
Zhou Xiao
6836bd9870 change(ble): [AUTO_MR] Update lib_esp32c6 to 76549818
(cherry picked from commit e2d1a5509e)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-04-17 10:54:43 +08:00
Zhou Xiao
eecf74a7c9 change(ble): [AUTO_MR] Update lib_esp32h2 to 76549818
(cherry picked from commit c11bb1ddd0)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-04-17 10:54:41 +08:00
akshat
cd3a072c0f fix(wifi): Fix occasional dropping of SA Query responses by SoftAP 2025-04-16 22:24:28 +05:30
Konstantin Kondrashov
295535985c feat(soc): Adds core_num definition for Linux target
Closes https://github.com/espressif/esp-idf/issues/15758
2025-04-16 18:32:18 +03:00
Jiang Jiang Jian
395295cc35 Merge branch 'feat/add_svc_info_in_sdf_v5.4' into 'release/v5.4'
Add extended SSI support for NAN Services (Backport v5.4)

See merge request espressif/esp-idf!38302
2025-04-16 20:02:44 +08:00
morris
2c376ff99f refactor(drivers): refactor the iram-safe option of the gdma peripherals
Closes https://github.com/espressif/esp-idf/issues/15771
2025-04-16 17:09:04 +08:00
morris
7bcb7248bb feat(gdma): support allocate cache safe ISR for channels separately 2025-04-16 16:44:41 +08:00
wuzhenghui
e22c4a146d change(esp_hw_support): allow sar power keep on during lightsleep
Closes https://github.com/espressif/esp-idf/issues/12426
2025-04-16 15:51:48 +08:00
Mahavir Jain
7ddb2ba0a0 Merge branch 'feat/update_mbedtls_3.6.3_v5.4' into 'release/v5.4'
feat(component/mbedtls): update to upstream v3.6.3 (v5.4)

See merge request espressif/esp-idf!38178
2025-04-16 15:49:09 +08:00
wuzhenghui
d2755374e0 fix(esp_hw_support): fix esp32p4 xtal_xpd depends on TOP power domain 2025-04-16 15:37:11 +08:00
wuzhenghui
76d021ad11 fix(esp_hw_support): fixed gpio sleep switching filling junk data to the console UART FIFO 2025-04-16 15:23:27 +08:00
wuzhenghui
7643f77225 feat(esp_hw_support): enable auto clock gating for multi peripherals 2025-04-16 15:08:51 +08:00
wuzhenghui
ba88b91e28 fix(esp_hw_support): fix unused OSC source deinit breaks XTAL32K configuration 2025-04-16 14:56:49 +08:00
wuzhenghui
54c4606111 fix(esp_hw_support): fix current leakage if ext32k slow clock source not exists 2025-04-16 14:56:12 +08:00
Shreyas Sheth
8221f0b01b ci(wifi): Add build test for with wpa3 disabled for station and softap 2025-04-16 11:56:20 +05:30
Shreyas Sheth
8b979114e0 fix(esp_wifi): Fix send_confirm according to specification provided by IEEE 802.11 2025-04-16 11:56:20 +05:30
Shu Chen
a7cc6804df Merge branch 'feature/add_ot_cli_ci_case_v5.4' into 'release/v5.4'
feat(openthread): add openthread ci ssed case v5.4

See merge request espressif/esp-idf!38256
2025-04-16 10:15:13 +08:00
morris
b8bb557085 Merge branch 'feat/allow_rmt_tx_channel_to_switch_other_gpios_v5.4' into 'release/v5.4'
feat(rmt_tx): allow to switch gpio in tx channal (v5.4)

See merge request espressif/esp-idf!38394
2025-04-16 10:12:07 +08:00
Ashish Sharma
605206b69f feat(mbedtls): new config to allow weak cert verification 2025-04-16 09:50:24 +08:00
Ashish Sharma
7578913742 feat(mbedtls): update to version 3.6.3 2025-04-16 09:50:24 +08:00
Mahavir Jain
87947712af fix(tools): suppress GNU bin-utils warning about executable stack
Newer GNU bin-utils version 2.39 has started emitting a warning
about an executable stack region for Linux target build:

/usr/bin/ld: warning: x509_crt_bundle.S.o: missing .note.GNU-stack section implies executable stack

Fix the issue by adding appropriate "noexecute" attribute for stack
section.
2025-04-15 21:55:30 +08:00
xiongweichao
93bd316b3a fix(bt): fixed spp not reporting write event 2025-04-15 19:03:02 +08:00
xiongweichao
63ca09cacd fix(bt): Fixed the issue with l2cap not using dynamic memory 2025-04-15 19:02:33 +08:00
xiongweichao
ebce1de0fc fix(bt): Fixed write_read task stack overflow in l2cap example 2025-04-15 19:02:28 +08:00
xiongweichao
3d2faed4c6 feat(bt): Added events for l2cap register and unregister vfs 2025-04-15 19:02:22 +08:00
armando
873cde487c test(system): increased 200B memory leak thresh due to mmu mmap mutex
200B to extend the thresh, real increase to the memory usage will be smaller
2025-04-15 14:22:48 +08:00
armando
256dbafe15 test(mmu): added esp_mmu_map concurrency test 2025-04-15 14:21:51 +08:00
armando
56cd01899c fix(mmu): fixed esp_mmu_map concurrent issue and add related docs 2025-04-15 14:21:46 +08:00
morris
ef1a5075f5 Merge branch 'refactor/ana_cmpr_driver_v5.4' into 'release/v5.4'
refactor(ana_cmpr): enhanced the driver implementation (v5.4)

See merge request espressif/esp-idf!38388
2025-04-15 13:15:23 +08:00
Marius Vikhammer
6b617c54c2 Merge branch 'bugfix/p4_lpwdt_efuse_v5.4' into 'release/v5.4'
fix(lpwdt): P4 LP-WDT now takes into account the EFUSE_WDT_DELAY for the timeout (v5.4)

See merge request espressif/esp-idf!38392
2025-04-15 12:28:38 +08:00
Wang Meng Yang
26e415dcb4 Merge branch 'feature/add_profile_stat_v5.4' into 'release/v5.4'
feat(bt): Add API to get profile status(v5.4)

See merge request espressif/esp-idf!38274
2025-04-15 08:13:24 +08:00
Chen Jichang
7be85fd8ba feat(rmt_tx): allow to switch gpio in tx channal 2025-04-14 18:38:45 +08:00
morris
d20d3c7a60 fix(ana_cmpr): ETM event not work for Unit 1 2025-04-14 17:13:48 +08:00
Island
8e473c6bed Merge branch 'bugfix/fix_ble_controller_only_error_if_hci_uart_enabled_v5.4' into 'release/v5.4'
fix(ble/controller): Fixed controller flash only bug if hci-uart is enabled (v5.4)

See merge request espressif/esp-idf!38148
2025-04-14 17:12:53 +08:00
morris
9d3b69fabb Merge branch 'doc/touch_element_support_esp32s3_v5.4' into 'release/v5.4'
docs(touch): build the touch element doc for esp32s3 (v5.4)

See merge request espressif/esp-idf!38390
2025-04-14 16:48:01 +08:00
Tan Yan Quan
86db777bd2 feat(openthread): add esp_system dependency for SSED CI 2025-04-14 16:37:52 +08:00
Tan Yan Quan
94af9e2a54 feat(openthread): relax conditions for trel case approval 2025-04-14 16:37:47 +08:00
Tan Yan Quan
400d7efaed feat(openthread): add openthread ci ssed case 2025-04-14 16:37:40 +08:00
Tan Yan Quan
c66fe0a72c feat(openthread): use freertos timer for debug logs 2025-04-14 16:37:35 +08:00
xiongweichao
ecf646cefc feat(bt): Add API to get profile status 2025-04-14 15:43:22 +08:00
Marius Vikhammer
8e1f47ef04 fix(lpwdt): P4 LP-WDT now takes into account the EFUSE_WDT_DELAY forthe timeout 2025-04-14 14:52:15 +08:00
morris
794f5b04a9 docs(touch): build the touch element doc for esp32s3
Closes https://github.com/espressif/esp-idf/issues/15755
2025-04-14 14:49:42 +08:00
akshat
90c008fe8c feat(esp_wifi): Add extended SSI support for NAN Services 2025-04-14 10:57:23 +05:30
morris
756cd17c61 Merge branch 'contrib/github_pr_15484_v5.4' into 'release/v5.4'
fix(twai): fixed twai assert fail during recover (GitHub PR) (v5.4)

See merge request espressif/esp-idf!37988
2025-04-14 13:23:02 +08:00
Alexey Gerenkov
72de7111cc Merge branch 'fix/coredump_uart_checksum_error_v5.4' into 'release/v5.4'
Fix/coredump uart checksum error (v5.4)

See merge request espressif/esp-idf!38364
2025-04-11 20:54:14 +08:00
Rocha Euripedes
9103ce5d03 Merge branch 'fix/fix-test-socks-transport_v5.4' into 'release/v5.4'
fix(tcp_transport): Fix test for socks transport (v5.4)

See merge request espressif/esp-idf!38293
2025-04-11 20:26:54 +08:00
Kapil Gupta
a18ce5df2d Merge branch 'bugfix/roaming_app_issues_v5.4' into 'release/v5.4'
fix(wifi): Fix some issues observed in roaming app (v5.4)

See merge request espressif/esp-idf!37414
2025-04-11 19:34:05 +08:00
Kapil Gupta
d255e7e7b5 fix(esp_wifi): Fix some compilation errors in roaming app 2025-04-11 15:49:12 +05:30
Kapil Gupta
5574205935 fix(esp_wifi): Removed unnecessary handlers to cleanup 2025-04-11 15:49:06 +05:30
Kapil Gupta
2b495713b2 fix(esp_wifi): Roaming app, sync api naming 2025-04-11 15:47:19 +05:30
Kapil Gupta
e5915c3ce3 fix(esp_wifi): Some more cleanup for roaming app 2025-04-11 15:47:17 +05:30
Kapil Gupta
8ed1cf8050 fix(esp_wifi): moving around roaming app code a bit 2025-04-11 15:46:25 +05:30
Kapil Gupta
7c94365ce9 fix(roaming_app): Add get set config params for the app 2025-04-11 15:46:25 +05:30
Kapil Gupta
e296094b00 fix(wifi): Provide a config option to skip IP renew during roam 2025-04-11 15:46:25 +05:30
Kapil Gupta
84ae3dc848 fix(esp_wifi): Set minimum scan time to 30ms in roaming app 2025-04-11 15:46:25 +05:30
Kapil Gupta
516551adc4 fix(wifi): Fix some issues observed in roaming app 2025-04-11 15:46:25 +05:30
Rahul Tank
b4ebe7a0af Merge branch 'fix/fix_incorrect_ota_address_assignment_v5.4' into 'release/v5.4'
fix(nimble): Fix incorrect OTA address type assignment (v5.4)

See merge request espressif/esp-idf!38348
2025-04-11 14:06:58 +08:00
morris
5190ce55a0 Merge branch 'fix/usb-hal-dwc-host-channel-num_v5.4' into 'release/v5.4'
fix(usb/hal/dwc): Correct host channel number calculation (backport v5.4)

See merge request espressif/esp-idf!37367
2025-04-11 11:27:34 +08:00
Erhan Kurubas
1ddd160dd2 fix(coredump): make sure consistency with uart data and calculated checksum
Closes https://github.com/espressif/esp-idf-monitor/issues/23
2025-04-10 16:27:25 +02:00
Martin Vychodil
a542b2b36a Merge branch 'fix/fatfs_use_dyn_buf_kconfig_mistake_v5.4' into 'release/v5.4'
fix(fatfs): Mistake in Kconfig for FATFS_USE_DYN_BUFFERS

See merge request espressif/esp-idf!38347
2025-04-10 20:30:45 +08:00
diplfranzhoepfinger
30d871d206 fix(twai): fixed twai assert fail when recover
driver try start new frame in ISR however already bus off

Closes https://github.com/espressif/esp-idf/issues/9697
2025-04-10 20:08:34 +08:00
Shreeyash
5b796a93e4 fix(nimble): Fix incorrect OTA address assignment 2025-04-10 15:15:36 +05:30
Adam Múdry
338dab5358 fix(fatfs): Mistake in Kconfig for FATFS_USE_DYN_BUFFERS 2025-04-10 10:53:19 +02:00
Wang Meng Yang
1bdd5daa83 Merge branch 'fix/some_issues_in_bt_controller_v5.4' into 'release/v5.4'
fix(bt): fixed some issues in bt controller(backport v5.4)

See merge request espressif/esp-idf!38331
2025-04-10 16:45:08 +08:00
Jiang Jiang Jian
24a92a3b23 Merge branch 'feat/eap_domain_check_v5.4' into 'release/v5.4'
esp_wifi: Add EAP domain validation support (v5.4)

See merge request espressif/esp-idf!38278
2025-04-10 14:59:41 +08:00
Jiang Jiang Jian
b79dcab1ec Merge branch 'feature/add_ds_param_in_probe_req_v5.4' into 'release/v5.4'
Add DS parameter in probe requests from STA (Backport v5.4)

See merge request espressif/esp-idf!38310
2025-04-10 13:53:22 +08:00
Shu Chen
a7f74bb220 Merge branch 'fix/ldgen_section_name_v54' into 'release/v5.4'
fix(ldgen): extend section name regex to include '_' (v5.4)

See merge request espressif/esp-idf!38323
2025-04-10 11:15:11 +08:00
morris
220a036318 Merge branch 'bugfix/remove_broken_link_for_wifi_expansion_v5.4' into 'release/v5.4'
bugfix: Remove the broken link in wifi-expansion.rst (v5.4)

See merge request espressif/esp-idf!38332
2025-04-10 10:41:40 +08:00
Rahul Tank
bf1a803795 Merge branch 'bugfix/fix_sscanf_usage_v5.4' into 'release/v5.4'
fix(nimble): Updated sscanf usage in examples to work for all versions (v5.4)

See merge request espressif/esp-idf!38021
2025-04-10 09:16:06 +08:00
Rahul Tank
297ebc7db7 fix(nimble): Updated sscanf usage in examples to work for all versions 2025-04-09 18:27:58 +05:30
Zhang Shuxian
2586e86cec bugfix: Remove the broken link in wifi-expansion.rst 2025-04-09 19:05:07 +08:00
gongyantao
af494b8b4e fix(bt): fixed some issues in bt controller
- add check for Wi-Fi channel
- fix the incorrect unit of duration_min in cpb tx
- recalculate the channel map when afh is enabled
- fix incorrect vendor event count causing an assertion failure
2025-04-09 18:58:44 +08:00
morris
c94014cc3d Merge branch 'fix/flash_encryption_verify_write_etc_v5.4' into 'release/v5.4'
fix(spi_flash): Fix flash encryption write verify (backport v5.4)

See merge request espressif/esp-idf!38269
2025-04-09 17:12:50 +08:00
Alexey Lapshin
6ad902d5be fix(ldgen): extend section name regex to include '_' (e.g.: used by picolibc) 2025-04-09 16:44:25 +08:00
Rahul Tank
5e38aaeb22 Merge branch 'bugfix/handle_missing_unlock_v5.4' into 'release/v5.4'
fix(nimble): Fixed one missing ble_hs_unlock() (v5.4)

See merge request espressif/esp-idf!38259
2025-04-09 13:24:37 +08:00
morris
89e81dfdc9 Merge branch 'fix/i2c_race_condition_etc_v5.4' into 'release/v5.4'
fix(i2c_master): Fix i2c master race condition issue, etc. (backport v5.4)

See merge request espressif/esp-idf!38265
2025-04-09 10:55:54 +08:00
C.S.M
9282eec541 fix(spi_flash): Add suspend check on esp32c6 and esp32h2 for some reason 2025-04-09 10:10:47 +08:00
Kapil Gupta
0cb892d6a2 Merge branch 'feature/github_pull_15073_v5.4' into 'release/v5.4'
feat(wpa_supplicant): Add optimized PSK implementation (v5.4)

See merge request espressif/esp-idf!38104
2025-04-09 00:21:40 +08:00
Kapil Gupta
582c2d8d4c fix(esp_wifi): Flush PMK when EAP config is changed 2025-04-08 17:58:24 +05:30
Kapil Gupta
c2fad24731 fix(esp_wifi): Code cleanup for PR#15550 PR#15551
Closes https://github.com/espressif/esp-idf/pull/15550
Closes https://github.com/espressif/esp-idf/pull/15551
2025-04-08 17:57:27 +05:30
akshat
c6a56d0216 feat(esp_wifi): Add DS parameter in probe requests from STA
Parse the DS IE to get intended channel when softAP rx request,
send probe response only if request is intended for the channel
2025-04-08 16:40:47 +05:30
morris
bfdca51a67 Merge branch 'fix/fix_l2_cache_miss_issue_v5.4' into 'release/v5.4'
cache: fixed l2 cache suspended/frozen but l1cache triggers l2 writeback issue (v5.4)

See merge request espressif/esp-idf!37998
2025-04-08 18:15:16 +08:00
Jiang Jiang Jian
3ee14caf6b Merge branch 'backport/backport_some_code_to_v5.4' into 'release/v5.4'
fix(wifi): fix twt post just one event for multiple flow(backport v5.4)

See merge request espressif/esp-idf!38273
2025-04-08 14:05:17 +08:00
Shu Chen
c0c7023dd8 Merge branch 'feature/add_txrx_frame_dump_debugging_v5.4' into 'release/v5.4'
feat(802.15.4): supported tx/rx frame dumping (v5.4)

See merge request espressif/esp-idf!38234
2025-04-08 11:01:54 +08:00
glmfe
5c76c789f8 fix(tcp_transport): Fix test for socks transport
- Removed out of scope stack acess
2025-04-07 12:09:34 -03:00
Zhang Hai Peng
20910df9d6 feat(ble/bluedroid): Implement BLE channel map reading API
(cherry picked from commit 55043e280a)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-04-07 21:14:23 +08:00
Zhang Hai Peng
d47d3230cd fix(ble/bluedroid): Fix potential uint32_t overflow in BLE btu_start_timer
(cherry picked from commit a9286567f0)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-04-07 21:14:21 +08:00
Zhang Hai Peng
e2c02966d2 fix(ble/bluedrooid): Fixed memory leak issue when deinit the host
(cherry picked from commit 6becf74cbb)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-04-07 21:14:19 +08:00
Zhang Hai Peng
44f3208a49 feat(bluedroid): Support get bt config path
(cherry picked from commit d6bb90b453)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-04-07 21:14:16 +08:00
Zhang Hai Peng
03e87e18f7 fix(ble/bluedroid): Fix missing event reporting in esp_ble_create_sc_oob_data
(cherry picked from commit f291725936)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-04-07 21:14:14 +08:00
Zhang Hai Peng
d7e8cfadca fix(ble/bluedroid): Fixed BLE crash when disable bluedroid host
(cherry picked from commit 9dfa6ab0e9)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-04-07 21:14:12 +08:00
morris
796bac0b74 Merge branch 'fix/jpeg_dma_stuck_v5.4' into 'release/v5.4'
fix(jpeg): use dma2d empty rx desc event to avoid a stuck on bad quality image (backport v5.4)

See merge request espressif/esp-idf!38262
2025-04-07 19:03:50 +08:00
Michael Stoll
4470cf7b49 fix: Force validate when using the default crt bundle 2025-04-07 14:43:15 +05:30
Michael Stoll
8144ed8599 feat: Add domain match to wifi_enterprise example 2025-04-07 14:43:03 +05:30
morris
781712062a Merge branch 'refactor/improve_p4_psram_timing_tuning_point_selection_v5.4' into 'release/v5.4'
mspi: improve p4 psram timing tuning point selection (v5.4)

See merge request espressif/esp-idf!38190
2025-04-07 17:10:38 +08:00
Michael Stoll
134b9ac589 feat(esp_wifi): Implement esp_eap_client_set_domain_match 2025-04-07 14:28:45 +05:30
yinqingzhao
0f07bfdef3 fix(wifi): fix twt post just one event for multiple flow 2025-04-07 16:13:49 +08:00
zhiweijian
33093418f8 feat(ble/bluedroid): report cte_type in periodic adv report if CTE feature is enabled 2025-04-07 16:04:24 +08:00
zhiweijian
15a901fb5e fix(bt/controller): Fixed controller flash only bug if hci-uart is enabled 2025-04-07 16:03:45 +08:00
Island
4e61ce24d6 Merge branch 'feat/support_bluedroid_host_iso_feature_master_v5.4' into 'release/v5.4'
Support bluedroid host new  features (v5.4)

See merge request espressif/esp-idf!38163
2025-04-07 16:01:16 +08:00
Mahavir Jain
6f36eddc48 Merge branch 'contrib/github_pr_15715_v5.4' into 'release/v5.4'
fix(esp_http_client): fix error return when set_header has value==NULL (GitHub PR) (v5.4)

See merge request espressif/esp-idf!38264
2025-04-07 15:29:42 +08:00
C.S.M
04a0c758e7 fix(spi_flash): Return false directly in suspend caps check 2025-04-07 15:22:39 +08:00
C.S.M
5ea148a80c fix(spi_flash): Fix flash encryption write verify,
Closes https://github.com/espressif/esp-idf/issues/15380
2025-04-07 15:22:21 +08:00
Jiang Jiang Jian
ba9b1c46e2 Merge branch 'fix/fix_sleep_reject_on_esp32_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix short duration sleep requests rejected in pd_flash lightsleep(v5.4)

See merge request espressif/esp-idf!38226
2025-04-07 15:20:53 +08:00
C.S.M
c29d6575a1 fix(i2c): Fix i2c customize only read one byte issue 2025-04-07 14:08:23 +08:00
C.S.M
0752abf3c7 fix(i2c_master): Fix the stretch happen cause timeout in probe,
Closes https://github.com/espressif/esp-idf/issues/15589
2025-04-07 14:08:10 +08:00
C.S.M
785e45cfcb fix(i2c): Fix i2c slave auto selection issue,
Closes https://github.com/espressif/esp-idf/issues/15644
2025-04-07 14:07:58 +08:00
C.S.M
e2ce4d256a fix(i2c): Fix the array size of static operation,
Closes https://github.com/espressif/esp-idf/issues/15583
2025-04-07 14:07:45 +08:00
C.S.M
a4ecb6b15c fix(i2c_master): Fix i2c master race condition issue,
Closes https://github.com/espressif/esp-idf/issues/15444
2025-04-07 14:05:32 +08:00
Kapil Gupta
2a0866ac9f fix(ci): Update UT to verify fast psk calculations
Also update some comments
2025-04-07 14:02:48 +08:00
Kapil Gupta
b9f2ca9068 fix(esp_wifi): Add some comments in github PR 15073
Closes https://github.com/espressif/esp-idf/pull/15073
2025-04-07 14:02:48 +08:00
Chien Wong
d3ec99b9cd feat(wpa_supplicant): Add optimized PSK impl
Signed-off-by: Chien Wong <m@xv97.com>
2025-04-07 14:02:48 +08:00
Jiang Jiang Jian
19e864060a Merge branch 'fix/rmii_ref_ckl_v5.4' into 'release/v5.4'
fix(esp_eth): fixed ESP32P4 EMAC REF RMII CLK output mode (v5.4)

See merge request espressif/esp-idf!38039
2025-04-07 13:58:48 +08:00
Jiang Jiang Jian
b809629dba Merge branch 'contrib/github_pr_15637_v5.4' into 'release/v5.4'
fix(esp_eth): Fix order of fields in ETH_ESP32_EMAC_DEFAULT_CONFIG on P4 (GitHub PR) (v5.4)

See merge request espressif/esp-idf!38165
2025-04-07 13:58:32 +08:00
Jiang Jiang Jian
9920b0994c Merge branch 'fix/test_nvs_gen_check_read_only_part_support_v5.4' into 'release/v5.4'
fix: test_nvs_gen_check.py support for read-only NVS partitions (v5.4)

See merge request espressif/esp-idf!37078
2025-04-07 13:57:25 +08:00
Jiang Jiang Jian
5bedbdf8e0 Merge branch 'feat/ff_fs_nofsinfo_kconfig_v5.4' into 'release/v5.4'
feat(fatfs): Add an option to set FF_FS_NOFSINFO value (v5.4)

See merge request espressif/esp-idf!36678
2025-04-07 13:56:54 +08:00
Jiang Jiang Jian
8c68adfbf1 Merge branch 'fix/apptrace_basic_tests_v5.4' into 'release/v5.4'
test(apptrace): run tests from custom OpenOCD class (v5.4)

See merge request espressif/esp-idf!37602
2025-04-07 13:53:21 +08:00
Jiang Jiang Jian
dc68766ea3 Merge branch 'feature/update-openocd-to-v0.12.0-esp32-20250226_v5.4' into 'release/v5.4'
feat(tools): update openocd version to v0.12.0-esp32-20250226 (v5.4)

See merge request espressif/esp-idf!37526
2025-04-07 13:53:05 +08:00
Jiang Jiang Jian
6897a7bf40 Merge branch 'ci/add_test_for_ecos_wifi_enterprise_v54' into 'release/v5.4'
ci(c2/c3): add major eco version tests(v5.4)

See merge request espressif/esp-idf!37808
2025-04-07 13:52:43 +08:00
Jiang Jiang Jian
7ea75e3c58 Merge branch 'bugfix/ci_eth_ip_v5.4' into 'release/v5.4'
iperf fix on SH runners (v5.4)

See merge request espressif/esp-idf!37331
2025-04-07 13:51:38 +08:00
nilesh.kale
27951298ab fix(esp_http_client): Added test case to verify set header functionality
This commit added testcase to verify esp_http_client_set_header
allows header value as NULL. Setting this NULL will delete the header.

Closes https://github.com/espressif/esp-idf/issues/15714
2025-04-07 11:14:13 +05:30
Mathew Harman
bbd57a2204 fix(esp_http_client): fix error return when set_header has value==NULL
Prior to v5.4, headers could be deleted from an HTTP client by calling
esp_http_client_set_header("Header", NULL). This pattern is used by
esp_http_client_set_post_field(NULL, 0), which is the only API usage
that will delete the request body in a persistent connection scenario.
2025-04-07 11:14:13 +05:30
C.S.M
ba3d59c69e fix(jpeg): use dma2d empty rx desc event to avoid a stuck 2025-04-07 13:37:06 +08:00
C.S.M
05d0fdb7a5 feat(dma2d): Add a rx empty event callback 2025-04-07 13:36:57 +08:00
Rahul Tank
3b08b2b82d fix(nimble): Fixed one missing ble_hs_unlock() 2025-04-07 09:39:17 +05:30
Rahul Tank
f8b7c14703 Merge branch 'bugfix/handle_invalid_rd_rem_feat_v5.4' into 'release/v5.4'
fix(nimble): Handle connection posting condition (v5.4)

See merge request espressif/esp-idf!38227
2025-04-07 12:01:02 +08:00
armando
b67b1160e7 fix(cache): fixed l2 cache suspended/frozen but l1cache triggers l2 writeback issue 2025-04-07 11:37:40 +08:00
Jiang Jiang Jian
0d11e40920 Merge branch 'bugfix/pmkid_password_mismatch_v5.4' into 'release/v5.4'
fix(wifi): Fix wrong PMKSA cache entry being used when wifi password is changed (Backport v5.4)

See merge request espressif/esp-idf!38250
2025-04-07 11:14:41 +08:00
armando
71e99e8eaa refactor(mspi): improve p4 timing tuning delayline configurations 2025-04-07 10:14:17 +08:00
armando
98496eca72 refactor(mspi): improved timing tuning max consecutive success points calculation 2025-04-07 10:14:17 +08:00
Sajia
a73c5c0312 fix(wifi): Fix crash when set config is called with changed password
Closes https://github.com/espressif/esp-idf/issues/15584
2025-04-06 15:22:15 +05:30
Sarvesh Bodakhe
f8b1c0976a fix(wifi): Fix wrong PMKSA cache entry being used when wifi password is changed 2025-04-06 15:21:56 +05:30
Rahul Tank
b1a0b0c698 Merge branch 'bugfix/replace_sizeof_with_strlen_v5.4' into 'release/v5.4'
fix(nimble): Replaced incorrect sizeof with strnlen (v5.4)

See merge request espressif/esp-idf!37797
2025-04-04 19:04:19 +08:00
Aditya Patwardhan
cb24473016 Merge branch 'fix/examples_python3.13_ssl_conn_failure_v5.4' into 'release/v5.4'
Change in Python3.13's default ssl context caused SSL connection failure (v5.4)

See merge request espressif/esp-idf!38199
2025-04-04 13:57:16 +08:00
Mahavir Jain
952e0e3bfb Merge branch 'feat/configurable_mbedtls_sha1_v5.4' into 'release/v5.4'
feat(mbedtls): Make mbedtls SHA1 support configurable (v5.4)

See merge request espressif/esp-idf!37980
2025-04-04 12:32:38 +08:00
igor.masar
c9c0e8b63e fix(usb/hal/dwc): Correct host channel number calculation
The hardware field `ghwcfg2.numhstchnl` is zero-based, meaning the actual
number of available host channels is `numhstchnl + 1`. This off-by-one
error caused the USB Host controller to report N-1 channels instead of N,
leading to premature "No more HCD channels available" errors when
connecting multiple devices.

This issue affects ESP32-S2, ESP32-S3, and ESP32-P4.
2025-04-03 23:53:01 +08:00
Aditya Patwardhan
26ffbce8c2 Merge branch 'fix/fix_security_app_readme_v5.4' into 'release/v5.4'
fix(security): Fixed README for security features app (v5.4)

See merge request espressif/esp-idf!38184
2025-04-03 22:38:35 +08:00
Jiang Jiang Jian
d1b0c395c6 Merge branch 'feature/support_sco_coexist_v5.4' into 'release/v5.4'
feat(coex): Support BR/EDR (e)SCO and Wi-Fi coexistence

See merge request espressif/esp-idf!38133
2025-04-03 20:13:03 +08:00
zwx
75abe550a3 feat(802.15.4) add a build CI test for debugging feature 2025-04-03 17:30:50 +08:00
zwx
c72bbe13ba feat(802.15.4): supported tx/rx frame dumping 2025-04-03 17:30:50 +08:00
Martin Vychodil
9df731bf36 Merge branch 'fix/incorrect_console_open_and_close_behaviour_v5.4' into 'release/v5.4'
fix(storage/vfs_console): stop new console opens from overwriting existing fds (v5.4)

See merge request espressif/esp-idf!35267
2025-04-03 17:01:57 +08:00
Marius Vikhammer
6f13ac088f Merge branch 'fix/memory-utils-ptr-executable_v5.4' into 'release/v5.4'
fix(memory-utils): Missing case in esp_ptr_executable logic (backport v5.4)

See merge request espressif/esp-idf!37101
2025-04-03 14:58:36 +08:00
Island
a3cf6b07b7 Merge branch 'bugfix/fixed_c2eco4_ble_crash_issue_5.4' into 'release/v5.4'
fix(ble): fixed a heap assertion issue when enabling BLE for esp32c2 v2.0

See merge request espressif/esp-idf!38213
2025-04-03 14:42:30 +08:00
Rahul Tank
3abd397e67 fix(nimble): Handle connection posting condition 2025-04-03 11:05:57 +05:30
harshal.patil
dcd80b2528 fix(examples): Example CA certs must contain the Key Usage parameter
- Example CA certificates that are used for self-signed client certificates
need to include the Key Usage parameter.
- Python3.13 changed the default context of the SSL context that is
generated using ssl.create_default_context() by enabling the VERIFY_X509_STRICT
flag by default
2025-04-03 10:51:09 +05:30
Rahul Tank
77771f50d5 fix(nimble): Replaced incorrect sizeof with strnlen 2025-04-03 10:22:15 +05:30
wuzhenghui
ddd19eee94 fix(esp_hw_support): fix min sleep time calculation missmatch in powerdown flash decision 2025-04-03 11:51:57 +08:00
Island
dd9dbfccd6 Merge branch 'change/ble_update_lib_20250313_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250313 - Update ESP BLE Controller Lib (v5.4)

See merge request espressif/esp-idf!37822
2025-04-03 11:18:35 +08:00
Marius Vikhammer
7929002754 Merge branch 'fix/memory-utils-unused-var_v5.4' into 'release/v5.4'
fix(esp_hw_support): Unused variables in memory_utils functions (backport v5.4)

See merge request espressif/esp-idf!36351
2025-04-03 10:55:43 +08:00
morris
7e1238de97 Merge branch 'fix/parlio_add_gdma_fifo_reset_v5.4' into 'release/v5.4'
fix(parlio_tx): add clock and fifo reset in disable function (v5.4)

See merge request espressif/esp-idf!36273
2025-04-03 10:27:04 +08:00
morris
ae57289414 Merge branch 'fix/usb-host-device-close-err-give-semaphore_v5.4' into 'release/v5.4'
fix(usb_host): Give semaphore on attempted close of non-opened device (backport v5.4)

See merge request espressif/esp-idf!38151
2025-04-03 10:23:24 +08:00
Shu Chen
0355d741cf Merge branch 'feat/update_ot_upstream_v54' into 'release/v5.4'
feat(openthread): update openthread upstream submodule to support BR DNS resolution (v5.4)

See merge request espressif/esp-idf!38191
2025-04-03 09:52:03 +08:00
Shen Weilong
39acce7c40 fix(ble): fixed a heap assertion issue when enabling BLE for esp32c2 v2.0 2025-04-03 08:42:45 +08:00
Roland Dobai
17a2461297 Merge branch 'fix/linux_std_flags_v5.4' into 'release/v5.4'
fix(build): don't call enable_language() before project() (v5.4)

See merge request espressif/esp-idf!37880
2025-04-02 23:42:58 +08:00
baohongde
12117c66d4 feat(coex): Support BR/EDR (e)SCO and Wi-Fi coexistence 2025-04-02 19:25:53 +08:00
Zhou Xiao
e3e91deca2 fix(ble): fix ble log init failure mem leak for ESP32-C3 2025-04-02 15:18:22 +08:00
Shen Weilong
e1920ec42f feat(ble/controller): Added memory boundary check for ESP32-C6/C5/H2/C2/C61 2025-04-02 15:18:18 +08:00
Geng Yuchao
0645197a46 fix(ble): Add link requires esp_phy for ble. 2025-04-02 15:18:18 +08:00
Zhou Xiao
94480cc0c0 feat(ble): support ble log simple output via SPI interface 2025-04-02 15:18:18 +08:00
Zhou Xiao
18725220d4 fix(ble): fix ble log init failure mem leak for ESP32 2025-04-02 15:18:18 +08:00
cjin
1848a85f99 fix(ble): remove macro in lpclk src get api on ESP32-C6 2025-04-02 15:18:18 +08:00
cjin
15d421c060 fix(ble): remove macro in lpclk src get api on ESP32-C5 2025-04-02 15:18:18 +08:00
zwl
c93081cec4 feat(ble): add enhanced connect function on ESP32-C2 2025-04-02 15:18:18 +08:00
Zhou Xiao
b7bffc84f9 feat(ble): support ble log simple output via SPI interface for ESP32-C6 2025-04-02 15:18:17 +08:00
Zhou Xiao
8e036761ed feat(ble): support ble log simple output via SPI interface for ESP32-C5 2025-04-02 15:18:17 +08:00
Zhou Xiao
9a3b5e8393 feat(ble): support ble log simple output via SPI interface for ESP32-H2 2025-04-02 15:18:17 +08:00
Zhou Xiao
8eb051cb30 feat(ble): support ble log simple output via SPI interface for ESP32-C2 2025-04-02 15:18:17 +08:00
Zhou Xiao
cda345ffc7 fix(ble): add feed wdts during ble log dump for ESP32-C2 2025-04-02 15:18:17 +08:00
Zhou Xiao
3051078939 fix(ble): fix flushout and sync issues 2025-04-02 15:18:17 +08:00
zhanghaipeng
e323d22353 fix(ble/bluedroid): Added SPI output support for Bluedroid host log 2025-04-02 15:18:17 +08:00
zhanghaipeng
231bf742b0 fix(ble/bluedroid): Support SPI log output options for HCI 2025-04-02 15:18:17 +08:00
Zhou Xiao
41a33fcd46 feat(ble): add printf and write with timestamp interface for ble log spi out
(cherry picked from commit f8efa4cd80)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-04-02 15:18:17 +08:00
Roland Dobai
58210d69b2 Merge branch 'fix/remove-unused-from-gdbinit_cmake_v5.4' into 'release/v5.4'
fix(tools): remove unused variables in gdbinit.cmake (v5.4)

See merge request espressif/esp-idf!38008
2025-04-02 15:14:37 +08:00
Island
6f0255713e Merge branch 'feat/support_blecrt_359_v5.4' into 'release/v5.4'
Support BLE vendor hci set rx sensie and max gain on esp32c3 (v5.4)

See merge request espressif/esp-idf!38130
2025-04-02 15:06:58 +08:00
Tan Yan Quan
41e9933e2f feat(openthread): increase CI timeout for dns CLI commands 2025-04-02 14:59:31 +08:00
Tan Yan Quan
d6b6583995 feat(openthread): update thread-lib to support BR DNS resolution 2025-04-02 14:59:11 +08:00
Tan Yan Quan
30ffbfcf6b feat(openthread): revert to OT upstream main branch 2025-04-02 14:49:43 +08:00
Tan Yan Quan
17f206400d fix(openthread): change include statement to updated upstream path 2025-04-02 14:49:37 +08:00
Tan Yan Quan
8063f82219 fix(openthread): update openthread upstream to support BR DNS resolution 2025-04-02 14:49:29 +08:00
Marius Vikhammer
d2eb653916 Merge branch 'fix/esp-log-put-function-in-iram_v5.4' into 'release/v5.4'
fix(log): Modified linker script to move functions from flash to iram (backport v5.4)

See merge request espressif/esp-idf!36817
2025-04-02 14:44:48 +08:00
Guillaume Souchere
2bdfba3c30 fix(memory-utils): Missing case in esp_ptr_executable logic
esp_ptr_executable does not consider that the PSRAM and FLASH
memory mapping are not always matching.

Added a "pointer is in PSRAM" specific check in the logic to
fix the issue.
2025-04-02 08:44:22 +02:00
Guillaume Souchere
e82a248593 fix(esp_hw_support): Unused variables in memory_utils functions 2025-04-02 08:43:37 +02:00
Marius Vikhammer
58c5aa2591 Merge branch 'fix/memory-utils-esp_ptr_in_rtc_dram_fast_v5.4' into 'release/v5.4'
fix(esp_hw_support): esp_ptr_in_rtc_iram_fast check to return false (backport v5.4)

See merge request espressif/esp-idf!36933
2025-04-02 14:33:43 +08:00
Aditya Patwardhan
f7bce692ab fix(security): Fixed README for security features app 2025-04-02 10:18:43 +05:30
morris
7fe190313c Merge branch 'feat/p4_adc_calibration' into 'release/v5.4'
Feature/esp32 p4 adc calibration (backport v5.4)

See merge request espressif/esp-idf!36179
2025-04-02 11:04:46 +08:00
Island
cebb126055 Merge branch 'feat/support_ble_vendor_hci_event_report_v5.4' into 'release/v5.4'
feat(bt/bluedroid): Support BLE vendor hci event reporting (v5.4)

See merge request espressif/esp-idf!37354
2025-04-02 10:44:09 +08:00
chenjianhua
e2bc4fc39f fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(566c8e3)
- Support BLE vendor hci set RX sensitivity and AGC gain command
- Fixed enhanced TX power setting and getting for legacy adv
- Fixed BLE assert lld_con.c 2387
- Fixed compatibility issues during the encryption procedure
- Support BLE vendor hci enable CCA command
- Added BLE controller debug log trace
- Added BLE controller log module
2025-04-02 10:38:40 +08:00
zhiweijian
c06b78595d fix(ble/bluedroid): move setting host feature API to GAP 2025-04-02 10:31:42 +08:00
zhiweijian
0e6e23ec53 feat(bt/bluedroid): Support ble bluedroid host connection subrating feature 2025-04-02 10:31:33 +08:00
zhiweijian
5425ed8eef feat(bt/bluedroid): Support ble bluedroid host power control feature 2025-04-02 10:31:24 +08:00
zhiweijian
b47a6003a1 feat(bt/bluedroid): Support BLE CTE in bluedroid host 2025-04-02 10:31:14 +08:00
zhiweijian
e3bf21b31a feat(bt/bluedroid): Support BLE iso in bluedroid host 2025-04-02 10:31:04 +08:00
morris
ff8c836be3 Merge branch 'feat/allow_setting_rmt_group_prescale_v5.4' into 'release/v5.4'
refactor(rmt): set group clock prescale dynamically (v5.4)

See merge request espressif/esp-idf!36737
2025-04-02 10:15:16 +08:00
morris
13baf981ca Merge branch 'bugfix/sdmmc_high_prio_timeout_v5.4' into 'release/v5.4'
fix(sdmmc): move DMA descriptor refilling into the ISR (v5.4)

See merge request espressif/esp-idf!37694
2025-04-02 10:13:22 +08:00
Sergei Silnov
891f7eeef2 Merge branch 'ci/update_esp-env-v5.4_to_ubuntu_24.04' into 'release/v5.4'
5.4: Update ubuntu base image for esp-env-v5.4 to 24.04

See merge request espressif/esp-idf!37872
2025-04-02 02:30:09 +08:00
Island
b641411c06 Merge branch 'feat/add_save_debug_context_250226_v5.4' into 'release/v5.4'
Feat/add save debug context 250226 (v5.4)

See merge request espressif/esp-idf!37297
2025-04-01 19:33:51 +08:00
Shu Chen
f481174cbd Merge branch 'feat/add_config_to_set_addrfamily_v5.4' into 'release/v5.4'
feat(tcp_transport): add an api to configure the addr family (v5.4)

See merge request espressif/esp-idf!37911
2025-04-01 19:32:14 +08:00
morris
a125701444 Merge branch 'bugfix/uart_async_rxtxtasks_example_stack_overflow_v5.4' into 'release/v5.4'
fix(uart): enlarged task stack size for uart_async_rxtxtasks example (v5.4)

See merge request espressif/esp-idf!37590
2025-04-01 18:48:00 +08:00
Ondrej Kosta
ac29bd7ca4 ci(esp_eth): enabled Ethernet target tests 2025-04-01 12:45:59 +02:00
Jonathan Swoboda
3581d9d5a9 fix(esp_eth): Fix order of fields in ETH_ESP32_EMAC_DEFAULT_CONFIG on P4 2025-04-01 07:24:19 +00:00
chenjianhua
352ee491db feat(bt/bluedroid): Support BLE vendor hci event reporting 2025-04-01 15:12:28 +08:00
Island
f6dc2b658d Merge branch 'feat/optimize_hci_data_recv_process_v5.4' into 'release/v5.4'
Feat/optimize hci data recv process (v5.4)

See merge request espressif/esp-idf!37834
2025-04-01 15:12:28 +08:00
chenjianhua
189e40bc7b feat(bt/bluedroid): Support BLE setting vendor event mask 2025-04-01 15:12:28 +08:00
Kapil Gupta
2863fe328c fix(esp_wifi): Add alternate SHA1 APIs in WiFi
Add alternate SHA1 APIs to handle cases when
`CONFIG_MBEDTLS_SHA1_C` is disabled.
2025-04-01 12:40:55 +05:30
harshal.patil
96f48cd1cf feat(mbedtls): Make mbedtls SHA1 support configurable 2025-04-01 12:40:55 +05:30
gaoxu
221da3fbb4 docs(adc): add ADC calibration docs on ESP32P4 2025-04-01 15:08:04 +08:00
gaoxu
d74f12dea7 feat(adc): support ADC calibration on ESP32P4 2025-04-01 15:07:56 +08:00
gaoxu
b227da9b2b ci(adc): enable P4 ADC test and correct ADC performance thresh 2025-04-01 15:05:36 +08:00
gaoxu
f380cb6a4d fix(adc): fix P4 adc continuous mode stop early 2025-04-01 15:05:34 +08:00
gaoxu
3e9c1ae62b fix(adc): fix adc1 error after bootloader random 2025-04-01 15:05:31 +08:00
Rahul Tank
9d45436a5f Merge branch 'feat/added_change_to_ble_spp_client_v5.4' into 'release/v5.4'
feat(nimble): Allow BLE SPP Client to subscribe to the server (v5.4)

See merge request espressif/esp-idf!37455
2025-04-01 14:58:52 +08:00
Marius Vikhammer
8c9946fe9b Merge branch 'feat/enable_freertos_smp_for_c5_c61_v5.4' into 'release/v5.4'
feat(freertos): Enable Amazon FreeRTOS SMP kernel for esp32c5 and esp32c61 (v5.4)

See merge request espressif/esp-idf!38073
2025-04-01 14:56:32 +08:00
Marius Vikhammer
a218e3f553 Merge branch 'fix/ringbuf_allow_split_receive_crash_v5.4' into 'release/v5.4'
fix(ringbuf): xRingbufferReceive() crashes for allow-split buffers (v5.4)

See merge request espressif/esp-idf!37922
2025-04-01 14:55:36 +08:00
Marius Vikhammer
4354c3080a Merge branch 'fix/lp_uart_flush_wait_for_idle_v5.4' into 'release/v5.4'
fix(lp_uart): Update the `lp_core_uart_tx_flush()` API to wait for UART Tx idle state (v5.4)

See merge request espressif/esp-idf!37473
2025-04-01 14:55:18 +08:00
Marius Vikhammer
592c6312b6 Merge branch 'bugfix/adc_work_mode_for_ulp_riscv_v5.4' into 'release/v5.4'
fix(ulp-riscv): Fixed ADC oneshot initialization for ULP RISC-V (v5.4)

See merge request espressif/esp-idf!37372
2025-04-01 14:54:56 +08:00
Wang Meng Yang
0cecb7bcf3 Merge branch 'bug/xtensa_cpu1_sys_lockup_v5.4' into 'release/v5.4'
fix(panic_handler): Updated panic handler to use RTC WDT (v5.4)

See merge request espressif/esp-idf!37112
2025-04-01 14:51:18 +08:00
Rahul Tank
078a29e351 Merge branch 'fix/periodic_adv_example_v5.4' into 'release/v5.4'
fix(nimble):Fix conversion for min-max itvl of periodic adv param (v5.4)

See merge request espressif/esp-idf!38091
2025-04-01 14:49:42 +08:00
Ondrej Kosta
300adf0045 fix(esp_eth): fixed emac_ll_pause_frame_enable for ESP32P4 2025-04-01 08:32:09 +02:00
Ondrej Kosta
e544d57179 fix(esp_eth): fixed ESP32P4 EMAC REF RMII CLK output mode
fixed units returned and used by periph_rtc_mpll_freq_set function
2025-04-01 08:32:09 +02:00
Rahul Tank
4d749ee5b0 Merge branch 'fix/ble_issue_10032025_v5.4' into 'release/v5.4'
fix(nimble): Fix some nimble issues ble_issue_10032025_v5.4

See merge request espressif/esp-idf!37625
2025-04-01 12:47:00 +08:00
Shu Chen
8fa7bf6c47 Merge branch 'fix/csl_rx_off_when_idle_v5.4' into 'release/v5.4'
fix(openthread): turn off rx for SSED running CSL during idle (v5.4)

See merge request espressif/esp-idf!37992
2025-04-01 11:30:38 +08:00
Shu Chen
f122d1113c Merge branch 'bugfix/fix_ot_ci_cases_avahi_service_issue_v5.4' into 'release/v5.4'
feat(openthread): fix ci avahi service cases issue (v5.4)

See merge request espressif/esp-idf!37861
2025-04-01 11:29:14 +08:00
Shu Chen
667b2431ee Merge branch 'fix/154_txpower_set_api_v5.4' into 'release/v5.4'
fix(802.15.4): fix the behavior of the `esp_ieee802154_set_txpower` (v5.4)

See merge request espressif/esp-idf!37736
2025-04-01 11:28:56 +08:00
Shu Chen
89c73fc502 Merge branch 'support/ieee802154_set_txon_delay_using_phylib_impl_v5.4' into 'release/v5.4'
feat(802.15.4): configure tx on delay using phylib implementation (v5.4)

See merge request espressif/esp-idf!37656
2025-04-01 11:28:47 +08:00
morris
beee8e047e Merge branch 'contrib/github_pr_15499_v5.4' into 'release/v5.4'
Add missing break statements to usb_serial_jtag_ll_phy_select (GitHub PR) (v5.4)

See merge request espressif/esp-idf!38124
2025-04-01 11:14:52 +08:00
morris
57a83359d5 Merge branch 'bugfix/clear_ledc_gamma_ram_v5.4' into 'release/v5.4'
fix(ledc): left-off gamma ram registers should be cleared (v5.4)

See merge request espressif/esp-idf!37572
2025-04-01 11:13:32 +08:00
Chen Jichang
da4c0a3a8d fix(parlio): fix non-free running test case 2025-04-01 11:11:44 +08:00
Chen Jichang
4e7c593098 fix(parlio): fix rempty interrupt during resetting fifo
Move the fifo reset to after disabling the tx core clock.
And add external non-free running clock src test.
2025-04-01 11:11:44 +08:00
Chen Jichang
21792d572e fix(parlio_tx): add clock and fifo reset in disable function 2025-04-01 11:11:44 +08:00
morris
8bce1430ee Merge branch 'bugfix/lp_uart_baudrate_limitation_v5.4' into 'release/v5.4'
fix(uart): LP UART does not have the pre-divider for its clock source (v5.4)

See merge request espressif/esp-idf!37594
2025-04-01 10:35:29 +08:00
Renze Nicolai
e743875cd8 fix: add missing break statements to usb_serial_jtag_ll_phy_select,
Closes https://github.com/espressif/esp-idf/pull/15499
2025-04-01 10:09:47 +08:00
morris
46685f1dfd Merge branch 'docs/update_translation_for_nvs_bootloader_v5.4' into 'release/v5.4'
docs: Provide CN translation for nvs bootloader and fix broken link (v5.4)

See merge request espressif/esp-idf!37445
2025-04-01 10:03:21 +08:00
morris
321fd07663 Merge branch 'docs/add_note_about_twai_instance_install_v5.4' into 'release/v5.4'
docs: Add a note about TWAI multiple instances install (v5.4)

See merge request espressif/esp-idf!37965
2025-04-01 10:03:02 +08:00
morris
80be2e9dac Merge branch 'fix/usb_host_docs_host_num_chan_reference_backport_v5.4' into 'release/v5.4'
fix(usb_host): Fixing reference to OTG_NUM_HOST_CHAN in docs backport to v5.4

See merge request espressif/esp-idf!37384
2025-04-01 10:02:31 +08:00
morris
373f508a99 Merge branch 'update_usb_jtag_doc_v5.4' into 'release/v5.4'
docs(jtag): add esp32p4 usb jtag pin numbers (v5.4)

See merge request espressif/esp-idf!37241
2025-04-01 10:01:53 +08:00
morris
3076186e8f Merge branch 'fix/pr_15513_psram_bss_noinit_calc_issue_v5.4' into 'release/v5.4'
psram: correct .bss and .noinit vaddr calculation (v5.4)

See merge request espressif/esp-idf!37664
2025-04-01 10:00:56 +08:00
morris
fba83778cb Merge branch 'bugfix/ledc_fade_stop_race_condition_v5.4' into 'release/v5.4'
fix(ledc): fix race condition in ledc_fade_stop causing assert failure (v5.4)

See merge request espressif/esp-idf!38080
2025-04-01 09:59:31 +08:00
morris
62ace4d687 Merge branch 'fix/spi_master_halt_using_rc_fast_v5.4' into 'release/v5.4'
fix(spi_master): fix spi halt when remove device who using rc_fast (v5.4)

See merge request espressif/esp-idf!37002
2025-04-01 09:58:50 +08:00
morris
0e3cdc3b75 Merge branch 'feat/update_pcnt_reg_on_h2_eco5_v5.4' into 'release/v5.4'
feat(pcnt): update pcnt reg on h2 eco5 (v5.4)

See merge request espressif/esp-idf!38117
2025-04-01 09:54:51 +08:00
weiyuhan
6fe81dfc1b docs(ble): Updated the Bluetooth SIG Qualification information for ESP32C6 2025-04-01 09:33:05 +08:00
Wei Yu Han
10f7a7b8b7 Updated BLE feature status
(cherry picked from commit 6a584e9698)

Co-authored-by: weiyuhan <weiyuhan@espressif.com>
2025-04-01 09:33:05 +08:00
Chen Jian Hua
45400a78d0 feat(bt/bluedroid): Added BLE eddystone sender example
(cherry picked from commit 06366353d8)

Co-authored-by: zhangbowen <zhangbowen@espressif.com>
2025-04-01 09:30:56 +08:00
Wang Meng Yang
74d5769159 Merge branch 'feat/add_sdk_config_for_sdp_size_option_v5.4' into 'release/v5.4'
feat(bt): Implement SDK Config SDP Size Options (backport v5.4)

See merge request espressif/esp-idf!37209
2025-04-01 09:08:00 +08:00
igor.masar
2e8a928ee7 fix(usb_host): Fix return code and description
Changed error code from ESP_ERR_INVALID_STATE to ESP_ERR_NOT_FOUND
when the client never opened the device.
Updated function documentation to correctly reflect return values.
2025-03-31 23:44:27 +02:00
Myk Melez
71d098ed63 fix(usb_host): Give semaphore on attempted close of non-opened device
If you call *usb_host_device_close()* for a device that isn't open, the function exits early,
without giving back the semaphore it took, which causes any other call that tries to take
that semaphore to hang indefinitely.

Strangely, there's redundant handling of this condition, with two checks in a row that both handle
the case where `_check_client_opened_device(client_obj, dev_addr)` returns `false`:

```c
    HOST_CHECK_FROM_CRIT(_check_client_opened_device(client_obj, dev_addr), ESP_ERR_NOT_FOUND);
    if (!_check_client_opened_device(client_obj, dev_addr)) {
        // Client never opened this device
        ret = ESP_ERR_INVALID_STATE;
        HOST_EXIT_CRITICAL();
        goto exit;
    }
…
exit:
    xSemaphoreGive(p_host_lib_obj->constant.mux_lock);
    return ret;
```

The first line is the one that exits early, as HOST_CHECK_FROM_CRIT returns its second parameter
if its first parameter is false, without giving back the semaphore (although it does exit
the critical section).

The subsequent block handles the exact same case, except that it ensures the semaphore is given
back before returning. Currently, this block is never reached.

Perhaps the first check was added, then someone noticed the issue and added the second check,
but they forgot to remove the first one.

In any case, this PR removes the first check, so the second check can properly handle this case
by giving back the semaphore before returning.

This bug appears to have been present in the initial commit of the USB Host library to the ESP-IDF
repo: accbaee57c

Of course, if you never try to close a non-opened device, then you won't encounter it!
Unfortunately, I have some code that tried to do that, which is how I found the issue.
2025-03-31 23:44:27 +02:00
Mahavir Jain
710ed9bcad Merge branch 'contrib/github_pr_15291_v5.4' into 'release/v5.4'
fix(esp_http_client): Fix invalid content length header (GitHub PR) (v5.4)

See merge request espressif/esp-idf!37540
2025-03-31 21:32:49 +08:00
Mahavir Jain
54283c9567 Merge branch 'feature/add_support_for_ota_resumption' into 'release/v5.4'
feat(app_update): Introduced API for managing OTA resumption scenarios (v5.4)

See merge request espressif/esp-idf!37194
2025-03-31 21:32:14 +08:00
Mahavir Jain
a33851c9db Merge branch 'fix/incorrect_calculation_of_used_xip_pages_v5.4' into 'release/v5.4'
fix(esp_psram): Fix incorrect calculation of used XIP PSRAM pages (v5.4)

See merge request espressif/esp-idf!37495
2025-03-31 21:31:59 +08:00
Jiang Jiang Jian
1113c7183d Merge branch 'doc/add_wakeup_source_usage_precautions_v5.4' into 'release/v5.4'
change(doc): added more usage notes & warings about PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP (v5.4)

See merge request espressif/esp-idf!37391
2025-03-31 17:33:32 +08:00
Wang Meng Yang
75721348d8 Merge branch 'bugfix/sec_service_record_conn_fail_v5.4' into 'release/v5.4'
fix(bt/bluedroid): fix the issue of connection failure when initializing multiple profiles(v5.4)

See merge request espressif/esp-idf!38074
2025-03-31 17:15:22 +08:00
Wang Meng Yang
8f2b6dfe95 Merge branch 'bugfix/fix_esp32_bt_disable_crash_v5.4' into 'release/v5.4'
fix(bt): Fix controller disable cause iwdt timeout on esp32 (v5.4)

See merge request espressif/esp-idf!37772
2025-03-31 17:14:52 +08:00
Wang Meng Yang
b1a3813698 Merge branch 'bugfix/fix_hid_reconnect_issue_v5.4' into 'release/v5.4'
feat(bt/bluedroid): Add Kconfig option to keep device bonding info when HID unplugging (v5.4)

See merge request espressif/esp-idf!37181
2025-03-31 17:14:40 +08:00
Wang Meng Yang
381379354d Merge branch 'bugfix/spp_mem_leak_v5.4' into 'release/v5.4'
fix(bt/bluedroid): fixed memory leaks in SPP callback mode (v5.4)

See merge request espressif/esp-idf!37385
2025-03-31 17:14:12 +08:00
Wang Meng Yang
b1659a5cd1 Merge branch 'bugfix/spp_free_server_slot_err_v5.4' into 'release/v5.4'
fix(bt/bluedroid): Fixed freeing spp server memory when disconnected(v5.4)

See merge request espressif/esp-idf!37608
2025-03-31 17:13:50 +08:00
Wang Meng Yang
d6a436c97a Merge branch 'bugfix/err_disc_state_changed_evt_v5.4' into 'release/v5.4'
fix(bt/bluedroid): fixed other events being reported when disconnected(v5.4)

See merge request espressif/esp-idf!37936
2025-03-31 17:13:48 +08:00
Island
4af23443e0 Merge branch 'feat/ble_read_long_value_v5.4' into 'release/v5.4'
feat(ble/bluedroid): Add Read Long Characteristic Values example (v5.4)

See merge request espressif/esp-idf!37489
2025-03-31 17:10:03 +08:00
Island
3fbc2b7bce Merge branch 'feat/optimize_ble_config_reduce_bin_v5.4' into 'release/v5.4'
Feat/optimize bluedroid host config and reduce bin size (v5.4)

See merge request espressif/esp-idf!37261
2025-03-31 17:09:50 +08:00
Island
55352b6b62 Merge branch 'bugfix/fix_ble_kconfig_v5.4' into 'release/v5.4'
fix(ble/controller): Fix BLE Kconfig on ESP32 to avoid unexpected behavior (v5.4)

See merge request espressif/esp-idf!37422
2025-03-31 17:08:42 +08:00
Island
08d2987db4 Merge branch 'bugfix/fix_ble_report_len_v5.4' into 'release/v5.4'
fix(ble/bluedroid): Fix adv data and scan rsp data not reported together in BLE active scan (v5.4)

See merge request espressif/esp-idf!37203
2025-03-31 17:08:30 +08:00
morris
21d470dd26 Merge branch 'fix/i2s_iram_safe_issue_while_use_psram_v5.4' into 'release/v5.4'
fix(i2s): fixed failure when dma is iram_safe but i2s not (v5.4)

See merge request espressif/esp-idf!38003
2025-03-31 17:07:43 +08:00
morris
70ab1ccdd0 Merge branch 'bugfix/ppa_srm_scale_frag_yuv420_v5.4' into 'release/v5.4'
fix(ppa): fix ppa srm potentially get blocked when scaling to YUV420 (v5.4)

See merge request espressif/esp-idf!37592
2025-03-31 17:05:23 +08:00
morris
8d446396bf Merge branch 'fix/jpeg_decoder_collective_backport_v5.4' into 'release/v5.4'
fix(jpeg_decoder): JPEG Decoder collective backport to v5.4

See merge request espressif/esp-idf!37509
2025-03-31 16:53:25 +08:00
morris
67a6fbc72e Merge branch 'fix/usb_phy_pull_override_backport_v5.4' into 'release/v5.4'
fix(usb_phy): Removed pad pull override config for Full-speed (backport to v5.4)

See merge request espressif/esp-idf!36776
2025-03-31 16:50:37 +08:00
morris
de3964a9c0 Merge branch 'bugfix/adc_oneshot_error_after_continuous_v5.4' into 'release/v5.4'
fix(adc): fix adc oneshot error after continuous v5.4

See merge request espressif/esp-idf!37143
2025-03-31 16:47:34 +08:00
morris
c3b4d5a895 Merge branch 'fix/rmt_lim_thres_incorrect_v5.4' into 'release/v5.4'
fix(rmt): fix the received symbols issue (v5.4)

See merge request espressif/esp-idf!37899
2025-03-31 16:45:28 +08:00
morris
74ec3b3c7f Merge branch 'docs/update_i2c_static_v5.4' into 'release/v5.4'
docs: Update static for i2c.rst (v5.4)

See merge request espressif/esp-idf!37764
2025-03-31 16:44:51 +08:00
morris
e29346014f Merge branch 'feat/add_temperature_calib_v5.4' into 'release/v5.4'
feat(temperature_sensor): Add temperature sensor calibration support (backport v5.4)

See merge request espressif/esp-idf!37311
2025-03-31 16:43:31 +08:00
morris
a8e166ec07 Merge branch 'feat/unilc_psram_s3_v5.4' into 'release/v5.4'
psram: supported UnilC octal psram on s3 (v5.4)

See merge request espressif/esp-idf!37859
2025-03-31 16:43:01 +08:00
morris
70e8afb9a1 Merge branch 'fix/fix_cam_iram_safe_compile_error_v5.4' into 'release/v5.4'
cam: fix cam iram safe compile error (v5.4)

See merge request espressif/esp-idf!37606
2025-03-31 16:42:44 +08:00
morris
2dd1f03b0d Merge branch 'bugfix/spi_lcd_dc_io_setup_v5.4' into 'release/v5.4'
fix(lcd): DC signal shouldn't affect the input path of the GPIO (v5.4)

See merge request espressif/esp-idf!37449
2025-03-31 16:40:17 +08:00
morris
7c7c96e815 Merge branch 'refactor/spi_remove_unnecessary_dependency_v5.4' into 'release/v5.4'
fix(spi): removed PERIPH_CTRL_FUNC_IN_IRAM dependency (v5.4)

See merge request espressif/esp-idf!37563
2025-03-31 16:39:13 +08:00
morris
f74b338539 Merge branch 'bugfix/missing_kconfig_definition_v5.4' into 'release/v5.4'
fix(i2c): add Kconfig to skip driver conflict check (v5.4)

See merge request espressif/esp-idf!37761
2025-03-31 16:39:04 +08:00
morris
ff74f67de4 Merge branch 'bugfix/usj_wrong_return_value_v5.4' into 'release/v5.4'
fix(usb_serial_jtag): wrong return value in usb_serial_jtag_write_bytes (v5.4)

See merge request espressif/esp-idf!37969
2025-03-31 16:38:22 +08:00
morris
2d582fec60 Merge branch 'refactor/gptimer_isr_logs_opt_int_v5.4' into 'release/v5.4'
feat(gptimer): make start and stop function idempotent (v5.4)

See merge request espressif/esp-idf!37248
2025-03-31 16:36:46 +08:00
morris
ddd8a5d348 Merge branch 'bugfix/rmt_simple_encoder_example_v5.4' into 'release/v5.4'
fix(example): wrong ws2812 reset duration (v5.4)

See merge request espressif/esp-idf!37466
2025-03-31 16:36:08 +08:00
morris
b59ecd5e3d Merge branch 'feat/enable_l2mem_burst_buffer_mode_v5.4' into 'release/v5.4'
improve AXI-ICM QoS function (v5.4)

See merge request espressif/esp-idf!37468
2025-03-31 16:35:49 +08:00
morris
3d650abcba Merge branch 'feat/can_bypass_buffer_align_check_v5.4' into 'release/v5.4'
feat(gdma): allow bypass the alignment check in the link driver (v5.4)

See merge request espressif/esp-idf!37423
2025-03-31 16:21:25 +08:00
Roland Dobai
13bc9ceec0 Merge branch 'change/move_deprecated_kconfig_checker_v5.4' into 'release/v5.4'
change: move check_deprecated_configs.py logic to esp-idf-kconfig (v5.4)

See merge request espressif/esp-idf!37405
2025-03-31 16:10:44 +08:00
Roland Dobai
215d90a87a Merge branch 'fix/fix_kconfig_files_v5.4' into 'release/v5.4'
fix(kconfig): Fix issues with Kconfig files (v5.4)

See merge request espressif/esp-idf!37575
2025-03-31 16:10:25 +08:00
Roland Dobai
43b42c6dfd Merge branch 'fix/extractall_deprecation_v5.4' into 'release/v5.4'
fix(idf_tools): Patch extractall() deprecation warning (v5.4)

See merge request espressif/esp-idf!37883
2025-03-31 16:10:08 +08:00
Roland Dobai
916d1d30a7 Merge branch 'fix/install_input_validation_v5.4' into 'release/v5.4'
fix(idf_tools): Validate input features (v5.4)

See merge request espressif/esp-idf!37889
2025-03-31 16:08:58 +08:00
Roland Dobai
6d4faa0956 Merge branch 'feat/deactivate_idf_env_every_run_v5.4' into 'release/v5.4'
feat(tools): Deactivate current ESP-IDF environment with every export run (v5.4)

See merge request espressif/esp-idf!38026
2025-03-31 16:08:39 +08:00
Roland Dobai
487b26a72e Merge branch 'fix/check_python_dependencies_v5.4' into 'release/v5.4'
fix(tools): handle packages with dots in their names during dependency checks (v5.4)

See merge request espressif/esp-idf!38062
2025-03-31 16:08:21 +08:00
Frantisek Hrbata
a30e3051fb fix(build): don't call enable_language() before project()
For the Linux target, we currently attempt to fallback to older C/CXX
lagnuage standards in the __build_set_lang_version() function. The
language standard support is checked using CMake's language-specific
functions, such as check_c_compiler_flag(). These functions require the
language to be enabled[1] in CMake beforehand, which is done by calling
project() or by enabling the languages later with enable_language(). At
present, we use enable_language() to enable C and CXX languages in
CMake, allowing us to set the standard early, before invoking project().
However, newer CMake versions (>3.29) issue a warning[2] if
enable_language() is called before project(), as noted in CMP0165[3].

It should generally be acceptable to call __build_set_lang_version()
after __project(), but doing so would alter the behavior of the
COMPILE_OPTIONS also for non-Linux targets. Currently, users can
add to COMPILE_OPTIONS even before calling project() in the project's
CMakeLists.txt and the options will be in the desired order. In other
words, appending to COMPILE_OPTIONS can occur either before or after
calling project() in the project's CMakeLists.txt, with the outcome
remaining consistent. This means the user's settings will appear later
and take priority. However, if __build_set_lang_version() is called
after __project(), the user's COMPILE_OPTIONS settings would be
overridden if set before calling project(). Our documentation[4] explicitly
states that COMPILE_OPTIONS and similar properties should be modified
using idf_build_set_property() after calling project() to prevent
default values from overwriting them.

Even with this guidance, some existing components that modify
COMPILE_OPTIONS before invoking project() might be impacted by this
change. Therefore, separate the language standard settings for non-Linux
and Linux targets. For non-Linux targets, these settings are applied in
__build_set_default_build_specifications(), maintaining the current
behavior. For the Linux target, the language standard is set with
__linux_build_set_lang_version() after calling __project(), ensuring the
languages are already enabled in CMake and no warning is issued. Since the Linux
target is still in preview, this approach should be acceptable,
especially with the existing documentation[4].

Closes https://github.com/espressif/esp-idf/issues/15488

[1] https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#languages
[2] https://gitlab.kitware.com/cmake/cmake/-/merge_requests/9396
[3] https://cmake.org/cmake/help/latest/policy/CMP0165.html#policy:CMP0165
[4] https://docs.espressif.com/projects/esp-idf/en/v5.4/esp32/api-guides/
    build-system.html#overriding-default-build-specifications

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2025-03-31 16:06:06 +08:00
Chen Jichang
51cbe9291b fix(pcnt): remove the gpi0_reset_pin function 2025-03-30 13:48:02 +08:00
Chen Jichang
5a6e4760d4 fix(pcnt): update pcnt_reg on esp32h2 eco5 2025-03-30 13:48:01 +08:00
Peter Macko
a71141a250 ci: Update esp-env-v5.4 to Ubuntu 24.04 and handle related issues
- Allow test_pytest_linux failures
- Allow test_transport_on_host failures
- Fix deprecated C++ syntax by removing unused volatile variable in nvs_page_test
- Add x509_crt_bundle.S.o GNU-stack ld warning to ignore list
2025-03-28 15:59:44 +01:00
Abhinav Kudnar
a441421b2c fix(nimble): Fix conversion for min-max itvl of periodic adv param 2025-03-28 14:19:07 +08:00
xiongweichao
34e6333dd3 fix(bt/bluedroid): fix the issue of connection failure when initializing multiple profiles
- Due to the number of service security records exceeding the maximum value, the connection failed
2025-03-28 08:34:00 +08:00
xiongweichao
b48c152ca6 fix(bt/bluedroid): Fixed freeing spp server memory when disconnected 2025-03-28 08:20:01 +08:00
linruihao
e3bb3216df fix(bt): Fix controller disable cause iwdt timeout on esp32 2025-03-28 08:17:24 +08:00
Michael (XIAO Xufeng)
2f7dcd862a Merge branch 'update/version_5_4_1' into 'release/v5.4'
Update version to 5.4.1

See merge request espressif/esp-idf!38067
2025-03-28 02:04:54 +08:00
Song Ruo Jing
ac883027c3 fix(ledc): fix race condition in ledc_fade_stop causing assert failure
Closes https://github.com/espressif/esp-idf/issues/15580
2025-03-27 20:16:53 +08:00
Sudeep Mohanty
30f8649fb8 feat(freertos): Enable Amazon FreeRTOS SMP kernel for esp32c5 and esp32c61
This commit enables the Amazon SMP port for FreeRTOS for the esp32c5 and
esp32c61 targets.
2025-03-27 11:17:47 +01:00
Xiao Xufeng
4c2820d377 change(version): Update version to 5.4.1 2025-03-27 15:29:07 +08:00
Frantisek Hrbata
39ebccb7fb fix(tools): handle packages with dots in their names during dependency checks
The `setuptools` package starting with `v70.1.0`[1] contains built-in
`bdist_wheel` command. Before this version `setuptools` relied on the
`bdist_wheel` command implementation from the `wheel` package. Starting with
`setuptools` `v75.8.1` the `PEP 491`[3] restrictions on the distribution name
of a wheel package are enforced[4], replacting also `.` with `_`.  Note that
`PEP 491` actually allows `.` in the distribution name, but for some reason the
latest packaging docs[10][11] does not, stating that `.` should be replaced
with `_`. This was discussion here[12].

Also the `wheel` package starting with `v0.45.0`[5] is using the `bdist_wheel`
command from `setuptools`.  This means that any package which has `.` in its
distribution name, like `ruamel.yaml.clib`, can have different wheel name,
depending on which version of the `bdist_wheel` command was used.

The `bdist_wheel` command from setuptools prior `v75.8.1` or `wheel` prior
`v0.45.0` will keep the dots in distribution name preserved.  For exaple the
`ruamel.yaml.clib` package will have distribution name
`ruamel.yaml.clib-0.2.12.dist-info. Newer versions will replace the dots with
`_` according to [10][11], creating distribution like
`ruamel_yaml_clib-0.2.12.dist-info`.

From packaging point of view `ruamel.yaml.clib-0.2.12.dist-info` and
`ruamel_yaml_clib-0.2.12.dist-info` are the same packages, but this is not
reflected in `importlib.metadata` prior python 3.10[9], which does not perform
name normalization prior the distribution search. This causes the `version`
from `importlib.metadata` to fail on python prior the 3.10 version if the
package with dots in distribution name was generated with normalized paths with
newer `setuptools`. Note that the distribution name normalization was
backported to some later 3.9 python version.

Let's demonstrate this behavior on a simple package with the
`my.minimal.package` name.

```
my_minimal_package/
├── pkg
│   └── __init__.py
└── setup.py

from setuptools import setup, find_packages

setup(
    name='my.minimal.package',
    version='0.1.0',
    packages=find_packages(),
    install_requires=[],
    entry_points={},
)
```

With python 3.9.0 search for `my.minimal.package` fails because
of the missing name normalization.
```
docker run --rm -it --platform linux/x86_64 python:3.9.0 bash
python -m venv venv
. venv/bin/activate
pip install setuptools==v75.8.1
python setup.py bdist_wheel
pip install dist/my_minimal_package-0.1.0-py3-none-any.whl
python
Python 3.9.0 (default, Nov 18 2020, 13:28:38)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from importlib.metadata import version as get_version
>>> get_version('my.minimal.package')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.9/importlib/metadata.py", line 551, in version
    return distribution(distribution_name).version
  File "/usr/local/lib/python3.9/importlib/metadata.py", line 524, in distribution
    return Distribution.from_name(distribution_name)
  File "/usr/local/lib/python3.9/importlib/metadata.py", line 187, in from_name
    raise PackageNotFoundError(name)
importlib.metadata.PackageNotFoundError: my.minimal.package
>>> get_version('my_minimal_package')
'0.1.0'
```

With python 3.10.0 search for both `my.minimal.package` and
`my_minimal_package` succeeds.
```
docker run --rm -it --platform linux/x86_64 python:3.10.0 bash
python
Python 3.10.0 (default, Dec  3 2021, 00:21:30) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from importlib.metadata import version as get_version
>>> get_version('my.minimal.package')
'0.1.0'
>>> get_version('my_minimal_package')
'0.1.0'
```

In our `tools/check_python_dependencies.py` we cannot relay on the default
distribution finder, used in the `version` function from `importlib.metadata`,
to do name normalization on older python versions.  To cope with this,
implement a fallback version search. If `version` fails with
`PackageNotFoundError`, do the name normalization according to [10][11] and try
again.

Note: There is also a `wheel`[6][7] `v0.43.0` package embeded in `setuptools`
along with the new implementation[8].  This one seems to be used if the
external `wheel` package is not available but imported. TBH this is all kinda
messy and I may have overlooked something.

* [1] https://setuptools.pypa.io/en/stable/history.html#v70-1-0
* [2] https://setuptools.pypa.io/en/stable/history.html#v75-8-1
* [3] https://peps.python.org/pep-0491/#escaping-and-unicode
* [4] https://github.com/pypa/setuptools/pull/4766/files
* [5] https://wheel.readthedocs.io/en/stable/news.html
* [6] https://github.com/pypa/setuptools/blob/main/setuptools/_vendor/wheel/__init__.py
* [7] https://github.com/pypa/setuptools/issues/1386
* [8] https://github.com/pypa/setuptools/blob/main/setuptools/command/bdist_wheel.py
* [9] c6ca368867
* [10] https://packaging.python.org/en/latest/specifications/name-normalization/#name-normalization
* [11] https://packaging.python.org/en/latest/specifications/binary-distribution-format/
       #escaping-and-unicode
* [12] https://github.com/pypa/setuptools/issues/3777

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2025-03-27 08:04:55 +01:00
Geng Yu Chao
ca75074cf7 feat(ble): Add Kconfig support for direction finding feature
(cherry picked from commit 8c7af817d89c254714dc9c93414499fead3717d3)

Co-authored-by: Geng Yuchao <gengyuchao@espressif.com>
2025-03-27 10:01:17 +05:30
Geng Yuchao
ba7e760473 feat(ble): Support Bluetooth LE 5.1 direction finding feature 2025-03-27 10:01:17 +05:30
Rahul Tank
e092561bc8 fix(nimble): Fix SMP command allocation 2025-03-27 10:01:17 +05:30
Shreeyash
105b3d7816 feat(nimble): support vendor event mask set and vendor HCI event on nimble host 2025-03-27 10:01:17 +05:30
Rahul Tank
68ef1bdfe0 fix(nimble): Fix incorrect event deinit in gatt caching discovery 2025-03-27 10:01:17 +05:30
Abhinav Kudnar
d714ad6bc1 fix(nimble): Exposed the ble_gap_wl_tx_add API to add a device in whitelist 2025-03-27 10:01:17 +05:30
Shen Weilong
15262e37a8 feat(bt): support hardware ecc acceleration for bt tinycrypt 2025-03-27 10:01:17 +05:30
Shen Weilong
6ea8cd1c0f change(bt): moved porting/ext/tinycrypt into common 2025-03-27 10:01:17 +05:30
Rahul Tank
5c982b0923 fix(nimble): Fix SC only pairing failure 2025-03-27 10:01:17 +05:30
Rahul Tank
26d71a5cbc fix(nimble): Handle probable release breaking change
link_estab event may be handled by customers in application and the previous would break it.
Revert few changes so as to not break the customer's code
2025-03-27 10:01:17 +05:30
Rahul Tank
54e22cfd49 fix(nimble): update data length after connection for all chips 2025-03-27 10:01:17 +05:30
Rahul Tank
20f902c953 fix(nimble): Keep only BLE_GAP_EVENT_CONNECT gap event 2025-03-27 10:01:17 +05:30
Alexey Lapshin
f810a440c9 fix(tools): remove unused variables in gdbinit.cmake
Closes https://github.com/espressif/esp-idf/issues/15035
2025-03-26 19:56:03 +07:00
Island
daf8117cb9 Merge branch 'feature/add_vendor_ble_cmd_definitions_5.4' into 'release/v5.4'
Feature/add vendor ble cmd definitions (v5.4)

See merge request espressif/esp-idf!37956
2025-03-26 16:39:28 +08:00
zwx
f519297704 fix(802.15.4) fix the behavior of the esp_ieee802154_set_txpower 2025-03-26 13:47:05 +08:00
Marek Fiala
8180dd00ab feat(tools): Remove PATH duplicity from first call of tools/activate.py 2025-03-25 14:16:16 +01:00
Marek Fiala
0cace3827b feat(tools): Deactivate current ESP-IDF environment with every export run
Unix systems only
2025-03-25 14:16:16 +01:00
laokaiyao
5bc5fd34d6 fix(i2s): add check for i2s DMA buffer array allocation
Closes https://github.com/espressif/esp-idf/issues/15607
2025-03-25 15:23:38 +08:00
laokaiyao
b22964cc4f fix(i2s): fixed mismatch of the i2s and gdma iram-safe config
Closes https://github.com/espressif/esp-idf/issues/15533
2025-03-25 15:17:47 +08:00
zhiweijian
f66322c9b7 feat(bt): fixed some doc error and add ocf parameters description 2025-03-25 14:27:02 +08:00
Tan Yan Quan
d3bc511c36 fix(openthread): add some bugfixes to pass CI pipeline 2025-03-25 13:33:03 +08:00
Tan Yan Quan
fceb55dd25 refactor(openthread): move isr_handle_timerX to esp_ieee802154_timer 2025-03-25 13:33:03 +08:00
Tan Yan Quan
b014901619 fix(openthread): calibrate CSL tx parameters 2025-03-25 13:33:03 +08:00
Tan Yan Quan
47cd629459 fix(openthread): modify ETM task numbers for esp32c5 2025-03-25 13:33:03 +08:00
Tan Yan Quan
469b5c14e4 fix(openthread): turn off rx for SSED running CSL during idle 2025-03-25 13:33:01 +08:00
Shen Weilong
e35dbbbee0 feat(bt): added definitions for bluetooth hci vendor commands and events 2025-03-24 20:28:22 +08:00
Shen Wei Long
da1372d691 feat(ble/controller): Deleted useless functions for ESP32-C2 2025-03-24 20:28:22 +08:00
morris
7164043140 fix(usb_serial_jtag): wrong return value in usb_serial_jtag_write_bytes
Closes https://github.com/espressif/esp-idf/issues/15620
2025-03-24 11:46:47 +08:00
Zhang Shuxian
50b5db12e3 docs: Add a note about TWAI multiple instances install 2025-03-24 10:54:29 +08:00
Shen Wei Long
6d9c2b9c0f feat(ble/controller): Deleted useless functions for ESP32-C6/C61/H2/C5 2025-03-21 19:56:59 +08:00
zhiweijian
119048bb75 fix(bt): Update bt lib for ESP32-C3 and ESP32-S3 (d74042a8)
- Remove unused functions in the controller
2025-03-21 19:44:30 +08:00
baohongde
57bcbbb449 feat(bt): added definitions for BR/EDR hci vendor commands and events 2025-03-21 19:32:22 +08:00
chenjianhua
bc38724221 fix(bt): Update bt lib for ESP32(dc1cd581)
- Remove unused functions in the controller
- Add an SDK config for the minimum size of encryption key
2025-03-21 19:29:32 +08:00
Jiang Jiang Jian
8b80e26f4d Merge branch 'bugfix/11r_compile_error_v5.4' into 'release/v5.4'
fix(wifi): Fixed compilation error when 11KV is disabled and 11R is enabled (v5.4)

See merge request espressif/esp-idf!37865
2025-03-21 17:38:45 +08:00
Jiang Jiang Jian
74eadefb1a Merge branch 'bugfix/fix_github_cert_verification_simpleota_v5.4' into 'release/v5.4'
fix: failing Github certificate verification (v5.4)

See merge request espressif/esp-idf!37824
2025-03-21 16:55:17 +08:00
Jiang Jiang Jian
b1d0ffba15 Merge branch 'feat/add_protocomm_sec_patch_config_v5.4' into 'release/v5.4'
feat(protocomm): add (hidden) config option to indicate security patch feature (v5.4)

See merge request espressif/esp-idf!37790
2025-03-21 16:54:50 +08:00
xiongweichao
e74cae7016 fix(bt/bluedroid): fixed other events being reported when disconnected
- Since no initial value is assigned, the variable evt is a random value,
causing the ESP_BT_GAP_DISC_STATE_CHANGED_EVT event to be reported when
the connection is disconnected.
2025-03-21 11:11:37 +08:00
Sudeep Mohanty
3f5f6ec13e fix(ringbuf): xRingbufferReceive() crashes for allow-split buffers
This commit adds an assert check to xRingbufferReceive() and
xRingbufferReceiveFromISR() functions to prevent them from being used to
retrieve items from an allow-split buffer. Corresponding documentation
has also been updated.
2025-03-20 11:48:59 +01:00
Xu Si Yu
db3840e94d feat(tcp_transport): add an api to configure the addr family 2025-03-20 16:07:54 +08:00
Chen Jichang
916af811f4 fix(rmt): fix the received symbols issue 2025-03-20 10:36:45 +08:00
Radim Karniš
1aeb50d497 fix(idf_tools): Validate input features 2025-03-19 21:44:18 +01:00
Radim Karniš
a262ce2cc7 fix(idf_tools): Patch extractall() deprecation warning 2025-03-19 13:48:15 +01:00
luaijun
c8508e992f ci(c2/c3): add major eco version tests 2025-03-19 18:40:21 +08:00
yiwenxiu
8b72fa3c17 feat(openthread): fix ci avahi service cases issue 2025-03-19 18:08:02 +08:00
Kapil Gupta
a2d0171a17 ci(wifi): Add builds for FT, RRM and WNM configs 2025-03-19 12:43:30 +05:30
Kapil Gupta
24fed6d3c2 fix(wifi): Fixed compilation error when 11R is enabled without 11KV 2025-03-19 12:43:20 +05:30
armando
4bd0d04c2f feat(psram): supported new octal psram on s3 2025-03-19 10:20:44 +08:00
Zhao Wei Liang
86001719b3 feat(ble): change nimble whitelist max size to 31
(cherry picked from commit 93357e8613)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:05:00 +08:00
Zhao Wei Liang
2662cdd232 feat(ble): change whitelist max size to 31 on ESP32-C5
(cherry picked from commit fdae270427)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:04:58 +08:00
Zhao Wei Liang
8297b40cf5 feat(ble): change whitelist max size to 31 on ESP32-C2
(cherry picked from commit 578f2358c6)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:04:56 +08:00
Zhao Wei Liang
1fe9c33ea2 feat(ble): change whitelist max size to 31 on ESP32-C6
(cherry picked from commit 2b435687b0)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:04:53 +08:00
Zhao Wei Liang
11aca2398b fix(ble): Fixed warning that the gpio is not usable when reconfig hci uart pin
(cherry picked from commit 57417ca30f)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:04:51 +08:00
Zhao Wei Liang
5d5c0209e6 fix(ble): fixed hci driver stack protection fault issue on ESP32-C5
(cherry picked from commit 132e0d6695)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:04:49 +08:00
Zhao Wei Liang
bd1223cc91 fix(ble): fixed hci driver stack protection fault issue on ESP32-C2
(cherry picked from commit afd44d14b9)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:04:47 +08:00
Zhao Wei Liang
f496072977 fix(ble): fixed hci driver stack protection fault issue on ESP32-C6
(cherry picked from commit ec4a1324f5)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:04:44 +08:00
Zhao Wei Liang
1626f36867 fix(ble): delete ble_hci_trans header file
(cherry picked from commit 327182e3e6)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:04:42 +08:00
Zhao Wei Liang
abc7beac70 fix(ble): fixed hci assertion issue when uart interference occurs
(cherry picked from commit 84f0b39e4d)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-03-18 16:04:40 +08:00
Ashish Sharma
a83a0ab02b fix(component/mbedtls): Adds github root cert to cmn_crt_authorities.csv 2025-03-18 14:36:18 +08:00
Mahavir Jain
291a008840 feat(protocomm): add (hidden) config option to indicate security patch feature 2025-03-17 13:30:45 +05:30
peter.marcisovsky
1b4fd125c4 fix(jpeg_decoder): Correctly handle invalid 0xffff JPEG marker 2025-03-14 22:16:27 +08:00
peter.marcisovsky
16d16320ce feat(jpeg_decode): Add support for default Huffman tables
- In case of a missing Huffman table, while decoding a JPEG image
    - Define a default Huff table and add it to JPEG image header
2025-03-14 22:16:27 +08:00
peter.marcisovsky
52f380741c feat(jpeg_decoder): Correctly set JPEG restart interval 2025-03-14 22:16:27 +08:00
Island
5cbd2a3877 Merge branch 'bugfix/reduce_controller_bin_size_v5.4' into 'release/v5.4'
fix(ble/controller): reduce controller bin size (backport v5.4)

See merge request espressif/esp-idf!37754
2025-03-14 19:26:56 +08:00
zhanghaipeng
cdefff9cc5 feat(ble/bluedroid): Support read periodic advertiser list size command 2025-03-14 18:03:31 +08:00
zhiweijian
7f5af25348 feat(ble/bluedroid): reduce bluedrois host bin size and disable BLE_HOST_BG_CONNECT_EN 2025-03-14 18:03:31 +08:00
zhiweijian
85fe2c584b feat(ble/bluedroid): disable bluedroid host unused functions 2025-03-14 18:03:31 +08:00
zhiweijian
694ed47dbb feat(bt/bluedroid): optimize bluedroid menuconfig 2025-03-14 18:03:31 +08:00
zhiweijian
388626019e feat(bt/bluedroid): delete unused host congest check 2025-03-14 18:03:31 +08:00
Zhang Shuxian
3bb893414c docs: Update static for i2c.rst 2025-03-14 12:00:40 +08:00
morris
eca61e07ce fix(i2c): add Kconfig to skip driver conflict check 2025-03-14 11:17:58 +08:00
zhiweijian
c26ce742cf fix(ble/controller): reduce controller bin size 2025-03-14 11:10:20 +08:00
morris
9b493740ab Merge branch 'fix/change_pm_lock_type_v5.4' into 'release/v5.4'
fix(pm): use CPU lock in dirvers use axi dma to access psram (v5.4)

See merge request espressif/esp-idf!37712
2025-03-13 13:51:08 +08:00
Chen Jichang
3d55047a09 fix(drivers): use CPU_MAX lock in dirvers use axi dma to access psram 2025-03-13 11:20:27 +08:00
morris
2bed64fafc fix(axi_icm): qos can be applied to read and write independently 2025-03-12 21:36:53 +08:00
Tomáš Rohlínek
8e0239f04b fix(storage/console): fix test configuration 2025-03-12 20:06:31 +08:00
Tomáš Rohlínek
c6d24bddf7 fix(storage/vfs_console): stop new console opens from overwriting existing fds 2025-03-12 20:06:31 +08:00
Ivan Grokhotkov
c27683eb98 test(sdmmc): add test for high-prio task busy while writing
Related to https://github.com/espressif/esp-idf/issues/13934
2025-03-12 10:30:58 +08:00
Ivan Grokhotkov
4bd2322993 fix(sdmmc): move DMA descriptor refilling into the ISR
Previously, as DMA descriptors were processed, the task performing
SDMMC transfer would get woken up and would refill the descriptors.
This design didn't work correctly when higher priority tasks occupied
the CPU for too long, resulting in SDMMC transfer timing out.

This change moves DMA descriptor refilling into SDMMC ISR. Now the
"DMA done" interrupt is delivered back to task context only when
the entire transfer is completed.

Closes https://github.com/espressif/esp-idf/issues/13934
2025-03-12 10:30:53 +08:00
armando
53d019563b refactor(psram): rename .bss .noinit segments to sections
Closes https://github.com/espressif/esp-idf/pull/15513
2025-03-11 11:43:01 +08:00
Erki Aring
d23549db4c fix(psram): correct heap vaddr calculation
- fixes https://github.com/espressif/esp-idf/issues/15496

Signed-off-by: armando <douyiwen@espressif.com>
2025-03-11 11:42:57 +08:00
zwx
959dbe37ad feat(802.15.4): configure tx on delay using phylib impl 2025-03-11 11:36:11 +08:00
Island
061ba0c99e Merge branch 'bugfix/disable_dbg_hci_cmd_on_esp32_v5.4' into 'release/v5.4'
Disable debug vendor hci command on ESP32 (v5.4)

See merge request espressif/esp-idf!37630
2025-03-11 11:10:51 +08:00
Jiang Jiang Jian
7c0e10ba41 Merge branch 'bugfix/fix_some_wifi_bugs_202502_v5.4' into 'release/v5.4'
fix(sniffer): fix channel in rx_ctrl is zero when using sniffer(Backport v5.4)

See merge request espressif/esp-idf!37568
2025-03-11 10:41:30 +08:00
Jiang Jiang Jian
4f39b2476e Merge branch 'bugfix/wps_reconnect_failure_v5.4' into 'release/v5.4'
fix(wpa_suppplicant): Fix for issue in wps reconnection (Backport v5.4)

See merge request espressif/esp-idf!37641
2025-03-11 10:40:45 +08:00
Jiang Jiang Jian
f8843158b2 Merge branch 'bugfix/provisioning_sec2_aes_iv_usage_v5.4' into 'release/v5.4'
fix(provisioning): fix incorrect AES-GCM IV usage in security2 scheme (v5.4)

See merge request espressif/esp-idf!37613
2025-03-11 10:40:27 +08:00
Jiang Jiang Jian
8e031cf8c3 Merge branch 'fix/fix_esp32s3_reboot_cache_failure_v5.4' into 'release/v5.4'
fix(esp_system): fix possible cache_error by another core accessing flash in esp_restart (v5.4)

See merge request espressif/esp-idf!37586
2025-03-10 21:04:24 +08:00
Sarvesh Bodakhe
f86473e255 fix(wifi): Resolved WPS connectivity issue with pre-connected stations
This fixes the issue where station was not able connect using WPS if it was
already in connected state.

wifi_wps_scan_done() issues an esp_wifi_disconnect() before
calling esp_wifi_connect() to associate with the newly discovered AP. This
behavior incorrectly triggered a failure event (WIFI_EVENT_STA_WPS_ER_FAILED)
even though the disconnection was part of the normal WPS flow. This commit
prevents sending the false failure event, ensuring expected WPS behavior.
2025-03-10 14:58:12 +05:30
Aditi
24f00874af fix(wpa_suppplicant): Add fix for issue in wps reconnection 2025-03-10 14:58:06 +05:30
Song Ruo Jing
e774dbfd0f fix(uart): LP UART does not have the pre-divider for its clock source
Closes https://github.com/espressif/esp-idf/issues/15427
2025-03-10 15:29:09 +08:00
chenjianhua
6bad67bf3c fix(bt): Update bt lib for ESP32(e250cf1)
- Disable debug vendor hci command
2025-03-10 15:23:42 +08:00
gongyantao
8eab42d7e1 fix(bt): fixed some issues in bt controller
- fixed the issue where the NULL pointer was deferenced in lc_free state
- avoid accessing released ACL resources in SCO logic
2025-03-10 15:23:33 +08:00
Jin Cheng
9d59600746 fix(bt/controller): fixed some controller bugs on ESP32.
1. added a VSC to control whether to initiate lmp_auto_rate
        - Closes https://github.com/espressif/esp-idf/issues/15133
    2. fixed EA resource cleanup error after SNIFF negotiation failure
        - Closes https://github.com/espressif/esp-idf/issues/13605
    3. removed an assertion in SCO data TX handler after disconnection
        - Closes https://github.com/espressif/esp-idf/issues/15176
2025-03-10 15:23:17 +08:00
shenmengjing
aa60465e13 docs(provisioning): Sync CN translation and EN source 2025-03-10 09:29:47 +05:30
Mahavir Jain
2469db58a9 fix(esp_local_ctrl): update for changes in protocomm security2 scheme 2025-03-10 09:29:44 +05:30
Mahavir Jain
109532bbf9 fix(docs): update for changes in provisioning security2 scheme 2025-03-10 09:29:42 +05:30
Mahavir Jain
6d749486b9 fix(provisioning): fix incorrect AES-GCM IV usage in security2 scheme
Using same IV in AES-GCM across multiple invocation of
encryption/decryption operations can pose a security risk. It can help
to reveal co-relation between different plaintexts.

This commit introduces a change to use part of IV as a monotonic
counter, which must be incremented after every AES-GCM invocation
on both the client and the device side.

Concept of patch version for a security scheme has been introduced here
which can help to differentiate a protocol behavior for the provisioning
entity. The security patch version will be available in the JSON
response for `proto-ver` endpoint request with the field
`sec_patch_ver`.

Please refer to documentation for more details on the changes required
on the provisioning entity side (e.g., PhoneApps).
2025-03-10 09:29:39 +05:30
Mahavir Jain
2fa5c7d9eb fix(protocomm): memory leak issue for session command0 failure case 2025-03-10 09:29:35 +05:30
wuzhenghui
6de3fde3c2 fix(esp_system): fix possible cache_error by another core accessing flash in esp_restart 2025-03-10 11:40:10 +08:00
yinqingzhao
e72c3b4ee4 fix(sniffer): fix channel in rx_ctrl is zero when using sniffer 2025-03-10 11:39:33 +08:00
Jiang Jiang Jian
9fcb33d3ac Merge branch 'bugfix/c5_libphy_20250124_v5.4' into 'release/v5.4'
change(ble): update c5 beta5 lib phy to phy_version: 1 103, 48ac5755, Feb 22 2025 (v5.4)

See merge request espressif/esp-idf!37514
2025-03-10 11:38:57 +08:00
Jiang Jiang Jian
e1b32b4363 Merge branch 'fix/sleep_cpu_mspi_freq_mismatch_issue_p4_v5.4' into 'release/v5.4'
mspi: fixed cpu and mspi freq mismatch issue when in dfs/sleep on p4 (v5.4)

See merge request espressif/esp-idf!37583
2025-03-10 11:27:44 +08:00
armando
b806496635 test(cam): added cache-safe build test 2025-03-10 10:34:36 +08:00
armando
a446e78469 refactor(cam): rename IRAM-Safe to Cache-Safe 2025-03-10 10:34:32 +08:00
armando
20014ea97c fix(cam): fixed cam iram safe build error 2025-03-10 10:34:27 +08:00
Erhan Kurubas
38d17fe1cd test(apptrace): enable esp32c5 and esp32c61 tests 2025-03-09 17:28:27 +01:00
Erhan Kurubas
288dfc7c2b test(apptrace): run tests from custom OpenOCD class 2025-03-08 21:00:14 +01:00
wuzhenghui
7f88cf3ee9 change(esp_hw_support): only do mpll disable in lightsleep process 2025-03-08 14:06:12 +08:00
Armando
419e8b2e20 fix(mspi): fixed cpu and mspi freq mismatch issue when in dfs/sleep on p4 2025-03-08 14:06:09 +08:00
Song Ruo Jing
d8c1d9f603 fix(gpio): fix bad bit shift operation and OOB (h2) in io_mux.c 2025-03-07 21:16:18 +08:00
Song Ruo Jing
3d08efd83a refactor(uart): increase test app memory leak tolerance 2025-03-07 21:15:51 +08:00
Song Ruo Jing
9f08e5e9d8 fix(ppa): fix ppa srm potentially get blocked when scaling to YUV420
YUV420 requires scale_x_frag, scale_y_frag be even
2025-03-07 21:04:49 +08:00
Song Ruo Jing
9004e5009a fix(dma2d): dma2d_force_end should not crash when rx channel is idle 2025-03-07 21:04:49 +08:00
Song Ruo Jing
24747868dd docs(uart): aligned the config order in the programming guide with examples
Closes https://github.com/espressif/esp-idf/issues/13182
2025-03-07 21:01:16 +08:00
Song Ruo Jing
602393dfea fix(uart): enlarged task stack size for uart_async_rxtxtasks example
Meanwhile, added CI pytest for some UART examples

Closes https://github.com/espressif/esp-idf/issues/15363
2025-03-07 21:01:16 +08:00
Song Ruo Jing
9aaa4f9e9c fix(ledc): overflowed integer argument in ledc_hal_clear_left_off_fade_param 2025-03-07 20:33:01 +08:00
Guillaume Souchere
6545e21f4b fix(esp_hw_support): esp_ptr_in_rtc_iram_fast check to return false
esp_ptr_in_rtc_iram_fast logic should be executed if
SOC_RTC_FAST_MEM_SUPPORTED is set but it should also be executed
if IRAM and DRAM region mapping is the same. Remove the
SOC_RTC_IRAM_LOW != SOC_RTC_DRAM_LOW part of the check.

Update heap component to use the modify function appropriately.
2025-03-07 12:21:22 +01:00
Jan Beran
f943491014 fix(kconfig): Fix issues with Kconfig files 2025-03-07 11:31:37 +01:00
Song Ruo Jing
bea4615d0c docs(ledc): add notes for ledc_set_fade_with_time API reference
Closes https://github.com/espressif/esp-idf/issues/15085
2025-03-07 17:22:40 +08:00
Song Ruo Jing
b2dbcd7804 fix(ledc): left-off gamma ram registers should be cleared
Hardware reads in (range_number+1) fade parameter registers, which could
cause output waveform error.
2025-03-07 17:22:39 +08:00
Song Ruo Jing
351e11ebd2 fix(ledc): updated docs for esp32h2 eco5 bugfix 2025-03-07 17:22:39 +08:00
morris
22d2b85c11 fix(spi): removed PERIPH_CTRL_FUNC_IN_IRAM dependency 2025-03-07 15:44:43 +08:00
Jiang Jiang Jian
3f69abdb7e Merge branch 'bugfix/11kv_config_break_v5.4' into 'release/v5.4'
fix(esp_wifi): Correctly break 11kv config into wnm and rrm configs (v5.4)

See merge request espressif/esp-idf!37478
2025-03-07 10:55:28 +08:00
Sudeep Mohanty
cd887ef59a fix(panic_handler): Updated panic handler to use RTC WDT
This commit updates the following:
- Updates the panic handler to use only the RTC WDT to reset the system.
- Refactors some of the panic handler code.
- Updates Bluetooth files where in they now feed the WDTs instead of
  reconfiguring them.
- Removes some unnecessary configuration of WDTs from various files.
- Added a unit test to verify that the system does not lock up when the
  panic handler is stuck.
- Updates the memprot unit tests to work with the refactored panic
  handler.

Closes https://github.com/espressif/esp-idf/issues/15166
Closes https://github.com/espressif/esp-idf/issues/15018
Closes https://github.com/espressif/esp-idf/issues/10110
2025-03-06 09:17:26 +01:00
Christopher Durand
72d4204a6f fix(esp_http_client): Fix invalid content length header
In case a request with no content is sent after one with the content
length header set the header of the previous request is sent with the
subsequent one.
For instance, an empty GET request after a PUT request will still
indicate the non-zero content length of the previous request.

This is fixed by clearing the content length header when it shouldn't be
set.
2025-03-06 12:18:20 +05:30
Jiang Jiang Jian
b0306575a8 Merge branch 'fix/fix_ot_uart_init_bug_v5.4' into 'release/v5.4'
fix(openthread): fix a bug of openthread uart init port (v5.4)

See merge request espressif/esp-idf!37322
2025-03-06 14:44:11 +08:00
Jiang Jiang Jian
3144cef12e Merge branch 'fix/secure_boot_verfication_failure_sig_block_key_digest_mismatch_combo_v5.4' into 'release/v5.4'
fix(bootloader_support): Fix SB verification failure when application is not signed with the boot loader's first key (v5.4)

See merge request espressif/esp-idf!37497
2025-03-06 10:36:01 +08:00
Jiang Jiang Jian
2ed77df856 Merge branch 'fix/fix_bad_dslp_param_after_lightsleep_v5.4' into 'release/v5.4'
fix(esp_hw_support): Fixed the issue that light sleep destroyed the parameters of subsequent deep sleep (v5.4)

See merge request espressif/esp-idf!37302
2025-03-06 10:35:11 +08:00
Erhan Kurubas
fcd48a71d7 test(hmac_soft_jtag): check jtag connection status properly 2025-03-05 15:34:04 +01:00
Erhan Kurubas
61f30a58fb feat(tools): update openocd version to v0.12.0-esp32-20250226 2025-03-05 15:31:26 +01:00
Zhou Xiao
78f615f979 change(ble): update c5 beta5 lib phy to phy_version: 1 103, 48ac5755, Feb 22 2025 2025-03-05 19:55:42 +08:00
Kapil Gupta
793fe61c81 fix(esp_wifi): Prevent flushing of FT data mistakenly 2025-03-05 12:41:10 +05:30
Kapil Gupta
2ed843bdd2 fix(esp_wifi): Correctly break 11kv config into wnm and rrm configs 2025-03-05 12:40:54 +05:30
Shreeyash
7650812920 feat(nimble): Allow BLE SPP Client to subscribe to the server 2025-03-05 11:38:16 +05:30
harshal.patil
0076bb0289 fix(secure_boot): Fix SB verification failure when sig block and key digest mismatch
- Secure boot V2 verification failed when multiple keys are used to sign the bootloader
  and the application is signed with a key other than the first key that is used to
  sign the bootloader.
- The issue was introduced as a regression from the commit `ff16ce43`.
2025-03-05 11:26:33 +05:30
harshal.patil
0cdcd3a0fb fix(esp_psram): Fix incorrect calculation of used XIP PSRAM pages
The functions mmu_config_psram_text_segment() and mmu_config_psram_rodata_segment()
used to return the value of next start page in *out_page instead of the number
of pages used as mentioned in the documentation
2025-03-05 10:37:21 +05:30
Jiang Jiang Jian
5afa94872b Merge branch 'fix/sdmmc_concurrency_slot_count_doesnt_work_v5.4' into 'release/v5.4'
fix(sdmmc): SDMMC concurrency change active slot only after the slot is initialized (v5.4)

See merge request espressif/esp-idf!36653
2025-03-05 10:38:08 +08:00
Zhang Hai Peng
52390f9b3e feat(ble/bluedroid): Add Read Long Characteristic Values example
(cherry picked from commit 32e4fb79e8)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-03-04 22:13:41 +08:00
Sudeep Mohanty
528b1b3c37 fix(lp_uart): Update the lp_core_uart_tx_flush() API to wait for Tx idle
This commit updates the lp_core_uart_tx_flush() API to wait for the Tx line
to become idle, therefore confirming that all bytes are sent out.

Closes https://github.com/espressif/esp-idf/issues/15433
2025-03-04 08:52:22 +01:00
morris
fe2bf07209 fix(example): wrong ws2812 reset duration
Closes https://github.com/espressif/esp-idf/issues/15498
2025-03-04 11:10:44 +08:00
morris
f305313922 fix(lcd): DC signal shound't affect the input path of the GPIO
With this fix, user can use the same GPIO for both LCD DC output and SPI
MISO input.

Closes https://github.com/espressif/esp-idf/issues/15478
2025-03-03 18:29:17 +08:00
Zhang Shuxian
cbbfdb1e3d docs: Provide CN translation for nvs bootloader and fix broken link 2025-03-03 17:10:30 +08:00
Jiang Jiang Jian
d4aa25a38e Merge branch 'docs/fix_some_coexist_doc_issue_v5.4' into 'release/v5.4'
docs(coex): update rf coexistence documents (v5.4)

See merge request espressif/esp-idf!37344
2025-03-03 11:39:01 +08:00
Jiang Jiang Jian
57d976b7f3 Merge branch 'feat/add_h2_config_and_maxver_for_v5.4' into 'release/v5.4'
feat(soc): add Kconfig rev min option and increase max ver for H2 v1.2 (v5.4)

See merge request espressif/esp-idf!36416
2025-03-03 11:38:41 +08:00
Jiang Jiang Jian
154b7548cb Merge branch 'docs/wifi_wpa3_ent_migration_guide_backport_v5.4' into 'release/v5.4'
docs: Add migration guide for WPA3-Enterprise authentication modes for v5.4 (Backport v5.4)

See merge request espressif/esp-idf!37189
2025-03-03 11:36:51 +08:00
morris
9a93c89945 feat(gdma): allow bypass the alignment check in the link driver
Closes https://github.com/espressif/esp-idf/issues/15228
2025-03-03 11:21:22 +08:00
Zhang Hai Peng
0eb4b9aa15 fix(ble/controller): Fix BLE Kconfig on ESP32 to avoid unexpected behavior
(cherry picked from commit 9496949132)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-03-03 11:13:46 +08:00
Jan Beran
f7bf1a992c change: move check_deprecated_configs.py file to esp-idf-kconfig 2025-02-28 14:51:09 +01:00
wuzhenghui
e549dca8ae change(doc): added more usage notes & warings about PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP 2025-02-28 16:43:02 +08:00
peter.marcisovsky
aae16c1cfd fix(usb_host): Fixing dererence to OTG_NUM_HOST_CHAN in docs 2025-02-28 09:21:27 +01:00
Jin Cheng
8c1b39f2df fix(bt/bluedroid): fixed memory leaks in SPP callback mode 2025-02-28 16:11:33 +08:00
Tomas Rezucha
141c4414ee fix(usb/phy): Fixed crash on external PHY init with speed != UNDEFINED
Also deprecated usb_phy_otg_dev_set_speed()
and usb_phy_action() which are no longer used in esp-idf
2025-02-27 15:08:28 +01:00
Roman Leonov
894cecf174 fix(usb_phy): Removed pad pull override config for Full-speed 2025-02-27 15:08:28 +01:00
Sudeep Mohanty
3675245a23 fix(ulp-riscv): Fixed ADC oneshot initialization for ULP RISC-V
This commit fixes a bug in the ADC oneshot driver initialization for the
ULP RISC-V.
2025-02-27 15:06:18 +01:00
linruihao
7b95c5d571 docs(coex): update rf coexistence documents
- remove BLE connecting state in coexistence scenario
- remove WIFI section in H2 docs
2025-02-27 11:06:49 +08:00
Shu Chen
7e31189ede docs(coex): add the supported coexistence scenario for Wi-Fi and 802.15.4 2025-02-27 11:05:51 +08:00
Ondrej Kosta
0121f4fc40 fix(esp_eth): init Ethernet after repl init in iperf example 2025-02-26 13:38:18 +00:00
Xu Si Yu
99fe472c8f fix(openthread): fix a bug of openthread uart init port 2025-02-26 19:22:02 +08:00
C.S.M
44315b715c feat(temperature_sensor): Add temperature sensor calibration support 2025-02-26 17:50:54 +08:00
wuzhenghui
6e2b2a0e54 fix(esp_hw_support): fix lightsleep destroys deepsleep rtc parameters 2025-02-26 16:51:46 +08:00
Xiao Xufeng
e1ef60deef feat(soc): add Kconfig rev min option and increase max ver for H2 v1.2 2025-02-26 15:48:00 +08:00
Zhao Wei Liang
86585699a7 feat(ble): add a debug way to retain scene on ESP32-C5
(cherry picked from commit da07b1fabe)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-02-26 15:03:49 +08:00
Zhao Wei Liang
ea463572a2 feat(ble): add a debug way to retain scene on ESP32-C6
(cherry picked from commit bc299e784c)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-02-26 15:03:46 +08:00
Zhao Wei Liang
907e11c880 fix(ble): fixed common kconfig error when controller enable only
(cherry picked from commit 5b8ac71ace)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-02-26 15:03:44 +08:00
Chen Jichang
fc5d2e1bae refactor(rmt): set group clock prescale dynamically
Closes https://github.com/espressif/esp-idf/issues/14760
2025-02-26 14:17:12 +08:00
morris
46cc737580 feat(gptimer): make start and stop function idempotent
Closes https://github.com/espressif/esp-idf/issues/12325
Closes https://github.com/espressif/esp-idf/issues/13486
2025-02-25 11:41:56 +08:00
Erhan Kurubas
a289d1e0fe docs(jtag): add esp32p4 usb jtag pin numbers 2025-02-24 14:44:19 +01:00
Zhang Shuxian
fcfa85cb77 docs: Update CN translation for fatfs 2025-02-21 21:35:06 +08:00
Adam Múdry
d4c9da31e2 feat(fatfs): Add Kconfig options to set FF_FS_NOFSINFO value
Closes https://github.com/espressif/esp-idf/issues/15241
2025-02-21 21:35:06 +08:00
Sarvesh Bodakhe
03e9656ce0 docs: Add migration guide for WPA3-Enterprise authentication modes for v5.4 2025-02-21 16:58:04 +05:30
gongyantao
65f46b68b4 change(bt): optimize the macro definition for sdp_max_pad_len 2025-02-21 17:39:04 +08:00
Mitch Cairns
018aae7c3e feat(bt): Implement SDK Config SDP size options
Closes https://github.com/espressif/esp-idf/pull/15321
2025-02-21 17:39:04 +08:00
nilesh.kale
c107fa24f7 feat(app_update): enabled ota resumption feature
This commit added ota resumption changes for app_update
component. This commit is specifically added for release/v5.4.
2025-02-21 14:38:54 +05:30
Zhang Hai Peng
c2f399b4b0 fix(ble/bluedroid): Fix adv data and scan rsp data not reported together in BLE active scan
(cherry picked from commit 7f2cedc048)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-02-21 16:13:53 +08:00
Jiang Jiang Jian
0ba53566fa Merge branch 'fix/fix_s2_s3_rtc_iomux_clock_management_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix esp32s2/esp32s3 RTC IOMUX clock management (v5.4)

See merge request espressif/esp-idf!37145
2025-02-21 12:19:07 +08:00
linruihao
0c95b541e8 feat(bt/bluedroid): Add Kconfig option to keep device bonding info when HID unplugging 2025-02-21 11:49:48 +08:00
Jiang Jiang Jian
aa97a0fc3c Merge branch 'bugfix/fix_i2s_std_initializer_order_for_cpp_compiler_v5.4' into 'release/v5.4'
fix(i2s): fixed i2s_std initializer order for cpp compiler (v5.4)

See merge request espressif/esp-idf!37047
2025-02-21 11:48:58 +08:00
morris
6150ea9a43 Merge branch 'bugfix/fix_cache_count_flash_pages_patchs_return_wrong_value_v5.4' into 'release/v5.4'
fix(rom): Fix s2 and s3 Cache_Count_Flash_Pages rom function wrapper (v5.4)

See merge request espressif/esp-idf!37153
2025-02-21 10:17:27 +08:00
Jiang Jiang Jian
62db86d229 Merge branch 'fix/memprot-config-used-in-memory-layouts_v5.4' into 'release/v5.4'
fix(heap): Fix wrong config to enable MALLOC_CAP_EXEC in memory_layout.c (backport  v5.4)

See merge request espressif/esp-idf!35200
2025-02-21 10:01:36 +08:00
wuzhenghui
8e6ec50bcc fix(esp_hw_support): fix esp32s2/esp32s3 RTC IOMUX clock management 2025-02-21 09:50:42 +08:00
Jiang Jiang Jian
ccb69d4cf6 Merge branch 'change/ble_update_lib_20250217_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250217 - Update ESP BLE Controller Lib (v5.4)

See merge request espressif/esp-idf!37131
2025-02-21 09:44:45 +08:00
Jiang Jiang Jian
0ee066c8b5 Merge branch 'feature/esp32h2_eco5_ecc_v5.4' into 'release/v5.4'
feat(ecc): enable ECC constant time mode for ESP32-H2 ECO5 (v5.4)

See merge request espressif/esp-idf!36581
2025-02-21 09:44:35 +08:00
Martin Vychodil
8a44211856 Merge branch 'bugfix/memprot_s2_intr_peri1_v5.4' into 'release/v5.4'
fix(security): ESP32S2 memory protection check for Peri1 RTCSLOW interrupt (v5.4)

See merge request espressif/esp-idf!37117
2025-02-21 01:57:46 +08:00
laokaiyao
b18506da8b fix(i2s): fixed the pdm2pcm capability on c5 and c61 2025-02-20 21:41:33 +08:00
laokaiyao
4ecb1cec3c docs(i2s): fix some i2s capabilities in programming guide 2025-02-20 21:41:33 +08:00
laokaiyao
1312472337 fix(i2s): fixed i2s_std initializer order for cpp compiler
Closes https://github.com/espressif/esp-idf/issues/15405
2025-02-20 21:41:33 +08:00
morris
a043a96abb Merge branch 'revert/i2s_apll_pm_type_v5.4' into 'release/v5.4'
fix(i2s): lock APB when using apll with DFS feature (v5.4)

See merge request espressif/esp-idf!37144
2025-02-20 21:33:39 +08:00
Zhang Shuxian
2d14e692eb docs: Update CN translation for size.rst 2025-02-20 21:03:10 +08:00
Aditya Patwardhan
b301e03f57 feat(docs): Update minimizing binary size
The ESP32-H2 software countermeasure may not be necessary
        for ESP32-H2 v1.2 and above, this commit updates
        the relevant documentation
2025-02-20 21:03:10 +08:00
laokaiyao
202b74eca8 refactor(ecdsa): rely on efuse to get chip revision 2025-02-20 21:03:10 +08:00
Aditya Patwardhan
2ff128ebf4 fix(soc): Fixed ECDSA register compatibility 2025-02-20 21:03:10 +08:00
Aditya Patwardhan
3bcafe77d8 fix(hal): Make the ECDSA countermeasure dynamically applicable
This commit makes the ECDSA countermeasure dynamically applicable
    across different revisions of the ESP32H2 SoC.
2025-02-20 21:03:10 +08:00
Mahavir Jain
748d29b5ad feat(ecc): enable ECC constant time mode for ESP32-H2 ECO5 2025-02-20 21:03:10 +08:00
Jiang Jiang Jian
2fe702e8f7 Merge branch 'fix/backport_wifi_fixes_v5.4' into 'release/v5.4'
Fix/backport wifi fixes v5.4

See merge request espressif/esp-idf!37147
2025-02-20 21:02:14 +08:00
Jiang Jiang Jian
2c3b9ff383 Merge branch 'docs/fix_gps_broken_link_v5.4' into 'release/v5.4'
docs(examples): fixed broken link in uart example readme (v5.4)

See merge request espressif/esp-idf!37149
2025-02-20 20:30:37 +08:00
Jiang Jiang Jian
87d39ac41b Merge branch 'fix/esp_vfs_register_fd_range_warning_message_v5.4' into 'release/v5.4'
fix(storage/vfs): incorrect log level in esp_vfs_register_fd_range (v5.4)

See merge request espressif/esp-idf!36318
2025-02-20 20:29:14 +08:00
Guillaume Souchere
0f74a1608f fix(log): fix file name for esp_log_level_get_timeout 2025-02-20 20:21:31 +08:00
Cristian Funes
f4ed4d4954 fix(log): Modified linker script to move functions from flash to iram 2025-02-20 20:21:31 +08:00
Adam Múdry
1185786adb fix(sdmmc): SDMMC concurrency change active slot only after the slot is initialized
Fixes counting of initialized slots
2025-02-20 20:05:53 +08:00
Island
36ef188b85 Merge branch 'feat/improve_bt_log_spi_output_interface_v5.4' into 'release/v5.4'
Feat/improve bt log spi output interface (v5.4)

See merge request espressif/esp-idf!37137
2025-02-20 19:51:25 +08:00
cjin
f2330fd2fb change(ble): update esp32c6 lib to 7ead2d29 2025-02-20 18:01:46 +08:00
cjin
bbb160a083 change(ble): update esp32c5 lib to 7ead2d29 2025-02-20 18:01:46 +08:00
cjin
49164ce77f change(ble): update esp32h2 lib to 7ead2d29 2025-02-20 18:01:46 +08:00
zwl
18ce40a23a feat(ble): implement ble capture info user handler on ESP32-C5 2025-02-20 18:01:41 +08:00
zwl
aeff03bac4 feat(ble): implement ble capture info user handler on ESP32-C6 and ESP32-H2 2025-02-20 18:00:07 +08:00
Shen Weilong
a92f4ed389 change(ble): Supported cuttable architecture for ble 2025-02-20 17:36:55 +08:00
Tomasz Kramkowski
452e20d90b fix(rom): Fix s2 and s3 Cache_Count_Flash_Pages rom function wrapper
The rom function on the s2 and s3 only counts one page for any pages
which are mapped to page 0 of flash as the Cache_Flash_To_SPIRAM_Copy
function attempts to map all flash page 0 mapped pages to one PSRAM
page.

As this function can be called for multiple regions, it needs to track
if a page mapped to page 0 has previously been accounted for by a
previous call. It does this using the page0_mapped in-out parameter.
This logic contains an error:

```
if (*page0_mapped == 0) {
    // BUG: If page0_count is 0, 1 is still added
    count = valid_flash_count + 1 - page0_count;
} else {
    count = valid_flash_count - page0_count;
}
*page0_mapped += page0_count;
return count;
```

The current Cache_Count_Flash_Pages wrapper in the idf attempts to
compensate for this bug by checking if the page0_mapped parameter was
changed by a call to the function and reducing the count if it has not.

This, however, will incorrectly over-compensate in situations where the
initial value of page0_mapped was not zero as the code above only
miscounts when it was zero.

This patch addresses the issue in this wrapper function by correctly
compensating for the bug only in cases where the final page0_mapped
value is 0.
2025-02-20 15:17:35 +08:00
morris
96c3f6c041 Merge branch 'fix/build_when_rom_patch_disable_v5.4' into 'release/v5.4'
fix(spi_flash): Fix build fail when rom_patch config disabled  (backport v5.4)

See merge request espressif/esp-idf!37103
2025-02-20 14:41:25 +08:00
Jiang Jiang Jian
f9ae8dfb04 Merge branch 'fix/esp32p4_lightsleep_fixes_v5.4' into 'release/v5.4'
fix(esp_hw_support): some fixes of esp32p4 lightsleep retention & power switch process (v5.4)

See merge request espressif/esp-idf!37086
2025-02-20 13:48:50 +08:00
Marius Vikhammer
8f756b6a59 docs(examples): fixed broken link in uart example readme 2025-02-20 12:49:21 +08:00
Aditi
bb639472b9 fix(esp_wifi): Fix for issue in esp_now_send when wifi tx callback registered 2025-02-20 11:39:56 +08:00
tarun.kumar
a7ee422cff fix(wifi): Modify authmode to sta for sta connect event 2025-02-20 11:38:49 +08:00
Jiang Jiang Jian
e9285cc50c Merge branch 'fix/env_var_idf_path_old_not_set_in_ps1_v5.4' into 'release/v5.4'
fix(tools): IDF_PATH_OLD not found in PowerShell (v5.4)

See merge request espressif/esp-idf!37076
2025-02-20 11:29:08 +08:00
Jiang Jiang Jian
6d455feb22 Merge branch 'feature/c3_libphy_20250120_v5.4' into 'release/v5.4'
feat(phy): update libphy for RXDC cal opt, no antenna current opt, add cca api(Backport v5.4)

See merge request espressif/esp-idf!37102
2025-02-20 11:28:13 +08:00
morris
85a53f96ad Merge branch 'bugfix/dma_alignment_for_encryption_memory_v5.4' into 'release/v5.4'
fix(gdma): relax alignment constraint for internal memory (v5.4)

See merge request espressif/esp-idf!37093
2025-02-20 11:11:03 +08:00
morris
5054e0caf3 Merge branch 'fix/i2c_scl_freq_s2_v5.4' into 'release/v5.4'
fix(i2c): Fix scl frequency is wrong on esp32s2 in legacy i2c driver & Add api for customize i2c transaction interface for un-standard i2c device  (backport v5.4)

See merge request espressif/esp-idf!37113
2025-02-20 11:10:13 +08:00
Zhou Xiao
a03b8e13be change(ble): update ble log spi out config for ESP32-C5 2025-02-20 10:56:51 +08:00
Jiang Jiang Jian
ab0e43d75b Merge branch 'bugfix/sdp_uuid16_match_err_v5.4' into 'release/v5.4'
fix(bt): Fix the incorrect record found using uuid16 search(v5.4)

See merge request espressif/esp-idf!36843
2025-02-20 10:56:37 +08:00
morris
cf392937b6 Merge branch 'feature/flash_software_resume_v5.4' into 'release/v5.4'
feat(spi_flash): Add config for adding auto check status after suspend to improve performance (backport v5.4)

See merge request espressif/esp-idf!36525
2025-02-20 10:52:17 +08:00
Jiang Jiang Jian
23db06892b Merge branch 'feat/wait_pll_stable_after_sleep_wakeup_fix_xtal_v5.4' into 'release/v5.4'
feat(esp_hw_support): wait pll stable after sleep wakeup (v5.4)

See merge request espressif/esp-idf!36018
2025-02-20 10:36:20 +08:00
laokaiyao
6f40f19047 docs(i2s): add application notes to es7210 example 2025-02-20 10:22:49 +08:00
laokaiyao
409397f181 fix(i2s): lock APB when using apll with DFS feature
Closes https://github.com/espressif/esp-idf/issues/14707

Append to the commit ad9021a844.
2025-02-20 10:22:49 +08:00
gaoxu
6771e388f4 fix(adc): fix adc oneshot apb cnts incosistency v5.4
closes https://github.com/espressif/esp-idf/issues/14502
2025-02-20 10:20:56 +08:00
gaoxu
ec15fa9e4b fix(adc): fix adc oneshot error after continuous v5.4
closes https://github.com/espressif/esp-idf/issues/14506
2025-02-20 10:20:49 +08:00
Frantisek Hrbata
1de2bee28f fix(tools): honor IDF_PYTHON_ENV_PATH value
The active.py script is currently clearing the IDF_PYTHON_ENV_PATH,
preventing it from being set to a custom location for the python virtual
environment directory. Although the install script checks to ensure that
an existing python virtual environment is not overwritten with one for a
different ESP-IDF version than it was originally created for, we should
still permit setting a custom path for the python virtual environment.

Closes https://github.com/espressif/esp-idf/issues/15006

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2025-02-19 15:37:11 +01:00
Jiang Jiang Jian
69bd12d792 Merge branch 'fix/backport_wifi_fixes_v5.4' into 'release/v5.4'
fix(wifi): backport some fixes to v5.4

See merge request espressif/esp-idf!37008
2025-02-19 21:59:20 +08:00
Martin Vychodil
fef8695c7a fix(security): Fixed ESP32S2 memory protection check for Peri1 RTCSLOW interrupt
- fixes the issue found in https://github.com/espressif/esp-idf/issues/15359
- extends debug printouts in the related tests
2025-02-19 14:25:55 +01:00
Zhou Xiao
d3a639bb06 feat(ble): support ble log spi out for ESP32-C3 and ESP32-S3
(cherry picked from commit e41f619566)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-19 20:54:38 +08:00
Zhou Xiao
e7f712f78f feat(ble): support ble log spi out for ESP32
(cherry picked from commit e2fbec5d2e)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-19 20:54:35 +08:00
Zhou Xiao
ef95009563 change(ble): update ble log spi out config for ESP32-H2
(cherry picked from commit 608ecf63e2)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-19 20:54:33 +08:00
Zhou Xiao
5425ab7b83 change(ble): update ble log spi out config for ESP32-C6
(cherry picked from commit e61089e7e0)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-19 20:54:29 +08:00
Zhou Xiao
c6ea18fd55 change(ble): update ble log spi out config for ESP32-C2
(cherry picked from commit e4b698fc32)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-19 20:54:27 +08:00
Zhou Xiao
21f7a2b152 feat(ble): improved ble log spi output interface to support multisource log
(cherry picked from commit 2221133ba8)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-19 20:54:24 +08:00
C.S.M
3299b654b9 docs(i2c): Add document for customize i2c transaction interface for un-standard i2c device 2025-02-19 17:43:50 +08:00
C.S.M
d6de1df245 test(i2c): Add test for customize i2c transaction interface for un-standard i2c device 2025-02-19 17:43:50 +08:00
C.S.M
c6161380d3 feat(i2c): Add api for customize i2c transaction interface for un-standard i2c device 2025-02-19 17:43:50 +08:00
C.S.M
bd4f0b44f4 fix(i2c): Fix scl frequency is wrong on esp32s2 in legacy i2c driver,
Closes https://github.com/espressif/esp-idf/issues/15301,
Closes https://github.com/espressif/esp-idf/issues/14603
2025-02-19 17:38:32 +08:00
Island
93651ddbd5 Merge branch 'change/ble_update_lib_20250212_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250212 - Update ESP BLE Controller Lib (v5.4)

See merge request espressif/esp-idf!37044
2025-02-19 17:19:04 +08:00
muhaidong
ca1ac73e0e feat(phy): update libphy for RXDC cal opt, no antenna current opt, add cca api 2025-02-19 16:52:43 +08:00
C.S.M
569ac03d7f refactor(spi_flash): remove redundent flash suspend check 2025-02-19 16:50:13 +08:00
C.S.M
4da5de094e fix(spi_flash): Fix build fail when rom_patch config disabled,
Closes https://github.com/espressif/esp-idf/issues/15229
2025-02-19 16:50:03 +08:00
morris
c7e8b6819c Merge branch 'fix/esp_mmu_vaddr_to_paddr_cannot_figure_psram_p4_v5.4' into 'release/v5.4'
mmu: vaddr to paddr cannot figure psram vaddr on esp32p4 (v5.4)

See merge request espressif/esp-idf!37049
2025-02-19 16:48:12 +08:00
wanlei
9ecfa3a0e7 fix(spi_master): fix spi halt when remove device who using rc_fast 2025-02-19 16:44:48 +08:00
Marius Vikhammer
315f0fc3f1 Merge branch 'bugfix/freertos_wcaps_coproc_v5.4' into 'release/v5.4'
fix(freertos): fix a bug in `prvTaskDeleteWithCaps` related to coprocessors (backport v5.4)

See merge request espressif/esp-idf!37081
2025-02-19 16:44:01 +08:00
Island
b9ebf6cd91 Merge branch 'feat/support_ble_debug_with_gpio_v5.4' into 'release/v5.4'
Support change HID task size by Kconfig in HID example (v5.4)

See merge request espressif/esp-idf!36999
2025-02-19 16:37:14 +08:00
morris
36de1af357 fix(gdma): relax alignment constraint for internal memory
external memory encryption should not affect internal memory alignment

Closes https://github.com/espressif/esp-idf/issues/15228
2025-02-19 15:16:08 +08:00
wuzhenghui
b654a78646 change(esp_hw_support): wrapper sleep dcdc/ldo ops with ll 2025-02-19 14:32:22 +08:00
wuzhenghui
8233c250de feat(esp_hw_support): add branch prediction config retention 2025-02-19 14:32:19 +08:00
wuzhenghui
a63e9c5aef fix(esp_hw_support): fix DCDC switch bad software powerdown 2025-02-19 14:32:15 +08:00
wuzhenghui
4542c463c6 change(esp_hw_support): not use ROM Cache invalidate in sleep process to avoid dirtying the L1 Cache 2025-02-19 14:32:12 +08:00
wuzhenghui
ea05eba7f5 feat(esp_hw_support): do mstatus restore on each core 2025-02-19 14:32:08 +08:00
wuzhenghui
228e74e06c feat(esp_hw_support): do esp32p4 l1 cache invalidate by regdma 2025-02-19 14:32:04 +08:00
wuzhenghui
f3cc52d234 feat(esp_hw_support): do esp32p4 l1&l2 cache regs retention by regdma 2025-02-19 14:32:00 +08:00
Jiang Jiang Jian
da3f2ea5ce Merge branch 'fix/add_sleep_duration_check_for_timer_wakeup_v5.4' into 'release/v5.4'
fix(esp_hw_support): add timer wakeup sleep duration check (v5.4)

See merge request espressif/esp-idf!37010
2025-02-19 13:48:17 +08:00
Jiang Jiang Jian
c7c332761a Merge branch 'fix/disable_wfe_feature_for_e906_chips_v5.4' into 'release/v5.4'
change(esp_hw_support): disable CPU wait-for-event mode on cpu start (v5.4)

See merge request espressif/esp-idf!37000
2025-02-19 13:48:02 +08:00
Nachiket Kukade
597cfcb4f3 feat(wifi): Enable Wi-Fi Aware (NAN) for ESP32C5 and ESP32C61 2025-02-19 10:48:43 +08:00
muhaidong
cbcfecd604 fix(wifi): fix some esp32p4 host issues 2025-02-19 10:48:43 +08:00
zhangyanjiao
2e55890069 fix(wifi): update wifi lib for doc changes 2025-02-19 10:48:43 +08:00
Linda
afab2130fd docs: update the API description for esp-wifi_scan_get_ap_records 2025-02-19 10:48:43 +08:00
Nachiket Kukade
50e700792b fix(esp_wifi): Check SSID from Assoc Req before starting SA Query 2025-02-19 10:48:43 +08:00
Sarvesh Bodakhe
0a33f8fda0 fix(wifi): Fix crash when failure_retry_cnt is set in station config
Fixes the regression introduced by 21c2bef602
2025-02-19 10:48:43 +08:00
Sarvesh Bodakhe
b565bbdbab fix(wifi): Fix stack overflow when failure_retry_cnt is set
Fix issue of increased stack usage when failure_retry_cnt is set
and wifi driver internally retries connection attempts
2025-02-19 10:48:43 +08:00
muhaidong
df4667849c fix(wifi): fix wep shared auth connect fail issue 2025-02-19 10:48:43 +08:00
wangtao@espressif.com
35771eed0e fix(wifi): fix max idle period 1 issue 2025-02-19 10:48:43 +08:00
Omar Chebib
54f257b909 fix(freertos): fix a bug in prvTaskDeleteWithCaps related to coprocessors
When a coprocessor is used, the stack pointer is altered. It must be restored
before freeing the memory allocated to the task.
2025-02-19 10:22:23 +08:00
morris
15e75f21a7 Merge branch 'fix/adc_func_register_not_reset_issue_v5.4' into 'release/v5.4'
adc: func register not reset issue (v5.4)

See merge request espressif/esp-idf!37045
2025-02-19 10:02:29 +08:00
Shu Chen
11b3f939a4 Merge branch 'support/ieee802154_get_rssi_comp_from_phy_v5.4' into 'release/v5.4'
feat(802.15.4): support ieee802154 get rssi comp from phylib (v5.4)

See merge request espressif/esp-idf!37051
2025-02-19 10:00:38 +08:00
Adam Múdry
8db2420a2e fix: test_nvs_gen_check.py support for read-only NVS partitions 2025-02-18 16:33:43 +01:00
Marek Fiala
1fa9db53bd fix(tools): IDF_PATH_OLD not found in PowerShell
Closes https://github.com/espressif/esp-idf/issues/15396
2025-02-18 16:09:00 +01:00
morris
bcb3c32d3a Merge branch 'bugfix/sdmmc_reset_pins_slot_width_v5.4' into 'release/v5.4'
fix(sdmmc): fix reset of pins above slot width (v5.4)

See merge request espressif/esp-idf!36874
2025-02-18 22:53:26 +08:00
Ivan Grokhotkov
8ad144a415 fix(sdmmc): fix missed deinitialization of CD and WP pins in f8f40ad
Related to https://github.com/espressif/esp-idf/issues/15330
2025-02-18 12:23:16 +01:00
Ivan Grokhotkov
722cc23a89 fix(sdmmc): fix reset of pins above slot width
Closes https://github.com/espressif/esp-idf/issues/15328
2025-02-18 12:23:16 +01:00
wuzhenghui
95fb085fe3 fix(esp_hw_support): add timer wakeup sleep duration check
Closes https://github.com/espressif/esp-idf/issues/15255
2025-02-18 19:21:57 +08:00
Jiang Jiang Jian
c93d7d0132 Merge branch 'bugfix/idf-11643_v5.4' into 'release/v5.4'
backport v5.4: fix some issues on esp32c61 eco2

See merge request espressif/esp-idf!36987
2025-02-18 19:21:21 +08:00
wuzhenghui
1e11f287e1 change(esp_hw_support): disable CPU wait-for-event mode on cpu start 2025-02-18 19:21:09 +08:00
Marius Vikhammer
36ae237691 Merge branch 'fix/usb-cdc-non-blocking-read_v5.4' into 'release/v5.4'
fix(esp_vfs_console): USB CDC read when non blocking (backport v5.4)

See merge request espressif/esp-idf!36750
2025-02-18 12:17:08 +08:00
zwx
44e7fecbe6 feat(802.15.4): use btbb function to get rssi comp for h2 2025-02-18 12:09:25 +08:00
Armando
03e344df86 test(flash_mmap): added psram enabled test for esp32p4 as mmu is per target 2025-02-18 11:50:52 +08:00
Armando
253fc4f35a test(mmu): added test for checking esp_mmu_vaddr_to_paddr with psram vaddrs 2025-02-18 11:49:50 +08:00
Armando
7bbfe91432 fix(mmu): fixed esp_mmu_vaddr_to_paddr cannot figure out psram vaddr issue on esp32p4 2025-02-18 11:49:45 +08:00
Marius Vikhammer
7a71c4bb65 Merge branch 'test/fix_flaky_lp_uart_tests_v5.4' into 'release/v5.4'
fix(lp_uart): Fixed flaky LP UART unit tests (v5.4)

See merge request espressif/esp-idf!37023
2025-02-18 11:15:09 +08:00
Li Shuai
61fb531471 fix(esp_hw_support): fix the issue of mmu table content loss due to default sd signal 2025-02-18 10:39:50 +08:00
Armando
a387ec0123 fix(adc): fixed adc function register not reset issue 2025-02-18 10:33:25 +08:00
zwl
8e5aee2261 feat(ble): support enhanced controller log capabilities on ESP32-C5 2025-02-18 10:32:44 +08:00
zwl
3c6236df50 feat(ble): add channel assessment and enhanced connect function on ESP32-C5 2025-02-18 10:32:28 +08:00
zwl
8eb5c15376 change(ble): [AUTO_MR] Update lib_esp32c5 to 1d7eebaf 2025-02-18 10:32:09 +08:00
Zhou Xiao
9912a9c029 feat(ble): support enhanced controller log capabilities on ESP32-C2
(cherry picked from commit bbcb4a2e1f)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-02-18 10:23:47 +08:00
Zhou Xiao
de1cbf7f2f feat(ble): support enhanced controller log capabilities on ESP32-C6 and ESP32-H2
(cherry picked from commit f598976c6b)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-02-18 10:23:44 +08:00
Zhou Xiao
e6b590b243 feat(ble): add channel assessment and enhanced connect function on ESP32-H2
(cherry picked from commit 0ffac92586)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-02-18 10:23:41 +08:00
Zhou Xiao
b9616fdd7f feat(ble): add channel assessment and enhanced connect function on ESP32-C6
(cherry picked from commit 821e587fda)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-02-18 10:23:39 +08:00
Zhou Xiao
553992e1fa change(ble): [AUTO_MR] Update lib_esp32c6 to 1d7eebaf
(cherry picked from commit 4579e083ef)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-18 10:23:36 +08:00
Zhou Xiao
95a101d359 change(ble): [AUTO_MR] Update lib_esp32h2 to 1d7eebaf
(cherry picked from commit 4f0e0f371a)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-18 10:23:33 +08:00
Shu Chen
e37d33cc1c Merge branch 'feature/disable-c5-ci-build' into 'release/v5.4'
feat(zigbee): disable the build process of zigbee example on esp32c5

See merge request espressif/esp-idf!37024
2025-02-18 09:34:14 +08:00
xieqinan@espressif.com
60f820e7c0 feat(zigbee): disable the build process of zigbee example on esp32c5 2025-02-17 18:54:08 +08:00
Sudeep Mohanty
1e5308211d fix(lp_uart): Fixed flaky LP UART unit tests
This commit fixes some flaky LP UART multi device tests. It also adds
code to put the HP core to light sleep for few tests.
2025-02-17 10:29:04 +01:00
Martin Vychodil
e6815fd6a5 Merge branch 'bugfix/storage_generic_pytests_v5.4' into 'release/v5.4'
fix(ci): Removed storage related entries in known generate test child pipeline warnings (v5.4)

See merge request espressif/esp-idf!36683
2025-02-17 17:09:08 +08:00
wuzhenghui
003a7f6bcb fix(esp_hw_support): fix lp/hp clock wait time calculation after wait pll ready 2025-02-17 16:53:28 +08:00
wuzhenghui
67a4de4e77 change(esp_hw_support): switch to sleep_flags earlier to identify sleep state 2025-02-17 16:53:28 +08:00
wuzhenghui
87c4227e44 change(esp_hw_support): wait pll calibration done in regdma link instead of wait fixed value 2025-02-17 16:53:27 +08:00
Jiang Jiang Jian
c3044cad28 Merge branch 'bugfix/fix_delete_queue_error_in_espnow_example_v5.4' into 'release/v5.4'
fix(wifi): fix the delete queue error in espnow exapmle (v5.4)

See merge request espressif/esp-idf!37014
2025-02-17 16:10:53 +08:00
Jiang Jiang Jian
30307f6977 Merge branch 'bugfix/ifdef_cplusplus_bracket_v5.4' into 'release/v5.4'
bugfix(wifi): Add missing brackets in the C++ guard (Backport v5.4)

See merge request espressif/esp-idf!36830
2025-02-17 15:50:16 +08:00
Jiang Jiang Jian
0ba139c535 Merge branch 'bugfix/fix_some_wifi_bugs_250214' into 'release/v5.4'
Bugfix/fix some wifi bugs 250214(Backport v5.4)

See merge request espressif/esp-idf!36985
2025-02-17 15:48:22 +08:00
zhangyanjiao
aeb4e0288c fix(wifi): fix the delete queue error in espnow exapmle
Closes https://github.com/espressif/esp-idf/issues/15383
2025-02-17 14:54:38 +08:00
Marius Vikhammer
b808062f2e Merge branch 'bugfix/esp32p4_linker_script_v5.4' into 'release/v5.4'
fix(esp_system): add missing `arrays` attribute in the ESP32-P4 linker script (backport v5.4)

See merge request espressif/esp-idf!36094
2025-02-17 11:16:48 +08:00
Zhang Hai Peng
ddff846e4e feat(ble/bluedroid): Support change HID task size by Kconfig in HID example
(cherry picked from commit d4b3a7e99d)

Co-authored-by: Mitch Cairns <mitch.cairns@handheldlegend.com>
2025-02-17 11:15:46 +08:00
Zhang Hai Peng
53fa7a7df0 docs(ble/bluedroid): Optimize doc for implementation of a characteristic with 128 bit UUID
(cherry picked from commit fa40d971a5)

Co-authored-by: Erast  <78802792+MatoiDev@users.noreply.github.com>
2025-02-17 11:15:43 +08:00
Zhang Hai Peng
7790c95832 fix(ble/bluedroid): Don't log error on 16/128-bit UUID mixed descriptors
(cherry picked from commit fed1d41aa7)

Co-authored-by: Nebojša Cvetković <nebkat@gmail.com>
2025-02-17 11:15:40 +08:00
Zhang Hai Peng
41ccc00c15 refactor(ble/bluedroid): Fix typos in gatt_sr.c
(cherry picked from commit 63b2dcc3a7)

Co-authored-by: Nebojsa Cvetkovic <nebkat@gmail.com>
2025-02-17 11:15:37 +08:00
Zhang Hai Peng
c0b060c1a8 fix(ble/bluedroid): Allow 0 length indications
(cherry picked from commit 9b5a52e2f7)

Co-authored-by: Nebojsa Cvetkovic <nebkat@gmail.com>
2025-02-17 11:15:32 +08:00
Zhang Hai Peng
635e1489b7 refactor(ble/bluedroid): Fix typos in bta_gatts_act.c
(cherry picked from commit a8041a9953)

Co-authored-by: Nebojsa Cvetkovic <nebkat@gmail.com>
2025-02-17 11:15:29 +08:00
morris
3ecfa81c9b Merge branch 'bugfix/gpio_rom_patch_fix_v5.4' into 'release/v5.4'
fix(gpio): fix esp_rom_gpio_connect_out_signal for gpio num over 31 on esp32/s2 (v5.4)

See merge request espressif/esp-idf!36865
2025-02-17 11:14:21 +08:00
Zhang Hai Peng
a0f37ef893 fix(ble): Update bt lib for ESP32(2a2631f)
- Support ESP32 BLE GPIO DEBUG


(cherry picked from commit 0a7888f839)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-02-17 11:13:56 +08:00
Island
c34702fc0c Merge branch 'feat/add_spi_output_v5.4' into 'release/v5.4'
Feat/add spi output (v5.4)

See merge request espressif/esp-idf!36956
2025-02-17 11:04:37 +08:00
Rahul Tank
ae5cf32ab9 Merge branch 'bugfix/handle_slave_extra_disconn_v5.4' into 'release/v5.4'
fix(nimble): Handle not sending disconnect event if connect was not sent (v5.4)

See merge request espressif/esp-idf!36920
2025-02-15 22:43:07 +08:00
Rahul Tank
d4d795c56d fix(nimble): Handle not sending disconnect event if connect was not sent 2025-02-15 09:22:55 +05:30
Rahul Tank
f30ee2a6bc Merge branch 'feat/long_read_offset_v5.4' into 'release/v5.4'
feat(nimble): Add offset in GATT server long read context (v5.4)

See merge request espressif/esp-idf!36976
2025-02-15 11:26:47 +08:00
Jiang Jiang Jian
72770713b9 Merge branch 'bugfix/mem_leak_sae_pk_v5.4' into 'release/v5.4'
fix(wifi): Bugfix memory leak due to sae public key (v5.4)

See merge request espressif/esp-idf!36925
2025-02-14 19:34:53 +08:00
muhaidong
5dc5f0e566 fix(coex): fix disable external coex fail issue 2025-02-14 19:24:12 +08:00
muhaidong
67141ce7b5 feat(phy): add gpio cmd for cert test 2025-02-14 19:23:53 +08:00
Roland Dobai
dd315ebc88 Merge branch 'fix/ldgen_interm_no_secs_v5.4' into 'release/v5.4'
fix(ldgen): don't emit intermediate placements without sections (v5.4)

See merge request espressif/esp-idf!36967
2025-02-14 18:58:59 +08:00
Jiang Jiang Jian
266f7e878c Merge branch 'bugfix/skip_memory_reordering_wpa2_semaphr_v5.4' into 'release/v5.4'
fix(esp_wifi): fixed stack corruption in WiFi tasks (v5.4)

See merge request espressif/esp-idf!36936
2025-02-14 17:53:35 +08:00
Aditya Patwardhan
d2b7479f6f Merge branch 'refactor/security_docs_re-org_v5.4' into 'release/v5.4'
refactor(docs): re-organize security docs for better navigation (v5.4)

See merge request espressif/esp-idf!36960
2025-02-14 16:32:05 +08:00
Frantisek Hrbata
c06b3d213e fix(ldgen): don't emit intermediate placements without sections
When a symbol needs to be placed to a different target than the one
designated for the object file, the object file is expanded, which
includes the following steps:

1. Creating a new placement for the symbol's input section with the
   specified target.
2. Excluding the object placement from the orignal target.
3. Creating a new intermediate placement for the object for the original
   target, where its input sections are expanded, excluding the input
   section for the symbol.

Let's illustrate the object expansion process with the following example:

[sections:rodata]
entries:
    .rodata+
    .sdata2+
    .srodata+

[scheme:default]
entries:
    text -> flash_text
    rodata -> flash_rodata

[scheme:noflash]
entries:
    text -> iram0_text
    rodata -> dram0_data

[mapping:soc_pm]
archive: libsoc.a
entries:
    gpio_periph: GPIO_HOLD_MASK (noflash)

gpio_periph section headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .text             PROGBITS        00000000 000034 000000 00  AX  0   0  2
  [ 2] .data             PROGBITS        00000000 000034 000000 00  WA  0   0  1
  [ 3] .bss              NOBITS          00000000 000034 000000 00  WA  0   0  1
  [ 4] .rodata.GPIO_HOLD_MASK PROGBITS        00000000 000034 000058 00   A  0   0  4
  [ 5] .rodata.GPIO_PIN_MUX_REG PROGBITS        00000000 00008c 000058 00   A  0   0  4
  [ 6] .debug_info       PROGBITS        00000000 0000e4 0000d8 00      0   0  1
  [ 7] .rela.debug_info  RELA            00000000 0009d4 000108 0c   I 16   6  4
  [ 8] .debug_abbrev     PROGBITS        00000000 0001bc 000070 00      0   0  1
  [ 9] .debug_aranges    PROGBITS        00000000 00022c 000018 00      0   0  1
  [10] .rela.debug_aranges RELA            00000000 000adc 00000c 0c   I 16   9  4
  [11] .debug_line       PROGBITS        00000000 000244 0001ab 00      0   0  1
  [12] .debug_str        PROGBITS        00000000 0003ef 00022d 01  MS  0   0  1
  [13] .comment          PROGBITS        00000000 00061c 000030 01  MS  0   0  1
  [14] .note.GNU-stack   PROGBITS        00000000 00064c 000000 00      0   0  1
  [15] .riscv.attributes RISCV_ATTRIBUTES 00000000 00064c 000044 00      0   0  1
  [16] .symtab           SYMTAB          00000000 000690 000260 10     17  36  4
  [17] .strtab           STRTAB          00000000 0008f0 0000e1 00      0   0  1
  [18] .shstrtab         STRTAB          00000000 000ae8 0000d1 00      0   0  1

1. Creating a new placement
.dram0.data :
{
    *libsoc.a:gpio_periph.*(.rodata.GPIO_HOLD_MASK .sdata2.GPIO_HOLD_MASK .srodata.GPIO_HOLD_MASK)
}

2. Excluding the object placement
.flash.rodata :
{
    *(EXCLUDE_FILE(*libsoc.a:gpio_periph.*) .rodata.* ...)
}

3. Creating a new intermediate placement
.flash.rodata :
{
    *libsoc.a:gpio_periph.*(.rodata.GPIO_PIN_MUX_REG)
}

Now, let's do the same, but also move GPIO_PIN_MUX_REG to noflash with an updated mapping.

[mapping:soc_pm]
archive: libsoc.a
entries:
    gpio_periph: GPIO_HOLD_MASK (noflash)
    gpio_periph: GPIO_PIN_MUX_REG (noflash)

1. Creating a new placement
.dram0.data :
{
    *libsoc.a:gpio_periph.*(.rodata.GPIO_HOLD_MASK .sdata2.GPIO_HOLD_MASK .srodata.GPIO_HOLD_MASK)
    *libsoc.a:gpio_periph.*(.rodata.GPIO_PIN_MUX_REG .sdata2.GPIO_PIN_MUX_REG
                            .srodata.GPIO_PIN_MUX_REG)
}

2. Excluding the object placement
.flash.rodata :
{
    *(EXCLUDE_FILE(*libsoc.a:gpio_periph.*) .rodata.* ...)
}

3. Creating a new intermediate placement
.flash.rodata :
{
    *libsoc.a:gpio_periph.*
}

The *libsoc.a:gpio_periph.* entity in step 3 no longer has input
sections, as there are no remaining .rodata input sections in the object
file. The linker behavior for this mapping is to include all object
input sections that have not yet been placed as described in
https://sourceware.org/binutils/docs/ld.html#Input-Section-Basics
"If you use a file name without a list of sections, then all sections in
the input file will be included in the output section. This is not
commonly done, but it may by useful on occasion."

The map file for such mapping now contains following input sections

 .flash.rodata   0x3c0a0120    0x19b34
     *libsoc.a:gpio_periph.*()
     .debug_info    0x3c0b95bf       0xd8 esp-idf/soc/libsoc.a(gpio_periph.c.obj)
     .debug_abbrev  0x3c0b9697       0x70 esp-idf/soc/libsoc.a(gpio_periph.c.obj)
     .debug_aranges
                    0x3c0b9707       0x18 esp-idf/soc/libsoc.a(gpio_periph.c.obj)
     .debug_line    0x3c0b971f      0x1ab esp-idf/soc/libsoc.a(gpio_periph.c.obj)
     .debug_str     0x3c0b98ca      0x21a esp-idf/soc/libsoc.a(gpio_periph.c.obj)
                                    0x22d (size before relaxing)
     .comment       0x3c0b9ae4       0x30 esp-idf/soc/libsoc.a(gpio_periph.c.obj)
     .note.GNU-stack
                    0x3c0b9ae4        0x0 esp-idf/soc/libsoc.a(gpio_periph.c.obj)
     .riscv.attributes
                    0x3c0b9ae4       0x44 esp-idf/soc/libsoc.a(gpio_periph.c.obj)

This is incorrect, and such intermediate placement should not be
generated. This type of placement can be recognized because it is not
explicitly defined in the mapping and lacks input sections. We can
identify this in the significant function and prevent issuing commands
for such placement.

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2025-02-14 08:04:29 +01:00
Mahavir Jain
721b0de1b1 refactor(docs): re-organize security docs for better navigation 2025-02-14 11:45:04 +05:30
Abhinav Kudnar
222d7a7741 feat(nimble): Add offset in GATT server long read context 2025-02-14 11:21:30 +05:30
Rahul Tank
15da152e21 Merge branch 'fix/blesync_periodic_adv_v5.4' into 'release/v5.4'
fix(nimble): Added sync reattempt for periodic adv (v5.4)

See merge request espressif/esp-idf!36789
2025-02-14 13:45:38 +08:00
Zhou Xiao
ec495372ab feat(ble): support esp ble controller spi output interface for ESP32-H2
(cherry picked from commit 9c98c7e040)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-14 11:54:23 +08:00
Zhou Xiao
78f1241f78 feat(ble): support esp ble controller spi output interface for ESP32-C6
(cherry picked from commit 58b8775f95)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-14 11:54:20 +08:00
Zhou Xiao
8d3fcb78ee feat(ble): support esp ble controller spi output interface for ESP32-C2
(cherry picked from commit 0b57f8ae87)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-14 11:54:16 +08:00
Zhou Xiao
2acf21413c feat(ble): add spi output interface for esp ble controller log
(cherry picked from commit 52106c9895)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-02-14 11:54:13 +08:00
Omar Chebib
d3a9545e95 fix(esp_system): add missing arrays attribute in the ESP32-P4 linker script 2025-02-14 10:58:12 +08:00
xiongweichao
44c606e165 fix(bt): Fixed SDP record integrity check bug 2025-02-14 10:21:46 +08:00
David Čermák
462ed8353d Merge branch 'bugfix/ethernet_example_netif_glue_assignment_v5.4' into 'release/v5.4'
fix(ethernet_basic): Fix second Ethernet device not receiving IP address (v5.4)

See merge request espressif/esp-idf!36945
2025-02-13 22:00:31 +08:00
Astha Verma
ff55cabe6d fix(nimble): Added sync reattempt for periodic adv 2025-02-13 18:24:38 +05:30
Bogdan Kolendovskyy
bcf5075278 fix(ethernet_basic): Fix second Ethernet device not receiving IP address 2025-02-13 12:41:14 +01:00
Rahul Tank
18ba5dd4ab Merge branch 'fix/core_err_code_def_v5.4' into 'release/v5.4'
fix(nimble): Enhanced error handling by adding to print core error definitions (v5.4)

See merge request espressif/esp-idf!36654
2025-02-13 19:37:52 +08:00
Mahavir Jain
e348fdd5e6 Merge branch 'bugfix/http_client_select_read_error_v5.4' into 'release/v5.4'
fix(tcp_tranport): Fix handling of select() return value (v5.4)

See merge request espressif/esp-idf!36917
2025-02-13 19:19:11 +08:00
Kapil Gupta
31b88484a6 fix(esp_wifi): Fix stack corruption in wpa3 task 2025-02-13 14:23:08 +05:30
Kapil Gupta
698392735c fix(esp_wifi): fixed Stack corruption in DPP task 2025-02-13 14:23:08 +05:30
Kapil Gupta
a64056fac2 fix(esp_wifi): fixed Stack corruption in WPS processing 2025-02-13 14:23:08 +05:30
Kapil Gupta
c3959700b3 fix(esp_wifi): Fixed memory corruption in wifi enterprise
Closes https://github.com/espressif/esp-idf/issues/15370
2025-02-13 14:23:08 +05:30
Shu Chen
576264c704 Merge branch 'feat/add_ot_br_lib_check_case_v5.4' into 'release/v5.4'
feat(openthread): add br library check case (v5.4)

See merge request espressif/esp-idf!36885
2025-02-13 15:49:45 +08:00
Shreyas Sheth
3cbbcf25c7 fix(wifi): Fixed memory leak occurring in SAE PK connection 2025-02-13 12:02:13 +05:30
Astha Verma
34a8c8ae28 fix(nimble): Enhanced error handling by adding to print core error definitions 2025-02-13 08:57:08 +05:30
Rahul Tank
9555aa0912 Merge branch 'fix/NVS_corruption_v5.4' into 'release/v5.4'
fix(nimble): Handle NVS corruption caused by non removal of security records (v5.4)

See merge request espressif/esp-idf!36894
2025-02-13 11:19:15 +08:00
morris
7d07fe5047 Merge branch 'feat/async_memcpy_any_alignment_v5.4' into 'release/v5.4'
async memcpy destination address doesn't have to be cache aligned (v5.4)

See merge request espressif/esp-idf!36633
2025-02-13 10:36:23 +08:00
morris
5aee72a86f Merge branch 'fix/rgb_lcd_drift_on_esp32s3_v5.4' into 'release/v5.4'
fix(rgb_lcd): drift issue caused by restart (v5.4)

See merge request espressif/esp-idf!36889
2025-02-13 10:10:43 +08:00
David Čermák
1ddbb7bceb Merge branch 'fix/eth_example_stat_ip_v5.4' into 'release/v5.4'
fix(esp_eth): fixed Static IP example for Ethernet (v5.4)

See merge request espressif/esp-idf!36915
2025-02-13 02:14:20 +08:00
nilesh.kale
5ad73e97e8 fix(tcp_tranport): Fix handling of select() return value
When both readset/writeset and errset are set for a single socket,
the HTTP client incorrectly handled the condition, causing premature termination.
Added a check to ensure readset/writeset is prioritized before errset.

Closes https://github.com/espressif/esp-idf/issues/14673
2025-02-12 20:23:23 +05:30
Ondrej Kosta
7b1648f004 fix(esp_eth): fixed Static IP example for Ethernet
Fixed IP event handler unregistering for Ethernet
2025-02-12 13:55:20 +00:00
Alexey Gerenkov
945d750d5a Merge branch 'fix/coredump_note_section_alignment_v5.4' into 'release/v5.4'
Fix/coredump note section headers and alignments (v5.4)

See merge request espressif/esp-idf!36880
2025-02-12 21:31:14 +08:00
Jiang Jiang Jian
97404fa883 Merge branch 'fix/fix_branch_predictor_access_flash_after_cache_diabled_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix branch predictor access flash after cache disabled (v5.4)

See merge request espressif/esp-idf!36558
2025-02-12 17:59:36 +08:00
Jiang Jiang Jian
f8ed34f75f Merge branch 'bugfix/analyzer_issues_supplicant_v5.4' into 'release/v5.4'
fix(esp_wifi): fix some analyzer issues (v5.4)

See merge request espressif/esp-idf!36825
2025-02-12 13:56:16 +08:00
Jiang Jiang Jian
c7a66c0801 Merge branch 'bugfix/wps_scan_freq_v5.4' into 'release/v5.4'
fix(esp_wifi): Reduce scan frequency in WPS (v5.4)

See merge request espressif/esp-idf!36819
2025-02-12 13:56:01 +08:00
Astha Verma
5a9fc48b73 fix(nimble): fix NVS corruption 2025-02-12 10:50:50 +05:30
Rahul Tank
49262fd40c Merge branch 'bugfix/fix_warn_write_string_v5.4' into 'release/v5.4'
fix(nimble): Fixed warnings with COMPILTER_WARN_WRITE_STRINGS set (v5.4)

See merge request espressif/esp-idf!36699
2025-02-12 12:56:26 +08:00
Mahavir Jain
f8c10a5504 Merge branch 'bugfix/fix_blufi_crash_opt_v5.4' into 'release/v5.4'
fix(blufi): Enhance security in BLUFI example (v5.4)

See merge request espressif/esp-idf!36861
2025-02-12 12:31:56 +08:00
morris
1a430290f2 fix(rgb_lcd): drift issue caused by restart
Closes https://github.com/espressif/esp-idf/issues/15013
2025-02-12 10:43:16 +08:00
Shu Chen
f6c304005a Merge branch 'feature/ieee802154_txpower_table_v5.4' into 'release/v5.4'
Feature/ieee802154 txpower table (v5.4)

See merge request espressif/esp-idf!36132
2025-02-12 10:32:19 +08:00
morris
d65c108888 Merge branch 'feat/mmu_find_paddr_caps_by_any_offset_v5.4' into 'release/v5.4'
mmu: supported find paddr caps by any paddr offset (v5.4)

See merge request espressif/esp-idf!36813
2025-02-12 10:30:35 +08:00
yiwenxiu
d4ec677253 feat(openthread): add br library check case 2025-02-12 09:33:46 +08:00
Wang Meng Yang
667c1b6e70 Merge branch 'bugfix/add_bluedroid_init_migration_v5.4' into 'release/v5.4'
docs(bt/bluedroid): Added migration guide for bluedroid init API[backport v5.4]

See merge request espressif/esp-idf!36875
2025-02-12 09:22:17 +08:00
Erhan Kurubas
99b1a685c8 fix(coredump): disable uart txd pullup using gpio hal 2025-02-11 16:53:18 +01:00
Erhan Kurubas
52c1538f01 fix(coredump): fix note section alignments 2025-02-11 16:53:18 +01:00
Erhan Kurubas
f1fbac9dc8 fix(coredump): only clear high bit in PC when set 2025-02-11 16:53:18 +01:00
liqigan
0576fce0c8 docs(bt/bluedroid): Added migration guide for bluedroid init API
Closes https://github.com/espressif/esp-idf/issues/15352
2025-02-11 19:37:27 +08:00
morris
952f1aa2b8 Merge branch 'feature/malloc_cap_simd_flag_v5.4' into 'release/v5.4'
feat(heap): add a MALLOC_CAP_SIMD flag (v5.4)

See merge request espressif/esp-idf!36649
2025-02-11 17:42:09 +08:00
Song Ruo Jing
ed46ec4433 fix(gpio): fix esp_rom_gpio_connect_out_signal for gpio num over 31 on esp32/s2
Closes https://github.com/espressif/esp-idf/issues/15209
2025-02-11 16:05:11 +08:00
Armando
efd8c467d0 test(mmu): test can find paddr caps by any paddr offset 2025-02-11 15:51:45 +08:00
Armando
d7cdbbb07d feat(mmu): supported find paddr caps by any paddr offset
Closes https://github.com/espressif/esp-idf/issues/14988
2025-02-11 15:51:45 +08:00
Zhang Hai Peng
5f93ec3b11 fix(blufi): Enhance security in BLUFI example
(cherry picked from commit 3fc6c93936)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-02-11 15:13:50 +08:00
morris
e121a77c92 fix(dma): also consider buffer alignment when calculating the DMA nodes
Closes https://github.com/espressif/esp-idf/issues/15228
2025-02-11 13:46:12 +08:00
morris
5c0611cb3b feat(async_memcpy): support rx buffer unaligned to cache line size 2025-02-11 13:46:12 +08:00
morris
565d0331f1 refactor(dma): split rx buffer to cache aligned ones 2025-02-11 13:46:12 +08:00
zwx
053a67f209 fix(802.15.4): fix a typo for 15.4 Kconfig 2025-02-11 13:23:57 +08:00
zwx
22a5444773 feat(802.15.4): introduce a series of APIs related power table 2025-02-11 13:23:57 +08:00
zwx
86eed3f3ab feat(openthread): support preferred channel mask 2025-02-11 13:22:47 +08:00
Wang Meng Yang
cb19765809 Merge branch 'feat/esp32_set_get_bt_lpclk_src_v5.4' into 'release/v5.4'
feat(bt): Added API to get/set low power clock source(v5.4)

See merge request espressif/esp-idf!36562
2025-02-11 12:14:58 +08:00
xiongweichao
62eaef77ef fix(bt/bluedroid): fixed the format error of passkey printing 2025-02-11 11:57:16 +08:00
xiongweichao
f9ea7a47b1 fix(bt/bluedroid): Fixed incorrect types of some variables in SDP 2025-02-11 11:57:11 +08:00
xiongweichao
26491fbe67 fix(bt): Fix incorrect type returned when searching SAP record 2025-02-11 11:57:07 +08:00
xiongweichao
b8a4d9f74f fix(bt): Fix the incorrect record found using uuid16 search 2025-02-11 11:57:03 +08:00
Shu Chen
b853fc6742 Merge branch 'feature/support_hw_reset_when_handling_rcp_failure_v5.4' into 'release/v5.4'
feat(openthread): support hardware reset RCP while processing RCP failure (v5.4)

See merge request espressif/esp-idf!36553
2025-02-11 11:29:31 +08:00
Island
05eb9d0c4a Merge branch 'bugfix/h2_ble_timer_clk_enable_fix_v5.4' into 'release/v5.4'
fix: H2 ble timer clk enable issue. (v5.4)

See merge request espressif/esp-idf!36545
2025-02-11 10:45:33 +08:00
morris
737cce3c9f Merge branch 'bugfix/fix_i2s_reconfig_slot_issue_v5.4' into 'release/v5.4'
fix(i2s): fixed incorrect logic in slot reconfig (v5.4)

See merge request espressif/esp-idf!36641
2025-02-11 10:40:32 +08:00
Rahul Tank
5ede5942b1 fix(nimble): Fixed warnings with COMPILTER_WARN_WRITE_STRINGS set 2025-02-10 21:50:15 +05:30
Rahul Tank
86a8f691e1 Merge branch 'fix/spp_server_readme_change_v5.4' into 'release/v5.4'
docs: Updated README.md by removing unclear lines (v5.4)

See merge request espressif/esp-idf!36742
2025-02-10 23:59:39 +08:00
Rahul Tank
f9f71f0fa8 Merge branch 'fix/wifi_provisioning_ble_v5.4' into 'release/v5.4'
fix(nimble): Handle nested locks when BT_NIMBLE_DEBUG enabled (v5.4)

See merge request espressif/esp-idf!36497
2025-02-10 23:57:47 +08:00
radek.tandler
b02cb7d552 fix(storage/nvs): Fixed failing test cases in example folder 2025-02-10 16:43:34 +01:00
radek.tandler
03ca56d8fb fix(storage/vfs): Fixed failing test cases in test_apps 2025-02-10 16:43:33 +01:00
radek.tandler
9a21f5fb81 fix(ci): Removed storage related ignore warnings 2025-02-10 16:43:33 +01:00
akshat
767afc9ce4 bugfix(wifi): Fix header file errors and remove esp_supplicant from check_public_headers_exceptions.txt 2025-02-10 18:52:01 +05:30
akshat
22382490ab bugfix(wifi): Add missing brackets in the C++ guard
Closes https://github.com/espressif/esp-idf/issues/14991
2025-02-10 18:51:31 +05:30
Kapil Gupta
cd934c08ab fix(esp_wifi): Add review comments and some cleanup 2025-02-10 15:46:30 +05:30
Kapil Gupta
3c085db83e fix(esp_wifi): fix some analyzer issues
Closes https://github.com/espressif/esp-idf/issues/15097
Closes https://github.com/espressif/esp-idf/issues/15098
Closes https://github.com/espressif/esp-idf/issues/15099
2025-02-10 15:46:30 +05:30
Kapil Gupta
17032b875a fix(esp_wifi): Reduce scan frequency in WPS 2025-02-10 15:11:14 +05:30
Jiang Jiang Jian
5436955fd9 Merge branch 'bugfix/esp32c5_eco1_wifi_ps_v5.4' into 'release/v5.4'
backport v5.4: fix some wifi power save issues and optimize phy sleep for esp32c5 eco1 and beta5

See merge request espressif/esp-idf!36561
2025-02-10 15:22:59 +08:00
Jiang Jiang Jian
1aab4bf1b2 Merge branch 'bugfix/pm-300-v5.4' into 'release/v5.4'
backport v5.4: fix some esp32c5 and esp32c61 light sleep wakeup issues

See merge request espressif/esp-idf!36075
2025-02-10 15:22:22 +08:00
Marius Vikhammer
5c75a994da Merge branch 'fix/esp-event-profiling_v5.4' into 'release/v5.4'
fix(esp_event): Fix event loop profiling in handler_execute function (backport v5.4)

See merge request espressif/esp-idf!36684
2025-02-10 14:45:15 +08:00
xiongweichao
76a66a7879 feat(bt): Added API to get/set low power clock source 2025-02-10 14:10:38 +08:00
laokaiyao
5d4598f986 fix(i2s): fix uninitialize warning for the default macros
Closes https://github.com/espressif/esp-idf/issues/15271
2025-02-10 11:16:19 +08:00
laokaiyao
80ef7b7494 fix(i2s): fixed incorrect logic in slot reconfig
Closes https://github.com/espressif/esp-idf/issues/15256
2025-02-10 11:16:19 +08:00
Wang Meng Yang
8deb26be27 Merge branch 'feat/add_vsc_to_support_test_v5.4' into 'release/v5.4'
feat(bt): add vendor hci command and event to support test (v5.4)

See merge request espressif/esp-idf!36571
2025-02-10 10:49:13 +08:00
Song Ruo Jing
6cb64d7025 feat(heap): add a MALLOC_CAP_SIMD flag
MALLOC_CAP_SIMD can be used to allocate memory to be used for SIMD instructions
2025-02-08 16:28:41 +08:00
Shu Chen
5fa3e381c9 Merge branch 'feat/add_callback_for_esp_ot_radio_spinel_init_v5.4' into 'release/v5.4'
feat(openthread): add an API to set rcp version string (v5.4)

See merge request espressif/esp-idf!36746
2025-02-08 16:26:56 +08:00
morris
35dc076e79 Merge branch 'fix/usb_non_periodic_backport_v5.4' into 'release/v5.4'
fix(usb/host): Set SCHED_INFO for all channels (backport v5.4)

See merge request espressif/esp-idf!36770
2025-02-08 10:07:39 +08:00
Jiang Jiang Jian
ebc370a796 Merge branch 'bugfix/remove_unused_sco_state_v5.4' into 'release/v5.4'
Bugfix/remove unused sco state (v5.4)

See merge request espressif/esp-idf!36729
2025-02-07 19:51:01 +08:00
Tomáš Rohlínek
653fa4a1f5 fix(storage/vfs): incorrect log level in esp_vfs_register_fd_range
Closes https://github.com/espressif/esp-idf/issues/14327
2025-02-07 15:24:08 +08:00
Geng Yu Chao
095d82eb9b fix(esp32h2): H2 ble timer clk enable issue
(cherry picked from commit ac8204c4ba)

Co-authored-by: Geng Yuchao <gengyuchao@espressif.com>
2025-02-07 11:46:50 +08:00
Guillaume Souchere
4b5e246b5b fix(esp_vfs_console): USB CDC read when non blocking
In non blocking mode, the read function is expected
to return weather data is available for reading or not.

In case data are available but the size does not match
the expected size, the function read should return whatever
data is available.

Previously, the function was returning -1 with errno set
to EWOULDBLOCK even if the size of data in the buffer was
less than the requested size. It would only return the
available data if the size in the buffer was greater or equal
to the requested size.

The implementation of cdcacm_read is modified to return the avilable
data from the buffer even is the size is lesser than the requested
size.
2025-02-06 09:01:30 +01:00
Tomas Rezucha
4e4c9dc726 fix(usb/host): Set SCHED_INFO for all channels
Although the hardware documentation suggests that SCHED_INFO is only used
for periodic channels, empirical evidence shows that omitting this configuration
on non-periodic channels can cause them to freeze.
Therefore, we set this field for all channels to ensure reliable operation.
2025-02-06 08:17:59 +01:00
Jiang Jiang Jian
b26d933e08 Merge branch 'change/default_value_for_esp_coex_vsc_in_bluedroid_v5.4' into 'release/v5.4'
change(bt): Set default value for BT_BLUEDROID_ESP_COEX_VSC conditionally (v5.4)

See merge request espressif/esp-idf!36734
2025-02-06 10:50:03 +08:00
Astha Verma
447887de03 fix(nimble): Handle nested locks when BT_NIMBLE_DEBUG enabled 2025-02-05 14:48:43 +05:30
morris
d79e743b79 Merge branch 'fix/move_spi_lcd_cb_fun_to_iram_v5.4' into 'release/v5.4'
feat(spi_lcd): move callback function to iram (v5.4)

See merge request espressif/esp-idf!36739
2025-02-05 14:56:01 +08:00
Xu Si Yu
77fb4e42bd feat(openthread): add an API to set rcp version string 2025-02-05 14:40:17 +08:00
David Cermak
8e8d922edc fix(esp_eth): Fix test code to unregister event correctly 2025-02-05 07:34:27 +01:00
Astha Verma
fbcdf56981 docs: Updated README.md by removing unclear lines 2025-02-05 11:54:58 +05:30
morris
724f762f57 Merge branch 'fix/periodic_fs_usb_on_p4_backport_v5.4' into 'release/v5.4'
fix(usb/host): Fixed Full Speed periodic transfers on ESP32-P4 (backport v5.4)

See merge request espressif/esp-idf!36647
2025-02-05 14:17:43 +08:00
morris
9659998ce3 Merge branch 'fix/usb_host_enum_unchecked_return_coverity_backport_v5.4' into 'release/v5.4'
fix(usb_host): Fixed unchecked return value in enum driver (coverity) (backport to v5.4)

See merge request espressif/esp-idf!36669
2025-02-05 11:49:10 +08:00
Chen Jichang
a05a12526d feat(spi_lcd): move callback function to iram
Closes https://github.com/espressif/esp-idf/issues/15160
2025-02-05 11:21:46 +08:00
Wang Mengyang
d0c2b8337b change(bt): Set default value for BT_BLUEDROID_ESP_COEX_VSC conditionally
- Set default value of BT_BLUEDROID_ESP_COEX_VSC to n if software coexistence is not required,
in host-controller combined Bluetooth stack configuration.
2025-02-05 10:16:05 +08:00
Wang Mengyang
ff6dd1f083 change(bt): Remove unused state variable for (e)SCO disconnect reason in Bluedroid 2025-02-05 10:08:51 +08:00
David Cermak
8763e28c0b fix(esp_event): Fix minor no-ISR post regression
from 15f6775f5d
2025-02-04 09:17:36 +01:00
Alexey Gerenkov
f277fbf24e Merge branch 'fix/coredump_test_uart_data_missing_v5.4' into 'release/v5.4'
Fix missing coredump uart data in tests (v5.4)

See merge request espressif/esp-idf!36711
2025-02-03 23:48:56 +08:00
Erhan Kurubas
9f3a5eb3ab test(coredump): collect all expected uart data first, then process lazily 2025-02-03 15:06:25 +01:00
Rocha Euripedes
4d02ae2562 Merge branch 'fix/test_app_certificate_v5.4' into 'release/v5.4'
Regenerate certificates for testing (v5.4)

See merge request espressif/esp-idf!36672
2025-01-31 15:59:48 +08:00
Mahavir Jain
99601e8e57 Merge branch 'feat/bootloader_nvs_read_encrypted_v5.4' into 'release/v5.4'
fix(esptool_py): NVS partition being incorrectly marked as encrypted by the build system (v5.4)

See merge request espressif/esp-idf!36679
2025-01-30 17:14:11 +08:00
Guillaume Souchere
8c89773e0d fix(esp_event): Handler unregistration by itself issue
when esp_event_handler_unregister_with_internal cannot take
the loop mutex (e.g., when the handler unregisters itself),
create an event with a special base identifier and add it to
the queue of the corresponding loop to postpone the removal
of the handler from the list at a time when the loop mutex can be
successfully taken.
2025-01-30 08:59:12 +01:00
Guillaume Souchere
f870a03223 fix(esp_event): Fix event loop profiling in handler_execute function
handler_execute function is looking to match the handler only in the
list of loop events but does not look in the base event handler list
nor the id event handler list. So unless the event handler is
registered to be triggered for all event bases and all event ids of
an event loop, its profiling fields (invoked and time) are not updated
when it is called.

This commit updates the search for the matching handler to also look
in base event list and ID event list.

Closes https://github.com/espressif/esp-idf/issues/15041
2025-01-30 08:59:02 +01:00
harshal.patil
646492db0c fix(esptool_py): Fix NVS partition being incorrectly marked as encrypted
- The CMake function esptool_py_partition_needs_encryption() in the esptool_py
component used to mark NVS partition as encrypted, instead it should have marked
the NVS keys partition as encrypted.
2025-01-30 12:01:21 +05:30
David Čermák
6b473288c3 Merge branch 'fix/ping_data_race_v5.4' into 'release/v5.4'
fix(lwip): Fix potential data-race in ping tcpip callback (v5.4)

See merge request espressif/esp-idf!36534
2025-01-30 14:15:06 +08:00
David Cermak
e7a0a93a40 fix(lwip): Fix potential data-race in ping tcpip callback
Need to use tcpip_api_call() instead of tcpip_callback(), since the
former waits for the tcpip task to complete and thus prevents potential
data races with subsequent TCP/IP tasks.
2025-01-29 23:34:18 +08:00
David Čermák
433817915c Merge branch 'test/bridge_v5.4' into 'release/v5.4'
[network/examples]: Fix build rules to test builds on for all targets (v5.4)

See merge request espressif/esp-idf!36629
2025-01-29 23:21:27 +08:00
Rocha Euripedes
836b594262 Merge branch 'lwip/dhcp_network_changed_fix_v5.4' into 'release/v5.4'
fix(lwip): Fixed compilation issue with LWIP_DHCP_RESTORE_LAST_IP (v5.4)

See merge request espressif/esp-idf!36619
2025-01-29 22:01:41 +08:00
Euripedes Rocha
ca7cf4de4b fix(mqtt): Regenerate certificates for testing
- Previous fix ommited one of the client certificates by mistaque.
- This regenerates all certificates to clean that up.
2025-01-29 14:03:29 +01:00
Roman Leonov
65aa60f844 fix(usb_host): Fixed unchecked return value in enum driver (coverity) 2025-01-29 12:51:39 +01:00
Zhang Hai Peng
28a78ba1fb fix(ble): Update bt lib for ESP32(194dd63)
- Fix the issue where disconnection events were not reported as a slave.
- Enhance Access Address validation in compatibility mode.


(cherry picked from commit b4e3c5c1e2)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-01-27 18:03:17 +08:00
Zhang Hai Peng
806012cc51 feat(bt): add vendor hci command and event to support test
- add afh related vendor hci command and event
- add vendor event mask command


(cherry picked from commit b225703712)

Co-authored-by: gongyantao <gongyantao@espressif.com>
2025-01-27 18:03:17 +08:00
Tomas Rezucha
cd7fab3bdc refactor(usb): Include supported PHYs information in SoC 2025-01-27 08:08:02 +01:00
Tomas Rezucha
d12312bf76 fix(usb): Fixed missing GPIO drive capability on ESP32-P4
All USB PHYs that share their IOs with GPIOs must set
the GPIO's drive capability to maximum.
2025-01-27 08:07:42 +01:00
Tomas Rezucha
febc33a094 fix(usb/host): Fixed Full Speed periodic transfers on ESP32-P4
For FS periodic endpoints 'tokens_per_frame' must be set to 8
LL usb_dwc_ll_hctsiz_set_sched_info() function.
2025-01-27 08:07:34 +01:00
Li Shuai
27f0aef7c1 fix(uart): fix esp32c61 light sleep uart wakeup failed 2025-01-26 14:54:59 +08:00
Li Shuai
e2113d927d fix(esp_hw_support): fix esp32c5 and esp32c61 wakeup failed when TOP rejects PD 2025-01-26 14:54:59 +08:00
Li Shuai
8d303248cd fix(ci): fix some ci build issues to pass ci pipeline 2025-01-26 14:54:33 +08:00
Li Shuai
325f1f33f5 refactor(esp_phy): refactor phy sleep data initialize, split it to support multiple targets 2025-01-26 14:54:33 +08:00
Li Shuai
9e1b5eb173 change(soc): fix idf_size error caused by ldgen to run success for ci pipeline 2025-01-26 14:54:33 +08:00
Li Shuai
c74a5e3e8e change(esp_hw_support): fix wifi mac rx buffer link exception caused by pll clock 2025-01-26 14:54:33 +08:00
Li Shuai
761833493a change(esp_phy): fix some wifi power save issues and optimize phy sleep for esp32c5 eco1 and beta5 2025-01-26 14:54:33 +08:00
Island
998e365a61 Merge branch 'bugfix/fix_esp32c61_eco2_ble_light_sleep_issue_v5.4' into 'release/v5.4'
fix(ble): fix rtc freq div error on esp32c61 (v5.4)

See merge request espressif/esp-idf!36601
2025-01-26 14:26:02 +08:00
David Cermak
d244c98858 fix(network/examples): Fix build rules to test builds on for all targets
Uses wifi defines only if wifi is enabled for this target
2025-01-24 17:01:41 +01:00
Abhik Roy
eed1e02fdc test(lwip): Added LWIP_DHCP_RESTORE_LAST_IP config in lwip test apps
Enabled CONFIG_LWIP_DHCP_RESTORE_LAST_IP configuration to compile and
test the DHCP last IP restore functionality in CI tests.
2025-01-24 21:35:12 +11:00
Abhik Roy
37657757ba fix(lwip): Fixed compilation issue with LWIP_DHCP_RESTORE_LAST_IP
Closes https://github.com/espressif/esp-idf/issues/14582
2025-01-24 21:35:12 +11:00
Jin Chen
4300c344ca fix(ble): fix rtc freq div error on esp32c61
(cherry picked from commit b7571dd711)

Co-authored-by: cjin <jinchen@espressif.com>
2025-01-24 12:12:01 +08:00
Mahavir Jain
649f9a72ae Merge branch 'feat/support_aes_pseudo_round_func_in_esp32h2_eco5_v5.4' into 'release/v5.4'
Support AES and XTS-AES's pseudo round function in ESP32H2-ECO5 (v5.4)

See merge request espressif/esp-idf!36463
2025-01-23 13:20:20 +08:00
Jiang Jiang Jian
52807c1f79 Merge branch 'fix/fix_p4_usb_phy_bad_suspend_on_lslp_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix p4 OTG phy bad suspend cause high power consumption on sleep (v5.4)

See merge request espressif/esp-idf!36365
2025-01-23 11:04:50 +08:00
morris
206b3a22ad Merge branch 'feat/spi_std_timing_and_bit_trans_v5.4' into 'release/v5.4'
feat(driver_spi): support adjust master rx to standard timing (v5.4)

See merge request espressif/esp-idf!36399
2025-01-23 10:38:07 +08:00
wuzhenghui
cfcd8990f6 fix(esp_hw_support): fix branch predictor access flash after cache disabled 2025-01-22 19:24:48 +08:00
morris
473771bc14 Merge branch 'fix/p4_spi_slave_example_not_work_v5.4' into 'release/v5.4'
fix(driver_spi): fixed slave (and slave_hd) driver and example error with alignment check (v5.4)

See merge request espressif/esp-idf!36403
2025-01-22 18:57:59 +08:00
Island
794d8bdad3 Merge branch 'bugfix/fix_blufi_crash_v5.4' into 'release/v5.4'
fix(blufi): Fixed crash issue during memcpy in example (v5.4)

See merge request espressif/esp-idf!36552
2025-01-22 18:18:18 +08:00
Island
b05de813e3 Merge branch 'change/ble_update_lib_20250114_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250114 - Update ESP BLE Controller Lib (v5.4)

See merge request espressif/esp-idf!36480
2025-01-22 18:17:46 +08:00
zwx
86fe5a7313 feat(openthread): support hardware reset RCP while processing RCP failure 2025-01-22 17:12:15 +08:00
Zhang Hai Peng
f77da0d5b5 fix(blufi): Fixed some security issue in blufi example
(cherry picked from commit abc18e93eb)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-01-22 16:34:41 +08:00
Shu Chen
9309dc5670 Merge branch 'feature/support_esp32h2eco5_phylib_v5.4' into 'release/v5.4'
feat(esp_phy): support esp32h2eco5 phylib (v5.4)

See merge request espressif/esp-idf!36208
2025-01-22 11:57:50 +08:00
zhangwenxu
73be9efbfb feat(esp_phy): support esp32h2eco5 phylib 2025-01-21 17:52:43 +08:00
Jiang Jiang Jian
e347bdd44b Merge branch 'fix/backport_wifi_fixes_v5.4' into 'release/v5.4'
fix(Wi-Fi): Backport some Wi-Fi fixes to v5.4

See merge request espressif/esp-idf!36495
2025-01-21 17:45:57 +08:00
Jiang Jiang Jian
f4721d8170 Merge branch 'bugfix/clic_register_issues_v5.4' into 'release/v5.4'
fix(soc): fix clic register definition and description (backport v5.4)

See merge request espressif/esp-idf!35590
2025-01-21 15:52:58 +08:00
renpeiying
69f788024c docs: Update CN trans for security docs 2025-01-21 12:28:23 +05:30
harshal.patil
b06a4c198a feat(bootloader_support): Permanently enable XTS-AES pseudo rounds when FE release mode is enabled 2025-01-21 12:28:23 +05:30
harshal.patil
e3acb360e3 feat(hal/spi_flash_encrypted): Enable pseudo rounds function during XTS-AES operations 2025-01-21 12:28:23 +05:30
harshal.patil
7d803e661e feat(hal/aes): Enable pseudo rounds function during AES operations 2025-01-21 12:28:23 +05:30
C.S.M
82b3f5413c feat(spi_flash): Add config for adding auto check status after suspend to improve performance 2025-01-21 14:50:23 +08:00
C.S.M
c4bb6a3970 feat(spi_flash): support software resume after suspend in unicore 2025-01-21 14:50:23 +08:00
Shu Chen
0fb61ec9e0 Merge branch 'fix/ci_restart_avahi_daemon_v5.4' into 'release/v5.4'
fix(ci): restart avahi-daemon in otbr service discovery test case (v5.4)

See merge request espressif/esp-idf!36433
2025-01-21 14:41:58 +08:00
zwx
138cd7cf24 fix(ci): restart avahi-daemon in otbr service discovery test case 2025-01-21 11:26:10 +08:00
Shu Chen
3341d6ac1b Merge branch 'fix/fix_coex_macro_control_v5.4' into 'release/v5.4'
fix(openthread): use the correct macros to control code compilation (v5.4)

See merge request espressif/esp-idf!36456
2025-01-20 19:14:13 +08:00
Xu Si Yu
149ea88752 fix(openthread): use the correct macros to control code compilation 2025-01-20 16:45:36 +08:00
morris
d512a2999a Merge branch 'refactor/usb_merge_p4_phy_backport_v5.4' into 'release/v5.4'
refactor(usb/phy): Merge P4 and S2/S3 PHYs into one module (backport 5.4)

See merge request espressif/esp-idf!36449
2025-01-20 14:34:43 +08:00
linruihao
e6e09dbc4c feat(coex): add coexist scheme for bt inquiry/page coexist with wifi 2025-01-20 14:20:29 +08:00
zhangyanjiao
9195bcbe22 fix(wifi/mesh): fixed the mesh connection failure in WPA3 mode after erasing flash
Closes https://github.com/espressif/esp-idf/issues/14095
2025-01-20 14:19:37 +08:00
Sarvesh Bodakhe
e789554997 fix(wifi): Fix bug in authmode detection for wpa2/wpa3 enterprise
WPA3-Enterprise mandates the use of AKM suite selector
00:0F:AC:5 (IEEE80211 802.1X with SHA-256)
2025-01-20 14:18:51 +08:00
Kapil Gupta
85156cceff fix(esp_wifi): Address some review comments 2025-01-20 14:18:14 +08:00
Aditi
7900eeca4e fix(wpa_supplicant): Remove the btm_rrm task from supplicant
This commit removes btm_rrm_t task and CONFIG_SUPPLICANT_TASK from
wpa_supplicant and make the functions work in wifi task's context.
2025-01-20 14:17:58 +08:00
Aditi
5f2fb56755 fix(wpa_supplicant): Fix for sending alternate ft-auth in roaming 2025-01-20 14:17:48 +08:00
Aditi
318ad17991 fix(wpa_supplicant): Add two separate flags for RRM and WNM
Added two separate flags CONFIG_RRM(80211k) and CONFIG_WNM(80211v)
    flags under IEEE80211KV support flag.
2025-01-20 14:17:38 +08:00
Aditi
3f3c3d9a14 fix(wpa_supplicant): Add some minor fixes in roaming
1) Add a fix in roaming example for 11kvr
    2) Removed length constraint for neighbor report received.
2025-01-20 14:17:27 +08:00
Aditi
bdc099af7f fix(esp_wifi): Add fix for error handling for FT-Auth 2025-01-20 14:17:17 +08:00
yinqingzhao
c725253d53 feat(wifi): add wifi support for esp32c61 eco2 2025-01-20 14:16:30 +08:00
xuxiao
dd11e4514b feat(wifi): add phy support for esp32c5 beta5 2025-01-20 14:16:12 +08:00
Martin Vychodil
86ace15e10 Merge branch 'fix/broken_fatfsgen_tests_v5.4' into 'release/v5.4'
fix(storage/fatfsgen): broken test_apps scripts for fatfsgen (v5.4)

See merge request espressif/esp-idf!36488
2025-01-18 05:39:01 +08:00
Tomáš Rohlínek
a92d5e9358 fix(storage/fatfsgen): broken test_apps scripts for fatfsgen 2025-01-17 18:31:50 +01:00
Marius Vikhammer
5fdc217858 Merge branch 'docs/correct_ulp_idf_monitor_command_v5.4' into 'release/v5.4'
docs(ulp): Fix esp_idf_monitor command for ulp monitoring (v5.4)

See merge request espressif/esp-idf!36470
2025-01-17 18:05:51 +08:00
Jiang Jiang Jian
ebd04eb2fc Merge branch 'fix/fix_esp32c2_eco4_rx_csa_ld_v54' into 'release/v5.4'
fix(wifi): fix esp32c2eco4 sta_rx_csa ld

See merge request espressif/esp-idf!36203
2025-01-17 17:42:02 +08:00
morris
cad9cc2ab2 Merge branch 'refactor/improve_the_compatible_method_on_h2_v5.4' into 'release/v5.4'
refactor(lpperi): improve compatibility solution (v5.4)

See merge request espressif/esp-idf!36422
2025-01-17 16:56:56 +08:00
Zhou Xiao
1c5f26af2b change(ble): update esp32c2 rom ld file
(cherry picked from commit e5feba6ed3)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2025-01-17 16:54:09 +08:00
Zhou Xiao
bf0ba2bb51 change(ble): [AUTO_MR] Update lib_esp32c2 to 7b7ee440
(cherry picked from commit c263c75897)

Co-authored-by: zhouxiao <zhouxiao@espressif.com>
2025-01-17 16:54:06 +08:00
Zhou Xiao
cc1b79e98c change(ble): [AUTO_MR] Update lib_esp32c6 to bbc1903d
(cherry picked from commit 06a6b311a8)

Co-authored-by: zhouxiao <zhouxiao@espressif.com>
2025-01-17 16:54:04 +08:00
Zhou Xiao
1f8539e9b3 change(ble): [AUTO_MR] Update lib_esp32h2 to bbc1903d
(cherry picked from commit 4f5f0b0954)

Co-authored-by: zhouxiao <zhouxiao@espressif.com>
2025-01-17 16:54:02 +08:00
Sudeep Mohanty
36139f8620 docs(ulp): Fix esp_idf_monitor command for ulp monitoring
The commit fixes the esp_idf_monitor command for monitoring ulp serial
output as mentioned in the docs.
2025-01-17 08:29:19 +01:00
Jiang Jiang Jian
e7e3d5924e Merge branch 'fix/fix_tsens_power_after_modem_wakeup_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix tsensor power enable failed after modem state wakeup (v5.4)

See merge request espressif/esp-idf!36228
2025-01-17 11:45:25 +08:00
Jiang Jiang Jian
58cc66ac65 Merge branch 'ci/iperf_esp32p4_v5.4' into 'release/v5.4'
ci(esp_eth): added ESP32P4 to iperf CI test (v5.4)

See merge request espressif/esp-idf!36389
2025-01-17 11:44:15 +08:00
Jiang Jiang Jian
26fd34b864 Merge branch 'fix/lwip_ping_getnetif_threadsafe_v5.4' into 'release/v5.4'
fix(lwip): Fix ping session calling thread unsafe API (v5.4)

See merge request espressif/esp-idf!36379
2025-01-17 11:43:24 +08:00
Jiang Jiang Jian
192874f939 Merge branch 'change/ble_update_lib_20250103_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250103 - Update ESP BLE Controller Lib (v5.4)

See merge request espressif/esp-idf!36373
2025-01-17 11:42:18 +08:00
wangtao@espressif.com
18aced40f9 fix(wifi): fix esp32c2eco4 sta_rx_csa ld 2025-01-17 11:41:43 +08:00
gaoxiaojie
58df18a361 fix(soc): fix clic register define and add description 2025-01-17 11:40:50 +08:00
Jiang Jiang Jian
74896d4187 Merge branch 'feature/efuse_update_for_esp32h2_eco5_v5.4' into 'release/v5.4'
feat(efuse): Adds efuses for esp32h2 eco5 (v5.4)

See merge request espressif/esp-idf!36238
2025-01-17 11:39:31 +08:00
Jiang Jiang Jian
054a0be454 Merge branch 'bugfix/sync_buf_crash_v5.4' into 'release/v5.4'
fix(bt/controller): fixed missing critical protections on linked-list structure of (e)SCO buffers (v5.4)

See merge request espressif/esp-idf!36340
2025-01-17 11:38:28 +08:00
wanckl
6c6454357c feat(driver_spi): support using SPI_DEVICE_STD_TIMING to adjust master rx in standard timing 2025-01-17 10:51:47 +08:00
Shu Chen
f4e4591180 Merge branch 'fix/set_154_cca_duration_v5.4' into 'release/v5.4'
fix(15.4): set 15.4 energy scan duration before cca (v5.4)

See merge request espressif/esp-idf!36424
2025-01-17 09:27:19 +08:00
Tomas Rezucha
f1fa7b1408 refactor(usb/phy): Merge P4 and S2/S3 PHYs into one module
P4 had separate PHY implementation for initial bring-up,
now we can merge it with the original PHY driver.
2025-01-16 10:19:31 +01:00
Jiang Jiang Jian
fbd97514df Merge branch 'fix/backport_wifi_fixes_v5.4' into 'release/v5.4'
fix(wifi): backport wifi fixes to v5.4

See merge request espressif/esp-idf!36330
2025-01-16 17:16:13 +08:00
morris
9fb37219a2 Merge branch 'refactor/cleanup_usb_phy_v5.4' into 'release/v5.4'
Cleanup USB PHY (backport v5.4)

See merge request espressif/esp-idf!36236
2025-01-16 16:53:31 +08:00
Xu Si Yu
35a590c437 fix(15.4): set 15.4 energy scan duration before cca 2025-01-16 11:45:29 +08:00
laokaiyao
889537960e refactor(lpperi): improve compatibility solution 2025-01-16 10:21:17 +08:00
Ondrej Kosta
a2eba1e25a ci(esp_eth): added ESP32P4 to iperf CI test
Updated (increased) ETH_THROUGHPUT_SPI_ETH limits.
Improved iperf optimization description
2025-01-15 22:53:04 +08:00
Nachiket Kukade
ba8494eb87 fix(wpa_supplicant): Fix some coverity issues in wpa_supplicant
1. Fix leak in SoftAP while sending SAE Confirm
2. Move NULL check before pointer is getting used
3. Remove some dead code
2025-01-15 19:42:12 +05:30
wangtao@espressif.com
08db2390e5 fix(wifi): fix build issue when disable wpa3 sae 2025-01-15 19:42:12 +05:30
Shreyas Sheth
29a95d30cc fix(wifi): Resolve comments for softap fixes 2025-01-15 19:42:12 +05:30
Shreyas Sheth
913999b8c3 fix(wifi): Resolve comments on feature/softap_fixes_for_ceritification 2025-01-15 19:42:11 +05:30
Shreyas Sheth
98c47bbfae fix(wifi): Make sure auth is sent after sae process 2025-01-15 19:42:11 +05:30
Shreyas Sheth
81070bce92 feat(wifi): Add support for transition_disable for softAP
Bugfix rsnxe len for assoc req
2025-01-15 19:42:11 +05:30
liuning
ce124478f1 fix(wifi): fix double max active time, fix coex pwr period cant been updated by ps type set 2025-01-15 19:42:11 +05:30
liuning
fbe0e5a358 feat(coex): update coexist debug default event 2025-01-15 19:42:11 +05:30
Sarvesh Bodakhe
716c5731ec feat(wpa_supplicant): Add WIFI_EVENT_AP_WRONG_PASSWORD in SoftAP
This event is triggered when external station tries connecting to softAP
with wrong password.

Currently supported softAP AUTH modes: WPA-PSK, WPA2-PSK and WPA3-PSK (SAE-auth)
2025-01-15 19:42:11 +05:30
yinqingzhao
3fca3a1223 fix(wifi): expend bit width of channel in rxctrl 2025-01-15 19:42:11 +05:30
yinqingzhao
f890bbe616 feat(wifi): wifi support 80211tx using 11ax and 11ac rate 2025-01-15 19:42:11 +05:30
wangtao@espressif.com
3c8926d3b6 fix(wifi): fix hostap recv unassoc pspoll send deauth issue 2025-01-15 19:42:11 +05:30
Rahul Tank
2ebbfef5f4 Merge branch 'bugfix/fix_compilation_warn_v5.4' into 'release/v5.4'
fix(nimble): Address compilation warnings for different flag combination (v5.4)

See merge request espressif/esp-idf!36392
2025-01-15 21:33:32 +08:00
Roland Dobai
a84b03dd41 Merge branch 'fix/remove_duplicates_from_sdkconfig_renames_v5.4' into 'release/v5.4'
fix: remove duplicit lines from sdkconfig.rename files (v5.4)

See merge request espressif/esp-idf!36346
2025-01-15 17:58:26 +08:00
morris
1cb5c64fc0 Merge branch 'refactor/update_lpperi_regs_for_h2_eco5_v5.4' into 'release/v5.4'
refactor(lpperi): compatible refactor for H2 ECO5 (v5.4)

See merge request espressif/esp-idf!36335
2025-01-15 16:09:59 +08:00
wanckl
86741aebd4 fix(driver_spi): fixed slave example error on esp32p4 2025-01-15 16:03:12 +08:00
wanckl
273f2be226 fix(driver_spi): fixed slave_hd driver transaction alignment check 2025-01-15 16:03:12 +08:00
Rahul Tank
7029c169cb fix(nimble): Fix compilation issues for different flag combinations 2025-01-15 10:09:52 +05:30
morris
a75eab44ba Merge branch 'change/bs_cmake_cleanup_v5.4' into 'release/v5.4'
feat(gdma): added help function to count the bytes in the receive buffer (v5.4)

See merge request espressif/esp-idf!36375
2025-01-15 12:27:10 +08:00
morris
bd5c6b0645 Merge branch 'contrib/github_pr_15144_v5.4' into 'release/v5.4'
fix(twai): TWAI_GENERAL_CONFIG_DEFAULT_V2 initialize general_flags (GitHub PR) (v5.4)

See merge request espressif/esp-idf!36323
2025-01-15 12:26:58 +08:00
Shu Chen
3b41c1a5a0 Merge branch 'feat/update_thread_lib_v5.4' into 'release/v5.4'
fix(openthread): update SRP server to support zero subtype (v5.4)

See merge request espressif/esp-idf!36345
2025-01-15 10:57:46 +08:00
David Cermak
d715abb8fd fix(lwip): Fix ping session calling thread unsafe API
Closes https://github.com/espressif/esp-idf/issues/14982
2025-01-14 11:25:31 +01:00
Zhou Xiao
dace9697b5 change(ble): updated esp_bt.h controller config for ESP32-C5 2025-01-14 17:52:59 +08:00
zwl
6bdfda8169 fix(ble): fixed esp_ble_tx_power_set api issue on ESP32-C5 2025-01-14 17:50:56 +08:00
zwl
be796ba6c7 feat(ble): support for putting ble code into flash on ESP32-C5 2025-01-14 17:50:48 +08:00
zhouxiao
4bcbad08ea change(ble): Update lib_esp32c5 to 3422b706 2025-01-14 17:50:37 +08:00
Zhou Xiao
d4ebd1ec26 fix(ble): fixed ld file for c2eco0 and c2eco4
(cherry picked from commit 937fe2a6e3)

Co-authored-by: zhouxiao <zhouxiao@espressif.com>
2025-01-14 17:45:32 +08:00
morris
2d6bc67fb5 feat(gdma): added API to count the size of rx buffer until eof 2025-01-14 16:39:05 +08:00
Zhou Xiao
52b06af63f fix(ble): fixed esp_ble_tx_power_set api issue on ESP32-H2
(cherry picked from commit d2b62f2130)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-01-14 14:54:51 +08:00
Zhou Xiao
7d6ce29de9 fix(ble): fixed esp_ble_tx_power_set api issue on ESP32-C6
(cherry picked from commit 8d6ec12838)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-01-14 14:54:49 +08:00
Zhou Xiao
a190bae264 fix(ble): fixed esp_ble_tx_power_set api issue on ESP32-C2
(cherry picked from commit 6a752eeb89)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-01-14 14:54:47 +08:00
Zhou Xiao
d1a1156d4d feat(ble): support for putting ble code into flash on ESP32-H2
(cherry picked from commit 5a9acdc379)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-01-14 14:54:45 +08:00
Zhou Xiao
8fb74a1235 feat(ble): support for putting ble code into flash on ESP32-C6
(cherry picked from commit 02d6d6fd73)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2025-01-14 14:54:43 +08:00
Zhou Xiao
00fb58c133 change(ble): Update lib_esp32c2 to 2a00fb0b
(cherry picked from commit 7cd3fe6953)

Co-authored-by: zhouxiao <zhouxiao@espressif.com>
2025-01-14 14:54:40 +08:00
Zhou Xiao
d63157b914 change(ble): Update lib_esp32c6 to 3422b706
(cherry picked from commit 4fc95fa91f)

Co-authored-by: zhouxiao <zhouxiao@espressif.com>
2025-01-14 14:54:38 +08:00
Zhou Xiao
59a90dd17c change(ble): Update lib_esp32h2 to 3422b706
(cherry picked from commit fe5a12e7e7)

Co-authored-by: zhouxiao <zhouxiao@espressif.com>
2025-01-14 14:54:36 +08:00
wuzhenghui
9b7ce542f2 fix(esp_hw_support): fix p4 OTG phy bad suspend cause high power consumption on sleep 2025-01-14 14:22:39 +08:00
Mahavir Jain
9acf088718 Merge branch 'bugfix/update_api_to_get_url_correctly_v5.4' into 'release/v5.4'
fix(esp_http_client): updated API esp_http_client_get_url() to get URL in correct format (v5.4)

See merge request espressif/esp-idf!36331
2025-01-14 12:45:07 +08:00
Jan Beran
350d38f989 fix: remove duplicit lines from sdkconfig.rename files 2025-01-13 09:07:21 +01:00
Mahavir Jain
c8bb53292d Merge branch 'fix/return_esp_err_t_for_httpd_req_get_url_query_str_v5.4' into 'release/v5.4'
feat(https_server): Added checks to verify if uri is empty (v5.4)

See merge request espressif/esp-idf!36286
2025-01-13 15:57:45 +08:00
Tan Yan Quan
ddd0843d0e fix(openthread): update SRP server to support zero subtype/v5.4 2025-01-13 15:24:47 +08:00
morris
cf1692c96c Merge branch 'bugfix/reset_axi_gdma_gracefully_v5.4' into 'release/v5.4'
fix(gdma): stop the axi gdma gracefully on CPU SW reset (v5.4)

See merge request espressif/esp-idf!36283
2025-01-13 15:12:26 +08:00
Jin Cheng
6d1b21b167 fix(bt/controller): fixed missing critical protections on linked-list structure of (e)SCO buffers 2025-01-13 14:52:28 +08:00
laokaiyao
25f64d9cbd refactor(lpperi): compatible refactor for H2 ECO5 2025-01-13 14:36:00 +08:00
nilesh.kale
90d2dbad99 fix(esp_http_client): updated API esp_http_client_get_url to get URL in correct format
This commit updates the API to include the port number in the URL,
which was previously missing.
2025-01-13 11:14:20 +05:30
Rahul Tank
c6637ae369 Merge branch 'bugfix/fix_few_nimble_issues_v5.4' into 'release/v5.4'
fix(nimble): Fix few nimble issues 11012025 (v5.4)

See merge request espressif/esp-idf!36310
2025-01-13 13:24:50 +08:00
Shu Chen
1ceb4e4682 Merge branch 'feature/154_api_enhancement_for_mp_v5.4' into 'release/v5.4'
feat(802.15.4): support register isr callback (v5.4)

See merge request espressif/esp-idf!36198
2025-01-13 10:57:07 +08:00
morris
6af9dc6934 test(twai): add cxx build test 2025-01-13 10:13:56 +08:00
Nebojsa Cvetkovic
b1abc47d74 fix(twai): TWAI_GENERAL_CONFIG_DEFAULT_V2 initialize general_flags
Closes https://github.com/espressif/esp-idf/pull/15144
2025-01-13 10:13:53 +08:00
morris
93f91c4f0f Merge branch 'ci/re_enable_i2s_pytest_exceptions_v5.4' into 'release/v5.4'
ci(i2s): re-enable example pytest exceptions (v5.4)

See merge request espressif/esp-idf!36312
2025-01-11 22:13:32 +08:00
laokaiyao
c61b2c4095 ci(i2s): re-enable example pytest exceptions 2025-01-10 20:20:04 +08:00
Abhinav Kudnar
3f4dd2bf35 feat(nimble): Additional changes in PAWR IDF Examples/support for ESP IP 2025-01-10 17:11:32 +05:30
Rahul Tank
99af3abadf fix(nimble): Fixed a typo in Kconfig file 2025-01-10 17:11:16 +05:30
Astha Verma
d9de2b7dde fix(nimble): Added HCI_Read_Remote_Version_Information command 2025-01-10 17:10:43 +05:30
Rahul Tank
1bbc6fb9b8 fix(nimble): Clear our and peer security records during unpair 2025-01-10 17:09:51 +05:30
Roland Dobai
72112c3fda Merge branch 'feature/add_utf_8_decoding_v5.4' into 'release/v5.4'
feat(tools): Enforced utf-8 encoding with Python open() functions (v5.4)

See merge request espressif/esp-idf!36125
2025-01-10 19:26:10 +08:00
Roland Dobai
f6ad4d5056 Merge branch 'fix/test_idf_gdb_v5.4' into 'release/v5.4'
test(system): mark gdb test runners properly (v5.4)

See merge request espressif/esp-idf!35586
2025-01-10 18:15:32 +08:00
Island
fe24a1c835 Merge branch 'feat/add_config_for_ble_vs_qa_cmd_v5.4' into 'release/v5.4'
fixed interrupt WDT when shutdown bt controller on ESP32(ba6739f) (v5.4)

See merge request espressif/esp-idf!36176
2025-01-10 14:17:41 +08:00
Marek Fiala
b37383f75b feat(tools): Enforce utf-8 encoding with open() function 2025-01-10 13:52:58 +08:00
Roland Dobai
73d1c139e7 Merge branch 'ci/improve_overall_logging_v5.4' into 'release/v5.4'
ci: target-test job skip installing toolchain, only install python env (v5.4)

See merge request espressif/esp-idf!34905
2025-01-10 13:52:24 +08:00
zwx
699af05b57 feat(802.15.4): introduced a feature for registering 802.15.4 ISR callbacks 2025-01-10 13:51:30 +08:00
hrushikesh.bhosale
f96a118ebf feat(https_server): Added checks to verify if uri is empty
Added the checks if the URI is empty for the funtions httpd_req_get_url_query_len
and httpd_req_get_url_query_str in httpd_parser.c
2025-01-10 11:09:31 +05:30
morris
098ecb1cf1 Merge branch 'bugfix/uart_single_wire_mode_v5.4' into 'release/v5.4'
fix(uart): allow same pin for tx and rx in uart_set_pin; UART_SELECT_READ_NOTIF race conditon fix (v5.4)

See merge request espressif/esp-idf!36250
2025-01-10 11:39:53 +08:00
wuzhenghui
667011cd46 fix(esp_hw_support): fix tsens power enable failed after modem state wakeup 2025-01-10 10:21:39 +08:00
morris
605fb6e894 fix(dma): abort the axi dma gracefully on CPU SW reset 2025-01-10 10:14:36 +08:00
Fu Hanxi
be2ec1615c ci: target-test job skip installing toolchain, only install python env
also run with collapsed time section to better track run time
2025-01-10 02:25:32 +08:00
Fu Hanxi
7e465dd526 ci: ignore test-specific 3rd-party libs while building clang projects 2025-01-10 02:25:32 +08:00
Fu Hanxi
e1781df75b feat: idf_tools.py export support env var "IDF_SKIP_TOOLS_CHECK" 2025-01-10 02:25:32 +08:00
Fu Hanxi
f326d5d7ce ci: print esp-coredump output when failed in panic tests 2025-01-10 02:25:32 +08:00
Fu Hanxi
ffdb0f012e ci: remove gcc dependency in target test 2025-01-10 02:25:32 +08:00
Fu Hanxi
257878ddb4 ci: change logging level from debug to info for build jobs 2025-01-10 02:25:32 +08:00
Fu Hanxi
ffbdd8a145 ci: add timeout for build jobs 2025-01-10 02:25:32 +08:00
Fu Hanxi
e0f374d92b ci: stop print presigned url, since the credential is masked 2025-01-10 02:25:32 +08:00
Erhan Kurubas
8aabaea4f5 change(cmake): use board configuration file for ftdi interface 2025-01-09 12:39:23 +01:00
Erhan Kurubas
e565643a3b test(system): mark gdb test runners properly 2025-01-09 12:37:19 +01:00
Roland Dobai
5bb41c4932 Merge branch 'feature/move-gdb-options-to_project_description_json_v5.4' into 'release/v5.4'
feat(debugging): move gdbinit generation to CMake (v5.4)

See merge request espressif/esp-idf!35175
2025-01-09 18:58:23 +08:00
morris
a45778a028 Merge branch 'feat/ldo_can_output_3v3_v5.4' into 'release/v5.4'
feat(ldo): support output rail voltage (3.3V) (v5.4)

See merge request espressif/esp-idf!36130
2025-01-09 17:15:00 +08:00
Jiang Jiang Jian
db6e451f14 Merge branch 'bugfix/channel_resolution_calculation_v5.4' into 'release/v5.4'
fix(rmt): channel resolution divider rounding issue (v5.4)

See merge request espressif/esp-idf!36032
2025-01-09 11:38:53 +08:00
Jiang Jiang Jian
5747e16f74 Merge branch 'fix/blufi_example_mem_access_v5.4' into 'release/v5.4'
fix(ble/blufi): Fixed blufi example security issue (v5.4)

See merge request espressif/esp-idf!36164
2025-01-09 11:38:08 +08:00
Jiang Jiang Jian
dd00aa1776 Merge branch 'fix/heap-allocate-in-rtc-iram_v5.4' into 'release/v5.4'
fix(heap): MALLOC_CAP_EXEC does not allocate in RTC IRAM (backport v5.4)

See merge request espressif/esp-idf!35623
2025-01-09 11:36:16 +08:00
Jiang Jiang Jian
7317a6213c Merge branch 'docs/update_cn_vfs_v5.4' into 'release/v5.4'
docs: Update CN translation for vfs.rst (v5.4)

See merge request espressif/esp-idf!35404
2025-01-09 11:35:25 +08:00
Island
4986601e66 Merge branch 'bugfix/fix_some_ble_bugs_241224_esp32c3_v5.4' into 'release/v5.4'
Fixed some BLE bugs 241224 on ESP32C3(fd62b31) (v5.4)

See merge request espressif/esp-idf!36196
2025-01-09 11:35:07 +08:00
chenjianhua
ecf663cb7d fix(bt): Update bt lib for ESP32(ba6739f)
- Fixed assert in lld_evt.c at line 2353
- Fixed interrupt WDT when shutdown bt controller
- Added config for BLE vendor HCI QA command
- Added config for BLE channel assessment and ping procedure
2025-01-09 10:39:10 +08:00
Island
96c2beeef2 Merge branch 'docs/refactor_ceva_bt_controller_api_v5.4' into 'release/v5.4'
docs(ble): Refactored the API reference for esp32/c3/s3 BT controller (v5.4)

See merge request espressif/esp-idf!35353
2025-01-09 10:36:03 +08:00
Wei Yu Han
3e49a5fb68 docs(ble): Refactored the API reference for esp32/c3/s3 BT controller (v5.4) 2025-01-09 10:36:03 +08:00
Marius Vikhammer
8612033b17 Merge branch 'fix/ringbuf_receives_after_aq_wraparound_v5.4' into 'release/v5.4'
fix(esp_ringbuf): Fixed no-split ringbuf issue where acquire pointer  wraps around (v5.4)

See merge request espressif/esp-idf!35867
2025-01-09 09:30:18 +08:00
morris
ac6e1341c4 Merge branch 'fix/flash_noos_issues_v5.4' into 'release/v5.4'
flash: fixed some no_os API issues (v5.4)

See merge request espressif/esp-idf!35791
2025-01-08 22:12:16 +08:00
Rahul Tank
92fab01566 Merge branch 'bugfix/fix_csfc_write_nvs_v5.4' into 'release/v5.4'
fix(nimble): Corrected storing method of csfc to nvs (v5.4)

See merge request espressif/esp-idf!36165
2025-01-08 21:47:47 +08:00
Alex Bethel
441effd499 docs: Fix gpio_dump_io_configuration typo in docs
The mentioned `gpio_dump_all_io_configuration` function doesn't exist,
the correct function is `gpio_dump_io_configuration`.

Merges https://github.com/espressif/esp-idf/pull/15031
2025-01-08 20:40:53 +08:00
Song Ruo Jing
131330034a fix(uart): allow same pin for tx and rx in uart_set_pin
Closes https://github.com/espressif/esp-idf/issues/14787
2025-01-08 20:38:11 +08:00
Sergei Silnov
6d888a9584 Merge branch 'ci/pre-commit-idf-build-apps-version_v5.4' into 'release/v5.4'
ci: update idf-build-apps version in pre-commit (v5.4)

See merge request espressif/esp-idf!35465
2025-01-08 19:58:56 +08:00
Song Ruo Jing
f693485ad0 fix(uart): fix race condition with the use of UART_SELECT_READ_NOTIF
UART_SELECT_READ_NOTIF needs to be sent after received data got processed
to avoid the potential race condition
2025-01-08 19:44:36 +08:00
Konstantin Kondrashov
a98c20d4e0 feat(espefuse): Adds efuses for esp32h2 eco5
- Support efuses that are not present in the main efuse table
2025-01-08 11:16:49 +02:00
Tomas Rezucha
f93e1bc43b refactor(usb/phy): Start using values from usb_dwc_info in PHY driver
Add tests for PHY sanity checks
2025-01-08 09:26:48 +01:00
Tomas Rezucha
b78bcaea36 refactor(usb/phy): Do not use deprecated variables in usb_phy 2025-01-08 09:26:41 +01:00
Tomas Rezucha
ac3a3f801d feat(hal/usb): Explicitly enable clock and reset USB WRAP on init 2025-01-08 09:25:42 +01:00
Shu Chen
d43f647f80 Merge branch 'feat/support_setting_event_for_154_txrx_5_4' into 'release/v5.4'
feat(15.4): support setting 15.4 txrx pti when coex is enabled (backport to 5.4)

See merge request espressif/esp-idf!36109
2025-01-08 16:09:36 +08:00
Rahul Tank
128534dd66 fix(nimble): Corrected storing method of csfc to nvs 2025-01-08 13:04:31 +05:30
Marius Vikhammer
dc23968cc2 Merge branch 'fix/esp32p4_unexpected_reset_v5.4' into 'release/v5.4'
fix(system): avoid unexcpected hp_sys_wdt reset (v5.4)

See merge request espressif/esp-idf!35801
2025-01-08 13:40:40 +08:00
morris
c4b2f65031 Merge branch 'feat/rmt_return_real_channel_resolution_v5.4' into 'release/v5.4'
feat(rmt): add API to return the real clock resolution of a channel (v5.4)

See merge request espressif/esp-idf!35901
2025-01-08 11:23:31 +08:00
Marius Vikhammer
589020f0df Merge branch 'docs/remove_coex_doxy_v5.4' into 'release/v5.4'
docs(doxygen): removed coex header from doxyfile (v5.4)

See merge request espressif/esp-idf!36222
2025-01-08 10:32:51 +08:00
morris
cfc878a650 Merge branch 'refactor/cleanup_usb_phy_backport_v5.4' into 'release/v5.4'
fix(usb/host): Fix reaction on High-Speed NYET packet (backport v5.4)

See merge request espressif/esp-idf!36119
2025-01-08 10:22:50 +08:00
Marius Vikhammer
ef9bbf344b docs(doxygen): removed coex header from doxyfile
Failing to build due to missing comments, but the header was
never included in the docs anyway, so might as well remove it.
2025-01-08 09:38:35 +08:00
Rahul Tank
ad9e0d5b7c Merge branch 'bugfix/ble_common_issues_v5.4' into 'release/v5.4'
Bugfix/ble common issues v5.4

See merge request espressif/esp-idf!35790
2025-01-07 23:35:21 +08:00
Armando
4a9fb951cf fix(cache): fixed cache hal ctx not initialised in app issue 2025-01-07 20:08:02 +08:00
Armando
8c8f8836e5 fix(spi_flash): fixed no_os flash API not consider branch predictor on c5/c61 2025-01-07 20:08:02 +08:00
Armando
49826c241b fix(spi_flash): fixed no_os flash API not consider cache states issue on h2/p4/c6/c5/c61 2025-01-07 20:08:02 +08:00
Erhan Kurubas
954132b68a fix(system): avoid unexcpected hp_sys_wdt reset 2025-01-07 20:07:17 +08:00
Rahul Tank
71b0d14b21 fix(nimble): Fix compilation issue in esp_hid_host example 2025-01-07 16:27:20 +05:30
Rahul Tank
8163aa8496 fix(nimble): Address few coverity reported issues
1. Overflowed constant (INTEGER_OVERFLOW): Added change to typecast
value
2. Structurally dead code: Removed dead code
3. Resource leak: Added a free for allocated memory, in case of failure
4. too_few_printf_args: Corrected print statement to pass arguments
5. Fixed nesting levels
6. Fixed unused value warnings
7. Illegal memory access fix
2025-01-07 16:27:18 +05:30
Abhinav Kudnar
c28509987c fix(nimble): Save the gatt context in case of preemption 2025-01-07 16:23:19 +05:30
Rahul Tank
594137b0e3 fix(nimble): Fix compilation issue for combination of Ext Adv and Reattempt conn flag 2025-01-07 16:23:19 +05:30
Rahul Tank
8108f35850 fix(nimble): Add ATT Tx queue cleanup during link disconnection 2025-01-07 16:23:19 +05:30
Rahul Tank
0dc38beb81 fix(nimble): Fix compilation issues when BLE_MAX_STORE_BOND is set to 0 2025-01-07 16:23:19 +05:30
Shreeyash
b5dd19e613 fix(nimble): Added a check for invalid offset 2025-01-07 16:23:19 +05:30
shreeyash
0aab10f023 fix(nimble): Updated peer OTA address type 2025-01-07 16:23:19 +05:30
Astha Verma
53744fe62c fix(nimble): fix memory leak issue in Blufi example 2025-01-07 16:23:19 +05:30
Astha Verma
f84739cce0 fix(nimble): Added a function for printing HCI error definition 2025-01-07 16:23:19 +05:30
Abhinav Kudnar
408d841dfe fix(nimble): Changing esp_rom_printf to ESP_LOGI when memory allocation fails 2025-01-07 16:23:18 +05:30
Rahul Tank
fc3ecc2527 fix(nimble): Corrected link_estab event handling parameters 2025-01-07 16:23:17 +05:30
Shu Chen
ebd77e121d Merge branch 'feat/set_get_ack_timeout_v5.4' into 'release/v5.4'
feat(802.15.4): add api for set/get ack timeout (v5.4)

See merge request espressif/esp-idf!36085
2025-01-07 14:54:16 +08:00
Zhuang Hang
e9220ca8e6 feat(802.15.4): add api for set/get ack timeout (v5.4) 2025-01-07 14:54:16 +08:00
Chen Jian Hua
331e368647 fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(fd62b31)
- Fixed periodic adv enable params checking
- Fixed BLE assert lld_scan.c 1728 when receiving directed adv
- Support resolving RPA to identity address when creating connection
- Fixed BLE assert rwble.c 505 param 00400010
- Fixed peer address type error in HCI LE meta event
- Fixed setting random address failed when extended adv is enabled


(cherry picked from commit 326f391f9c)

Co-authored-by: chenjianhua <chenjianhua@espressif.com>
2025-01-07 14:33:39 +08:00
Rahul Tank
03a4e24394 fix(nimble): Fixes for security vulnerabilities reported in NimBLE 2025-01-07 10:19:30 +05:30
Astha Verma
bc29f45224 fix(nimble): added a function for printing HCI error definition 2025-01-07 10:19:30 +05:30
Xu Si Yu
59cd4c481d feat(15.4): support setting 15.4 txrx pti when coex is enabled 2025-01-07 12:23:24 +08:00
Xu Si Yu
a4843338e8 fix(openthread): fix openthread radio spinel deinit 2025-01-07 12:22:16 +08:00
Xu Si Yu
17ec36e3e0 fix(openthread): fix a naming error of kconfig 2025-01-07 12:21:38 +08:00
Shu Chen
488c9c6d3f Merge branch 'feature/change_ot_ci_cases_wlan_to_ethernet_v5.4' into 'release/v5.4'
feat(openthread): change wlan to ethernet (Backport v5.4)

See merge request espressif/esp-idf!35742
2025-01-07 10:58:54 +08:00
Jiang Jiang Jian
6345fd74a4 Merge branch 'bugfix/enable_eap_workarounds_v5.4' into 'release/v5.4'
fix(esp_wifi): Enable EAP workarounds by default (v5.4)

See merge request espressif/esp-idf!36152
2025-01-07 10:56:16 +08:00
Jiang Jiang Jian
f58ca2bde3 Merge branch 'fix/fix_flash_clock_changed_after_sleep_bak_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix mspi clock freq changed after lightsleep (v5.4)

See merge request espressif/esp-idf!36002
2025-01-07 10:55:43 +08:00
Jiang Jiang Jian
7cd2a1483e Merge branch 'fix/fix_p4_deepsleep_io_leakage_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix esp32p4 JTAG pad deepsleep current leakage (v5.4)

See merge request espressif/esp-idf!36008
2025-01-07 10:53:13 +08:00
Jiang Jiang Jian
ca4133f2c3 Merge branch 'fix/fix_flash_leakage_workaroud_config_dependcy_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix FLASH leakage workaround kconfig dependcy (v5.4)

See merge request espressif/esp-idf!35990
2025-01-07 10:52:25 +08:00
Jiang Jiang Jian
0cdeed5329 Merge branch 'fix/fix_pm_trace_rtc_domain_keeping_v5.4' into 'release/v5.4'
fix(esp_pm): enable RTC_PERIPH domain once in esp_pm_trace_init (v5.4)

See merge request espressif/esp-idf!35997
2025-01-07 10:52:07 +08:00
Jiang Jiang Jian
805b4d3158 Merge branch 'bugfix/fix_some_wifi_bugs_20241221_v5.4' into 'release/v5.4'
fix some wifi bugs 20241221(Backport v5.4)

See merge request espressif/esp-idf!35861
2025-01-07 10:51:30 +08:00
Jiang Jiang Jian
93f7ae66c2 Merge branch 'ci/add_build_test_eco_versions_v5.4' into 'release/v5.4'
ci: add build test for eco versions (v5.4)

See merge request espressif/esp-idf!35818
2025-01-07 10:50:58 +08:00
Jiang Jiang Jian
19dcf3c1a8 Merge branch 'fix/lwip_autoip_next_addr_after_rate_limit_v5.4' into 'release/v5.4'
fix(lwip): Fix AUTOIP new address after rate limit (v5.4)

See merge request espressif/esp-idf!35842
2025-01-07 10:50:32 +08:00
Jiang Jiang Jian
55fb426d2e Merge branch 'bugfix/fix_sniffer_fail_on_ci_v5.4' into 'release/v5.4'
fix(ci): Enlarge the pcap memory size in sniffer example (v5.4)

See merge request espressif/esp-idf!35698
2025-01-07 10:49:48 +08:00
Jiang Jiang Jian
6d7225f336 Merge branch 'bugfix/ws_head_buf_size_v5.4' into 'release/v5.4'
fix(tcp_transport): Fix websocket header read to handle overflow (v5.4)

See merge request espressif/esp-idf!35667
2025-01-07 10:49:25 +08:00
Jiang Jiang Jian
5b09d8d66e Merge branch 'fix/esp_netif_ppp_nullptr_check_v5.4' into 'release/v5.4'
fix(esp_netif): Prevent null deref when checking netif type (v5.4)

See merge request espressif/esp-idf!35670
2025-01-07 10:48:30 +08:00
Jiang Jiang Jian
95dd312cb0 Merge branch 'bugfix/fix_ble_disconn_error_on_c61_v5.4' into 'release/v5.4'
fix(ble): fix btbb retention register size on esp32c61 (v5.4)

See merge request espressif/esp-idf!35257
2025-01-07 10:47:51 +08:00
Jiang Jiang Jian
176b9c9dba Merge branch 'fix/fix_esp32c2_ld_issue_v54' into 'release/v5.4'
fix(wifi): fix esp32c2 ld issue

See merge request espressif/esp-idf!35610
2025-01-07 10:47:32 +08:00
Jiang Jiang Jian
9b9f991ec5 Merge branch 'enable_esp32c5_ci_test_v5.4' into 'release/v5.4'
fix(ci): enable esp32c5 eco1 ci test (Backport v5.4)

See merge request espressif/esp-idf!34899
2025-01-07 10:46:33 +08:00
morris
8379cd7b92 Merge branch 'feature/isp_dvp_example_v5.4' into 'release/v5.4'
feat(dvp_isp_dsi_example): add new option to connect a DVP camera sensor (ov2640) through ISP_DVP (v5.4)

See merge request espressif/esp-idf!35973
2025-01-07 10:45:23 +08:00
morris
e456840f2c Merge branch 'feat/mcpwm_sleep_retention_support_p4_v5.4' into 'release/v5.4'
feat(mcpwm): support mcpwm sleep retention on p4 (v5.4)

See merge request espressif/esp-idf!35342
2025-01-07 10:42:39 +08:00
morris
92208b309d Merge branch 'feat/support_step_notify_on_h2eco5_v5.4' into 'release/v5.4'
feat(pcnt): support step_notify on esp32h2 eco5 (v5.4)

See merge request espressif/esp-idf!35620
2025-01-07 10:38:10 +08:00
Shu Chen
8b1b4df6f7 Merge branch 'feature/add_rx_buff_statistic_v5.4' into 'release/v5.4'
feat(802.15.4): IEEE802.15.4 add rx buffer statistic (v5.4)

See merge request espressif/esp-idf!35639
2025-01-07 10:34:54 +08:00
Shu Chen
89e47be331 Merge branch 'feat/example_connect_thread_v5_4' into 'release/v5.4'
feat(protocol_examples_common): Add Thread connect to support Thread for the protocol examples(v5.4)

See merge request espressif/esp-idf!36090
2025-01-07 10:34:12 +08:00
Shu Chen
0731b3c14d Merge branch 'feature/use_fixed_dut_in_ot_ci_cases_v5.4' into 'release/v5.4'
feat(openthread): use fixed port in ot ci cases (Backport v5.4)

See merge request espressif/esp-idf!36048
2025-01-07 10:34:02 +08:00
Shu Chen
2e06b60757 Merge branch 'fix/openthread_dns_hook_v5_4' into 'release/v5.4'
fix(openthread): Fix external DNS resolve hook for DNS64 client(v5.4)

See merge request espressif/esp-idf!35983
2025-01-07 10:33:49 +08:00
Shu Chen
97a13a769a Merge branch 'fix/add_macros_for_otbr_v5.4' into 'release/v5.4'
fix(openthread): add macros for ot_br (v5.4)

See merge request espressif/esp-idf!35892
2025-01-07 10:33:38 +08:00
Shu Chen
487b522629 Merge branch 'fix/thread-lib-v54' into 'release/v5.4'
fix(openthread): update esp-thread-lib branch (v5.4)

See merge request espressif/esp-idf!35812
2025-01-07 10:33:31 +08:00
Shu Chen
e2edf1318b Merge branch 'fix/disable_border_agent_default_v5_4' into 'release/v5.4'
fix(openthread): Disable Border Agent features by default(v5.4)

See merge request espressif/esp-idf!35550
2025-01-07 10:33:17 +08:00
Shu Chen
976f186a10 Merge branch 'fix/add_delay_before_command_in_ot_ci_case_v5.4' into 'release/v5.4'
feat(openthread): add delay before execute wifi command in openthread ci cases (Backport v5.4)

See merge request espressif/esp-idf!35422
2025-01-07 10:33:01 +08:00
morris
7a04d353b5 Merge branch 'feat/support_i80_lcd_via_parlio_v5.4' into 'release/v5.4'
refactor(i80_lcd): adapt example to lvgl9 (v5.4)

See merge request espressif/esp-idf!35519
2025-01-07 10:31:48 +08:00
morris
c670044eab Merge branch 'feature/uart_sleep_retention_support_c5_c61_v5.4' into 'release/v5.4'
feat(uart): support uart sleep retention on C5/C61 (v5.4)

See merge request espressif/esp-idf!35400
2025-01-07 10:29:23 +08:00
morris
51bae98066 Merge branch 'bugfix/uart_vfs_read_behavior_v5.4' into 'release/v5.4'
fix(uart_vfs): read() now aligned to POSIX defined behavior (v5.4)

See merge request espressif/esp-idf!35392
2025-01-07 10:28:54 +08:00
morris
2ad251bd1d Merge branch 'bugfix/ledc_get_freq_calc_v5.4' into 'release/v5.4'
fix(ledc): fix ledc_get_freq calculation err due to overflow (v5.4)

See merge request espressif/esp-idf!36005
2025-01-07 10:28:30 +08:00
morris
b8820cf4be Merge branch 'feat/xmc_32d_support_v5.4' into 'release/v5.4'
feat(spi_flash): support 120M on xmc25q32d flash (backport v5.4)

See merge request espressif/esp-idf!36078
2025-01-07 10:28:11 +08:00
morris
f36f04ef0d feat(ldo): support output rail voltage (3.3V) 2025-01-06 18:52:29 +08:00
Island
5bac8a9382 Merge branch 'docs/add_ble_qualification_table_v5.4' into 'release/v5.4'
docs(ble): Added BLE Qualification Information to API Guides (v5.4)

See merge request espressif/esp-idf!35711
2025-01-06 17:33:09 +08:00
Wei Yu Han
6f4b1d8767 docs(ble): Added BLE Qualification Information to API Guides (v5.4) 2025-01-06 17:33:09 +08:00
Island
f4138ade17 Merge branch 'bugfix/fixed_ble_issues_241220_v5.4' into 'release/v5.4'
Bugfix/fixed ble issues 241220 (v5.4)

See merge request espressif/esp-idf!35924
2025-01-06 17:01:07 +08:00
Sudeep Mohanty
334c9ac268 fix(esp_ringbuf): Fixed no-split ringbuf issue where acquire pointer wraps around
This commit fixes an issue with no-split ring buffers where in the the
buffer did not receive items correctly if the acquire pointer wraps
around before items are sent to it.
2025-01-06 16:45:04 +08:00
Marius Vikhammer
c277ec9e6d Merge branch 'fix/intr_alloc_level_bug_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix a bug in the interrupt allocator related to shared interrupts (backport v5.4)

See merge request espressif/esp-idf!35477
2025-01-06 16:01:46 +08:00
Roland Dobai
bbdc6cfe4f Merge branch 'feat/dfu_p4_backport_v5.4' into 'release/v5.4'
feat(dfu): Enable DFU on ESP32-P4 (backport v5.4)

See merge request espressif/esp-idf!35829
2025-01-06 15:41:29 +08:00
Roland Dobai
a85d7cbe21 Merge branch 'fix/failing_create_readonly_test_on_win_v5.4' into 'release/v5.4'
fix(tools): fixed failing Win CI (tests read_only) (v5.4)

See merge request espressif/esp-idf!36122
2025-01-06 15:40:32 +08:00
Roland Dobai
aac6f2c911 Merge branch 'fix/export_fish_esp_python_v5.4' into 'release/v5.4'
fix(tools): Use ESP_PYTHON with activate.py in export.fish (v5.4)

See merge request espressif/esp-idf!36121
2025-01-06 15:40:14 +08:00
Roland Dobai
ed9f2827cc Merge branch 'fix/missing_header_hint_v5.4' into 'release/v5.4'
fix(hints): improve suggestion for missing header file (v5.4)

See merge request espressif/esp-idf!36043
2025-01-06 15:39:41 +08:00
Roland Dobai
1e788836a5 Merge branch 'fix/honor_idf_python_env_path_v5.4' into 'release/v5.4'
fix(tools): honor IDF_PYTHON_ENV_PATH value (v5.4)

See merge request espressif/esp-idf!35873
2025-01-06 15:39:24 +08:00
Roland Dobai
58137e67b2 Merge branch 'change/bump_up_kconfig_precommit_v5.4' into 'release/v5.4'
ci(pre-commit): bump kconfig checker pre-commit version to 2.4.1 (v5.4)

See merge request espressif/esp-idf!35825
2025-01-06 15:39:10 +08:00
Roland Dobai
6030cf5b1b Merge branch 'feat/add_idf_path_setting_info_v5.4' into 'release/v5.4'
feat(tools): Add info message to install/export scripts about IDF_PATH being set/change. (v5.4)

See merge request espressif/esp-idf!35805
2025-01-06 15:38:58 +08:00
Roland Dobai
25a6b4f71c Merge branch 'fix/tools_pip_upgrade_v5.4' into 'release/v5.4'
fix(idf_tools.py): Upgrade pip and setuptools separately (v5.4)

See merge request espressif/esp-idf!35774
2025-01-06 15:38:29 +08:00
morris
f708e43b03 Merge branch 'refactor/cp_dma_use_gdma_link_v5.4' into 'release/v5.4'
refactor(cp_dma): to use gdma_link driver for descriptor config (v5.4)

See merge request espressif/esp-idf!35443
2025-01-06 15:13:08 +08:00
morris
0646301e81 Merge branch 'feat/rgb_lcd_increase_pclk_v5.4' into 'release/v5.4'
feat(lcd): increase the upper limit of pclk frequency for RGB LCD (v5.4)

See merge request espressif/esp-idf!35928
2025-01-06 15:09:42 +08:00
Island
3412026c77 Merge branch 'fix/ble_mesh_bugs_fixed_v5.4' into 'release/v5.4'
fix(ble_mesh): Miscellaneous update (v5.4)

See merge request espressif/esp-idf!35427
2025-01-06 15:08:31 +08:00
Island
05382efdfe Merge branch 'fix/ble_mesh_enable_high_duty_itvl_on_nimble_v5.4' into 'release/v5.4'
feat(ble_mesh): select BT_NIMBLE_HIGH_DUTY_ADV_ITVL when using random adv itvl (v5.4)

See merge request espressif/esp-idf!35599
2025-01-06 15:08:26 +08:00
Island
9909d42b67 Merge branch 'bugfix/fix_ble_ke_mem_267_assert_v5.4' into 'release/v5.4'
fix(bt/controller): Fixed BLE assert ke_mem.c line 267 on ESP32-C3 and ESP32-S3 (backport v5.4)

See merge request espressif/esp-idf!35335
2025-01-06 15:02:59 +08:00
Island
1937a28539 Merge branch 'bugfix/fix_blufi_prepare_write_v5.4' into 'release/v5.4'
fix(blufi): Fixed crash issue in Blufi example during prepare write operation (v5.4)

See merge request espressif/esp-idf!35717
2025-01-06 15:02:54 +08:00
Island
3146964e1a Merge branch 'bugfix/fix_hid_crash_v5.4' into 'release/v5.4'
fix(ble): Fix crash issue during logging (v5.4)

See merge request espressif/esp-idf!35511
2025-01-06 15:02:48 +08:00
morris
446aa359d3 Merge branch 'feature/efuse_s3_adds_psram_cap_bit_v5.4' into 'release/v5.4'
feat(efuse): Adds 3 bit for PSRAM_CAP efuse field (v5.4)

See merge request espressif/esp-idf!35120
2025-01-06 15:02:01 +08:00
Island
aa87a691a6 Merge branch 'refactor/optimize_ble_gatt_api_doc_v5.4' into 'release/v5.4'
refactor(bt/bluedroid): Optimize BLE GATT related APIs reference (v5.4)

See merge request espressif/esp-idf!35919
2025-01-06 15:01:15 +08:00
Island
faca49d791 Merge branch 'bugfix/fix_set_perfer_ext_conn_param_v5.4' into 'release/v5.4'
fix(bt/bluedroid): Fixed setting perfer conn params complete event report (v5.4)

See merge request espressif/esp-idf!35748
2025-01-06 15:01:09 +08:00
Island
05fa0e76f0 Merge branch 'feat/add_get_started_example_on_bluedroid_v5.4' into 'release/v5.4'
feat(bt/bluedroid): Added BLE get started examples for Bluedroid (v5.4)

See merge request espressif/esp-idf!35653
2025-01-06 15:01:04 +08:00
Island
ae31b783f3 Merge branch 'feat/support_bleqabr24_1539_v5.4' into 'release/v5.4'
feat(bt/bluedroid): Added config for saving BLE bonding keys to NVS (v5.4)

See merge request espressif/esp-idf!35604
2025-01-06 15:01:00 +08:00
morris
0a859b5356 Merge branch 'bugfix/test_esp_flash_write_v5.4' into 'release/v5.4'
fix(spi_flash): Fix Test esp_flash_write (v5.4)

See merge request espressif/esp-idf!35384
2025-01-06 15:00:52 +08:00
morris
f04f21b352 Merge branch 'bugfix/modbus_serial_examples_fix_mode_v54' into 'release/v5.4'
fix(modbus): Fix the mode setup in modbus slave (backport v5.4)

See merge request espressif/esp-idf!36158
2025-01-06 15:00:15 +08:00
Island
ffab5890e4 Merge branch 'fix/optimize_ble_example_ci_build_rule_v5.4' into 'release/v5.4'
fix(ble): Optimizied the bluetooth build test rules (v5.4)

See merge request espressif/esp-idf!35327
2025-01-06 15:00:03 +08:00
morris
da06959166 Merge branch 'bugfix/uart_8_16_bit_access_v5.4' into 'release/v5.4'
fix(uart): fix 8/16-bit uart register access (v5.4)

See merge request espressif/esp-idf!35958
2025-01-06 14:59:09 +08:00
morris
7797db32f6 Merge branch 'docs/update_pcnt_pm_lock_docs_v5.4' into 'release/v5.4'
docs(pcnt): update pcnt pm lock docs (v5.4)

See merge request espressif/esp-idf!36069
2025-01-06 14:56:49 +08:00
morris
6011f69d94 Merge branch 'fix/fix_parlio_tx_example_line_address_v5.4' into 'release/v5.4'
fix(parlio_tx): fix line address in simple_rgb_martix example (v5.4)

See merge request espressif/esp-idf!36070
2025-01-06 14:55:45 +08:00
morris
edb344b56d Merge branch 'feat/allow_to_skip_legacy_driver_conflict_check_v5.4' into 'release/v5.4'
feat(legacy_driver): add kconfig to skip legacy confilct check (v5.4)

See merge request espressif/esp-idf!35615
2025-01-06 14:55:22 +08:00
morris
fd31502ca7 Merge branch 'fix/ble_i2c_v5.4' into 'release/v5.4'
fix(i2c_slave): Support 10-bit address on esp32 (backport v5.4)

See merge request espressif/esp-idf!36055
2025-01-06 14:53:48 +08:00
morris
8da106901a Merge branch 'fix/fix_adc_cali_check_scheme_api_issue_v5.4' into 'release/v5.4'
adc: fixed adc_cali_check_scheme wrong return on c2/h2/c6 (v5.4)

See merge request espressif/esp-idf!35718
2025-01-06 14:53:25 +08:00
morris
cab5334de2 Merge branch 'fix/fix_psram_mode_reg_wrong_timing_v5.4' into 'release/v5.4'
psram: fixed mode reg read bad timing on octal and hex psrams (v5.4)

See merge request espressif/esp-idf!35955
2025-01-06 14:52:13 +08:00
Marius Vikhammer
f335a2d6ea Merge branch 'fix/coredump_checksum_error_v5.4' into 'release/v5.4'
Fix/coredump checksum error (v5.4)

See merge request espressif/esp-idf!35762
2025-01-06 14:38:57 +08:00
Marius Vikhammer
012de83f3c Merge branch 'fix/coredump-gcc-analyzer-warnings_v5.4' into 'release/v5.4'
fix(system): fix GCC-14 analyzer warnings for coredump (v5.4)

See merge request espressif/esp-idf!35521
2025-01-06 14:38:23 +08:00
Island
ceffa4fb73 Merge branch 'feat/support_some_vendor_hci_for_qa_v5.4' into 'release/v5.4'
fix(ble): fixed the connect issue when rx error aa on ESP32-C2 (v5.4)

See merge request espressif/esp-idf!35647
2025-01-06 14:08:32 +08:00
Marius Vikhammer
4defdd90c3 Merge branch 'bugfix/h2_wifi_intr_v5.4' into 'release/v5.4'
fix(interrupt): fixed wrongly reserved interrupt for wifi on H2 (v5.4)

See merge request espressif/esp-idf!36108
2025-01-06 13:35:02 +08:00
morris
c02a6fc523 Merge branch 'bugfix/gdma_burst_config_esp32c5_v5.4' into 'release/v5.4'
fix(gdma): burst size should be configurable on esp32c5 (v5.4)

See merge request espressif/esp-idf!35363
2025-01-06 13:20:35 +08:00
morris
cd1ce6164b Merge branch 'refactor/fine_tune_dphy_pll_v5.4' into 'release/v5.4'
feat(mipi): fine tune DPHY PLL clock (v5.4)

See merge request espressif/esp-idf!35291
2025-01-06 13:20:01 +08:00
morris
e293123154 Merge branch 'bugfix/fix_i2s_24b_buf_size_calc_v5.4' into 'release/v5.4'
fix(i2s): fixed some issues in I2S driver (v5.4)

See merge request espressif/esp-idf!35768
2025-01-06 13:18:16 +08:00
Mahavir Jain
7576f17b20 Merge branch 'bug/wifi_provisioning_failure_even_after_connecting_v5.4' into 'release/v5.4'
fix(esp_wifi_prov): Provisioning App failure on first failed attempt (v5.4)

See merge request espressif/esp-idf!35545
2025-01-06 12:56:34 +08:00
Rahul Tank
0880fc007a Merge branch 'feat/pts_changes_v5.4' into 'release/v5.4'
feat(nimble): BLE 5.4 PTS Related Features and Fixes (v5.4)

See merge request espressif/esp-idf!34974
2025-01-06 12:44:49 +08:00
Wang Meng Yang
b8044d0f74 Merge branch 'bugfix/fix_btqabr2023330_v5.4' into 'release/v5.4'
fix(bt): Fix error code returned by create_conn_cancel_cmd at different status (backport v5.4)

See merge request espressif/esp-idf!35577
2025-01-06 12:23:58 +08:00
Wang Meng Yang
84053a42f4 Merge branch 'bugfix/fix_some_bugs_in_bluedroid' into 'release/v5.4'
fix(bt/bluedroid): Fixed some avrcp cover art related bugs

See merge request espressif/esp-idf!35505
2025-01-06 12:21:49 +08:00
Wang Meng Yang
a1c8f06211 Merge branch 'bugfix/sdp_get_uuid_error_v5.4' into 'release/v5.4'
fix(bt/bluedroid): fixed issues introduced by byte alignment (v5.4)

See merge request espressif/esp-idf!35250
2025-01-06 12:21:46 +08:00
Zhang Hai Peng
668a2ab2ef fix(ble/bluedroid): Fixed BLE feature selection configuration
(cherry picked from commit 117aa74705)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-01-06 11:14:24 +08:00
Zhang Hai Peng
b592934f0a docs(ble/bluedroid): Added BLE log when bond info was deleted
(cherry picked from commit c9cdf51b05)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-01-06 11:14:06 +08:00
Zhang Hai Peng
41e7f893aa docs(ble/bluedroid): Optimize doc for registering BLE callback functions
(cherry picked from commit d84ccadf90)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-01-06 11:14:04 +08:00
Zhang Hai Peng
4d7cd8f23b fix(ble/blufi): Fixed blufi example security issue
(cherry picked from commit 3cb2d9c3c6)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2025-01-06 11:14:02 +08:00
aleks
e5c7999f08 fix(modbus): Fix the mode setup in modbus slave
https://github.com/espressif/esp-idf/pull/14878
2025-01-03 14:09:24 +01:00
Kabir Waraich
6925877bea Update slave.c to fix the mode
There is an issue in the lines that I have changed. I think it was copied over from the enum by mistake.
2025-01-03 14:09:12 +01:00
Kapil Gupta
5abadc5b38 fix(esp_wifi): Enable EAP workarounds by default
Enabling this will make sure our behavior is same as upstream
wpa_supplicant.
2025-01-03 17:42:53 +05:30
Michael (XIAO Xufeng)
6b7b8ea3d2 Merge branch 'update/version_5_4_0' into 'release/v5.4'
Update version to 5.4.0

See merge request espressif/esp-idf!36089
2025-01-03 17:26:43 +08:00
Marek Fiala
524f44dfc3 fix(tools): fixed test_create_project_with_idf_readonly on Win 2025-01-02 12:37:24 +01:00
Marek Fiala
0c476d4361 fix(tools): Use ESP_PYTHON with activate.py in export.fish
Closes https://github.com/espressif/esp-idf/issues/15058
2025-01-02 11:10:55 +01:00
Tomas Rezucha
8e35c7854d fix(usb/host): Fix reaction on High-Speed NYET packet
In Scatter-Gather DMA mode, the USB-DWC will automatically enable
PING protocol if an OUT packet is NACKed by the High-Speed device.
The PING bit must be manually reset.
2025-01-02 10:57:14 +01:00
Marius Vikhammer
79fe10fe1c fix(interrupt): fixed wrongly reserved interrupt for wifi on H2 2025-01-02 16:39:10 +08:00
Xiao Xufeng
67c1de1eeb change(version): Update version to 5.4.0 2024-12-31 14:57:04 +08:00
Xu Si Yu
1569b826ad feat(openthread): update build test rules 2024-12-31 14:22:43 +08:00
WanqQixiang
b1a68f5849 fix(openthread): Fix CI failure of ot_trel example build 2024-12-31 14:22:37 +08:00
WanqQixiang
c5a9e39653 feat(protocol_examples_common): Add Thread connect to support Thread for the protocol examples 2024-12-31 14:22:31 +08:00
C.S.M
3952879feb feat(spi_flash): support 120M on xmc25q32d flash 2024-12-31 11:29:42 +08:00
Michael (XIAO Xufeng)
b70331a9b7 Merge branch 'feat/increase_c2_supported_ver_v5.4' into 'release/v5.4'
feat(soc): increase c2 max supported version (v5.4)

See merge request espressif/esp-idf!35970
2024-12-31 03:15:18 +08:00
Chen Jichang
d3dbbf1351 fix(parlio_tx): fix line address in simple_rgb_martix example 2024-12-30 17:08:43 +08:00
Chen Jichang
0f937a7e90 docs(pcnt): remove pm_lock content in glitch_filter
Closes https://github.com/espressif/esp-idf/issues/15027
2024-12-30 17:05:53 +08:00
Chen Jichang
bcf13b4be7 docs(pcnt): update pcnt power down description 2024-12-30 17:05:53 +08:00
Guillaume Souchere
388ed349e5 fix(heap): MALLOC_CAP_EXEC does not allocate in RTC IRAM
This commit fixes the issue when trying to allocate memory
with the MALLOC_CAP_EXEC in RTC memory. Prior to the fix,
the heap allocator was returning an address in RTC DRAM.

To fix this issue:
- modified memory_layout.c of the concerned targets to fill the iram_address
field in the rtc entry of the soc_memory_region array properly.
- modified heap component  related functions to return IRAM address when
an allocation in RTC memory with MALLOC_CAP_EXEC is requested.

Closes https://github.com/espressif/esp-idf/issues/14835
2024-12-30 08:51:14 +01:00
C.S.M
f29110eee7 fix(i2c_slave): Support 10-bit address on esp32 2024-12-30 13:49:51 +08:00
yiwenxiu
88d639f8cb feat(openthread): use fixed port in ot ci cases 2024-12-30 10:06:12 +08:00
Frantisek Hrbata
6237a97b10 fix(hints): improve suggestion for missing header file
Currently, we are only suggesting that the header file is likely not
part of the component's INCLUDE_DIRS. However, the header file may be
missing also because of the configuration settings. For instance, the
component might be disabled in sdkconfig, or the feature that supplies
the header might not be enabled. Enhance the hint message to address
this scenario as well.

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-12-29 18:56:33 +01:00
morris
d566bd431b fix(rmt): channel resolution divider rounding issue
Closes https://github.com/espressif/esp-idf/issues/15092
2024-12-27 16:57:47 +08:00
wuzhenghui
0609f9111e fix(esp_hw_support): fix mspi clock freq changed after lightsleep 2024-12-26 19:25:48 +08:00
Song Ruo Jing
31d7a2056c fix(ledc): fix ledc_get_freq calculation err due to overflow
Closes https://github.com/espressif/esp-idf/pull/14882
2024-12-26 19:12:07 +08:00
wuzhenghui
c7c70a8ec6 fix(esp_hw_support): fix esp32p4 JTAG pad deepsleep current leakage 2024-12-26 16:03:42 +08:00
wuzhenghui
e49faab8d4 fix(esp_pm): enable RTC_PERIPH domain once in esp_pm_trace_init 2024-12-26 14:09:52 +08:00
Song Ruo Jing
706b5b483e fix(isp): isp_dvp raw->rgb needs a workaround 2024-12-26 12:12:17 +08:00
Song Ruo Jing
274321d82c fix(isp): isp demosaic module should never be disabled for non-raw8 output format 2024-12-26 12:12:17 +08:00
Song Ruo Jing
2830a44495 feat(dvp_isp_dsi_example): add an example shows DVP-ISP-DSI combination 2024-12-26 12:11:21 +08:00
wuzhenghui
7df7db7284 fix(esp_hw_support): fix FLASH leakage workaround kconfig dependcy 2024-12-26 11:35:04 +08:00
WanqQixiang
8af82e8a22 fix(openthread): Fix external DNS resolve hook for DNS64 client 2024-12-26 10:14:30 +08:00
Xiao Xufeng
38b95cf146 feat(soc): increase c2 max supported version 2024-12-25 20:30:15 +08:00
Aditya Patwardhan
0fae01c7b0 Merge branch 'feature/add_support_for_http_1.0_requests_v5.4' into 'release/v5.4'
feat(esp_http_server): add support to handle HTTP 1.0 requests (v5.4)

See merge request espressif/esp-idf!35659
2024-12-25 16:42:32 +08:00
Song Ruo Jing
7167b04e6e fix(uart): fix 8/16-bit uart register access 2024-12-25 15:32:06 +08:00
Armando
e12812a4d7 fix(psram): fixed mode reg read bad timing on octal and hex psrams 2024-12-25 11:00:12 +08:00
morris
00f21c37fe feat(lcd): increase the upper limit of pclk frequency for RGB LCD 2024-12-25 10:29:08 +08:00
zwl
7eaf08631e feat(ble): add dtm configuration command in hci example 2024-12-24 19:26:01 +08:00
Zhao Wei Liang
2e8b169bfe feat(ble): Support get ble controller free heap size on ESP32-C2
(cherry picked from commit 2cb7d2437b)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-12-24 15:21:50 +08:00
Zhao Wei Liang
c881b9e829 feat(ble): Support get ble controller free heap size on ESP32-H2
(cherry picked from commit 12f226be7d)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-12-24 15:21:48 +08:00
Zhao Wei Liang
7ad5dc1fef feat(ble): Support get ble controller free heap size on ESP32-C6
(cherry picked from commit aa7feb9449)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-12-24 15:21:46 +08:00
Zhao Wei Liang
b908018780 feat(ble): fixed some ble issues on ESP32-C2
(cherry picked from commit 5f9a3cdd1a)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-12-24 15:21:44 +08:00
Zhao Wei Liang
e840c84322 feat(ble): adjust bt default scheme position
(cherry picked from commit 446239251c)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-12-24 15:21:42 +08:00
Chen Jian Hua
85bc8bb63c Merge branch 'refactor/optimize_ble_gatt_api_doc' into 'master'
refactor(bt/bluedroid): Optimize BLE GATT related APIs reference

See merge request espressif/esp-idf!34650

(cherry picked from commit 19b5381c99)

7320c77d refactor(bt/bluedroid): Optimize BLE GATT related APIs reference
8a80617c refactor(bt/bluedroid): Optimize BLE GATT related APIs reference
0ac97e98 refactor(bt/bluedroid): Optimize BLE GATT related APIs reference
27b17c69 refactor(bt/bluedroid): Optimize BLE GATT related APIs reference
ea8d7686 docs: Update gattc & gatts api header files
f508772f Apply 3 suggestion(s) to 2 file(s)
03469b52 Apply 2 suggestion(s) to 1 file(s)
aa2cf7a5 docs: fix minor issue
46dc6e96 docs(ble): Replaced "closed" with "terminated" for physical connection.

Co-authored-by: Wei Yu Han <weiyuhan@espressif.com>
2024-12-24 15:20:05 +08:00
laokaiyao
f2f74b8b89 fix(i2s): add check for the tdm frame bits num 2024-12-24 12:12:31 +08:00
Gustavo Litovsky
9dfc163691 change(esp32): undo forcing two slots in I2S
fix(i2s): fixed the issue in PR 14879

Closes https://github.com/espressif/esp-idf/pull/14879

[Kevin: Update to only remove the limitation for PCM short format]
2024-12-24 12:12:31 +08:00
laokaiyao
3d9f6a1299 refactor(i2s): refactor i2s examples common dependencies
Closes https://github.com/espressif/esp-idf/issues/14751

Make the common I2S dependencies as an example common component,
so that to avoid slash & backslash issue on windows
when use absolute include path.
2024-12-24 12:12:31 +08:00
laokaiyao
c828775d8f docs(example): added troubleshooting for i2s_es8311 example
Closes https://github.com/espressif/esp-idf/issues/15047
2024-12-24 12:12:31 +08:00
laokaiyao
7fb15156ae fix(i2s): return error when mclk_div is smaller than 2 2024-12-24 12:12:31 +08:00
laokaiyao
a47e157731 fix(i2s): fixed incorrect buf size calculation 2024-12-24 12:12:31 +08:00
morris
55d5ba38c6 feat(rmt): add API to return the real clock resolution of a channel
Closes https://github.com/espressif/esp-idf/pull/15074
2024-12-24 11:16:50 +08:00
Tan Yan Quan
a3fe6540b6 fix(openthread): add macros for ot_br 2024-12-23 21:30:54 +08:00
muhaidong
e699e8a4ed fix(wifi): fixed blufi connect wep or wpa ap fail issue 2024-12-23 15:49:37 +08:00
muhaidong
9389bde893 fix(phy): fixed calibration warning infomation inaccurate issue
Closes https://github.com/espressif/esp-idf/issues/14963
2024-12-23 15:44:23 +08:00
Marius Vikhammer
25a1ad7e98 Merge branch 'update/version_5_4_0' into 'release/v5.4'
Update version to 5.4.0

See merge request espressif/esp-idf!35879
2024-12-23 14:29:57 +08:00
xiongweichao
0e0588b86f fix(bt): Fixed some controller bugs
- Fix epr not being initiated after authentication is completed
- Fixed the issue HCI_READ_CLOCK returned parameter in slot
- Fixed the missmatching of CLKN and FCNT after clock update
2024-12-23 14:16:49 +08:00
chenqingqing
de01dd8ac8 fix(bt): Fix error code returned by create_conn_cancel_cmd at different status
- Closes https://github.com/espressif/esp-idf/issues/7763
2024-12-23 14:16:49 +08:00
Marius Vikhammer
443e1cfd11 change(version): Update version to 5.4.0 2024-12-23 11:22:27 +08:00
Marius Vikhammer
497858f8d9 Merge branch 'docs/add_html_download_link_v5.4' into 'release/v5.4'
feat(docs): Replace PDF download link with HTML zip download link (v5.4)

See merge request espressif/esp-idf!35832
2024-12-23 09:21:18 +08:00
Frantisek Hrbata
a87fe7aa3a fix(tools): honor IDF_PYTHON_ENV_PATH value
The active.py script is currently clearing the IDF_PYTHON_ENV_PATH,
preventing it from being set to a custom location for the python virtual
environment directory. Although the install script checks to ensure that
an existing python virtual environment is not overwritten with one for a
different ESP-IDF version than it was originally created for, we should
still permit setting a custom path for the python virtual environment.

Closes https://github.com/espressif/esp-idf/issues/15006

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-12-21 09:55:08 +01:00
Zhang Shuxian
d7a8b7374e docs: Update CN translation for dfu 2024-12-20 11:13:40 +01:00
Tomas Rezucha
53135e389c feat(dfu): Enable DFU on ESP32-P4 2024-12-20 11:12:33 +01:00
David Cermak
1816632e65 fix(lwip): Fix AUTOIP new address after rate limit
submodule update: git log --oneline a587d929..fa4dffdf
  - autoip: Choose next address after rate limit (espressif/esp-lwip@fa4dffdfa)
2024-12-20 08:41:17 +01:00
Tan Yan Quan
7564ff78d2 fix(openthread): update esp-thread-lib branch 2024-12-20 12:30:20 +08:00
Marius Vikhammer
50948285c1 feat(docs): Replace PDF download link with HTML zip download link
PDF build would randomly fail after S3 docs grew to a certain size.

At 3k+ pages PDF is not very usable anyways.
For offline use an HTML archive makes more sense.
2024-12-20 10:27:09 +08:00
Jan Beran
5a5a86a16b ci(pre-commit): bump kconfig checker pre-commit version to 2.4.1 2024-12-19 15:45:01 +01:00
Chen Yudong
8c1cad3a67 ci: add build test for eco versions 2024-12-19 21:02:40 +08:00
Marek Fiala
d8296b1fda fix(tools): Enable to use IDF_PATH with export.sh 2024-12-19 13:00:47 +01:00
renpeiying
bd9db4e08c docs: Update CN translation for idf-tools.rst 2024-12-19 10:28:50 +01:00
Marek Fiala
79031f1905 feat(tools): Inform user about IDF_PATH set/change in install/export scripts 2024-12-19 10:28:49 +01:00
Roland Dobai
b6e0bb91e8 fix(idf_tools.py): Upgrade pip and setuptools separately
This way the setuptools version dependency resolution will be done by
the upgraded pip.
2024-12-18 12:57:07 +01:00
Erhan Kurubas
e5079eb28e change(coredump): include coredump own stack into coredump file 2024-12-18 13:15:56 +03:00
Erhan Kurubas
3c22283b6b change(coredump): make sure consistency with written data and calculated checksum 2024-12-18 13:15:56 +03:00
chenjianhua
183e810422 fix(bt/bluedroid): Fixed LE channel selection algorithm event reporting 2024-12-18 11:49:15 +08:00
Chen Jian Hua
7cfafa1d4b fix(bt/bluedroid): Fixed setting perfer conn params complete event report
(cherry picked from commit 4b352d1c4f)

Co-authored-by: xuzhekai <xuzhekai@espressif.com>
2024-12-18 11:33:38 +08:00
Marius Vikhammer
034245938c Merge branch 'ci/docs_master_build_v5.4' into 'release/v5.4'
ci(docs): revert d98e77a4a7 to simplify CI (v5.4)

See merge request espressif/esp-idf!35684
2024-12-18 11:08:35 +08:00
yiwenxiu
a5bde4c061 feat(openthread): change wlan to ethernet 2024-12-18 10:11:03 +08:00
Zhang Hai Peng
e09ef803d6 fix(blufi): Fixed crash issue in Blufi example during prepare write operation
(cherry picked from commit 5acb9c9b5f)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2024-12-17 16:13:44 +08:00
Armando
886a9acbcf fix(adc): fixed adc_cali_check_scheme wrong return on c2/h2/c6 2024-12-17 16:12:43 +08:00
zhangyanjiao
1b84759d02 fix(ci): Enlarge the pcap memory size in sniffer example 2024-12-17 11:15:43 +08:00
Troy
f33430deb4 fix(wifi/mesh): Modify examples/mesh/internal_communication
Delete the secondary judgment of whether it is the root node in the sending task

Closes https://github.com/espressif/esp-idf/pull/14373

Signed-off-by: zhangyanjiao <zhangyanjiao@espressif.com>
2024-12-17 11:15:35 +08:00
xiongweichao
f9e0f46f47 fix(ble): fixed that the resolvable private address does not change when light sleep is enabled 2024-12-17 10:59:15 +08:00
zhanghaipeng
4b1d137342 fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(555b0a2)
- Check Access Address when receive connection request PDU
- Fix issue with BLE5.0 duplicate scan for chained packets
2024-12-17 10:59:05 +08:00
Marius Vikhammer
66c456ab59 ci(docs): revert d98e77a4a7 to simplify CI 2024-12-17 10:08:44 +08:00
David Cermak
ce8af835b2 fix(esp_netif): Prevent null deref when checking netif type
Most esp_netif public API check for invalid arguments, but when enabling
PPP the macros to check netif type could potentially dereference
esp_netif without any null-check.

Releted to https://github.com/espressif/esp-idf/issues/14816
2024-12-16 11:14:50 +01:00
David Cermak
89ef743876 fix(tcp_transport): Fix websocket header read to handle overflow 2024-12-16 11:13:52 +01:00
nilesh.kale
4026e64c32 feat(esp_http_server): add support to handle HTTP 1.0 requests
This commit adds support to handle HTTP/1.0 requests alongside HTTP/1.1 for
legacy compliance purposes.
2024-12-16 14:10:30 +05:30
Chen Jian Hua
a767bcc509 feat(bt/bluedroid): Added BLE get started examples for Bluedroid
(cherry picked from commit d051a2a39d)

Co-authored-by: xuzhekai <xuzhekai@espressif.com>
2024-12-16 11:33:57 +08:00
Zhao Wei Liang
cb90787ac5 fix(ble): fixed the connect issue when rx error aa on ESP32-C2
(cherry picked from commit 6b01a56e09)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-12-16 11:03:53 +08:00
Zhao Wei Liang
a2cc9fc69b feat(ble): support some vendor hci commands on ESP32-H2
(cherry picked from commit 15203f9f35)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-12-16 11:03:51 +08:00
Zhao Wei Liang
5f1053ef43 feat(ble): support some vendor hci commands on ESP32-C6
(cherry picked from commit 5bd66eaa57)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-12-16 11:03:49 +08:00
Tan Yan Quan
ff5d32aa53 feat(802.15.4): add some documentation for txrx statistics and debug record 2024-12-16 10:38:51 +08:00
Tan Yan Quan
ad2846b830 feat(802.15.4): IEEE802.15.4 add documentation and refactor component structure 2024-12-16 10:38:51 +08:00
Tan Yan Quan
52d5a4321c feat(802.15.4): IEEE802.15.4 add some minor edits for readability 2024-12-16 10:38:51 +08:00
Tan Yan Quan
fc1b1b129c feat(802.15.4): IEEE802.15.4 add rx buffer statistic 2024-12-16 10:38:51 +08:00
Ivan Grokhotkov
9dcd2990a7 Merge branch 'feat/vfs_ops_make_all_op_pointers_const_v5.4' into 'release/v5.4'
feat(storage/vfs): make all member pointer of vfs_ops struct const (v5.4)

See merge request espressif/esp-idf!35624
2024-12-13 18:03:24 +08:00
Ivan Grokhotkov
bd0fc67f13 Merge branch 'feature/std_filesystem_supported_v5.4' into 'release/v5.4'
storage: make std::filesystem supported (v5.4)

See merge request espressif/esp-idf!35430
2024-12-13 17:56:42 +08:00
Jiang Jiang Jian
e8e8e2bc2a Merge branch 'bugfix/periph_clk_init_p4_v5.4' into 'release/v5.4'
fix(esp_system): hp periph clk should not be gated on core/system reset (v5.4)

See merge request espressif/esp-idf!35403
2024-12-13 13:55:16 +08:00
Jiang Jiang Jian
829419cef9 Merge branch 'fix/fix_esp32c2eco4_wifi_deinit_crash_issue_v54' into 'release/v5.4'
fix(wifi): fix esp32c2eco4 wifi deinit crash issue v54

See merge request espressif/esp-idf!35391
2024-12-13 13:48:50 +08:00
Song Ruo Jing
77e88f98cd fix(esp_system): still gate hp periph clk on core/system reset for power saving
Leaving only hp periph clk source should not be gated on core/system reset
2024-12-12 21:03:37 +08:00
Song Ruo Jing
192f01c65f fix(esp_system): hp periph clk should not be gated on core/system reset 2024-12-12 21:03:37 +08:00
Tomáš Rohlínek
d6d4de0907 feat(storage/vfs): make all member pointer of vfs_ops struct const 2024-12-12 13:49:46 +01:00
Chen Jichang
3779757cd3 feat(pcnt): support step_notify on esp32h2 eco5 2024-12-12 19:40:20 +08:00
Chen Jichang
3b3a6b4725 feat(legacy_driver): add kconfig to skip legacy confilct check 2024-12-12 18:39:11 +08:00
Michael (XIAO Xufeng)
a0a85db5f5 Merge branch 'fix/adc_monitor_not_work_v5.4' into 'release/v5.4'
fix(esp_adc): fixed adc continue monitor don't work issue (v5.4)

See merge request espressif/esp-idf!35165
2024-12-12 16:55:04 +08:00
wangtao@espressif.com
7f844e0e0f fix(wifi): fix esp32c2 ld issue 2024-12-12 15:02:44 +08:00
Chen Jian Hua
d70e7d6534 fix(bt/bluedroid): Fixed failure to get host status when host is not enabled
(cherry picked from commit 23455ea9c2)

Co-authored-by: chenjianhua <chenjianhua@espressif.com>
2024-12-12 12:33:47 +08:00
Chen Jian Hua
4eda7b124d feat(bt/bluedroid): Added config for saving BLE bonding keys to NVS
(cherry picked from commit 6d1160b2e6)

Co-authored-by: chenjianhua <chenjianhua@espressif.com>
2024-12-12 12:33:44 +08:00
Luo Xu
f6fede26b7 feat(ble_mesh): select BT_NIMBLE_HIGH_DUTY_ADV_ITVL
(cherry picked from commit 6faf0a59fdcf063d40fc1000a209341318131185)

Co-authored-by: luoxu <luoxu@espressif.com>

(cherry picked from commit a7622efd0c)

Co-authored-by: Luo Xu <luoxu@espressif.com>
2024-12-12 12:23:37 +08:00
Chen Jichang
6aa4f8b63e feat(mcpwm): support mcpwm sleep retention on p4 2024-12-12 11:43:54 +08:00
Michael (XIAO Xufeng)
944329fff4 Merge branch 'fix/enhance_i2c_slave_test_stability_v5.4' into 'release/v5.4'
fix(i2c): Fix i2c read from fifo issue when enabling bt/wifi/uart, etc... (backport v5.4)

See merge request espressif/esp-idf!35434
2024-12-12 11:16:24 +08:00
Michael (XIAO Xufeng)
0f1bec184d Merge branch 'bugfix/warn_rc32k_use_in_kconfig_v5.4' into 'release/v5.4'
fix(clk): add an inevitable kconfig option to be selected to use rc32k (v5.4)

See merge request espressif/esp-idf!35285
2024-12-11 23:39:34 +08:00
morris
183834a82c Merge branch 'feat/add_pcnt_gpio_input_config_v5.4' into 'release/v5.4'
docs(pcnt): add gpio input mode documentation (v5.4)

See merge request espressif/esp-idf!35518
2024-12-11 22:09:10 +08:00
morris
714c7738cd Merge branch 'fix/fix_esp32_pico_v3_psram_not_ignored_issue_v5.4' into 'release/v5.4'
psram: fixed esp32p pico-v3 psram init not ignored issue (v5.4)

See merge request espressif/esp-idf!35377
2024-12-11 22:07:25 +08:00
Jiang Jiang Jian
25346eb694 Merge branch 'fix/fix_tg_retention_failure_v5.4' into 'release/v5.4'
fix(esp_driver_gptimer): do gptimer retention by timer unit rather than timer group (v5.4)

See merge request espressif/esp-idf!35354
2024-12-11 20:55:15 +08:00
Jiang Jiang Jian
b3f2e1957b Merge branch 'bugfix/access_null_in_hf_cb_v5.4' into 'release/v5.4'
fix(bt/bluedroid): fixed access NULL in HFP callback handler (v5.4)

See merge request espressif/esp-idf!35407
2024-12-11 20:54:38 +08:00
wanckl
5703a780af fix(esp_adc): fixed adc continue monitor don't work issue
Closes https://github.com/espressif/esp-idf/issues/14769
Closes https://github.com/espressif/esp-idf/issues/14814
2024-12-11 17:36:57 +08:00
Island
b06209230c Merge branch 'bugfix/fix_ble_create_conn_params_copy_v5.4' into 'release/v5.4'
fix(bt/bluedroid): Fixed connection params copying when creating LE connection (v5.4)

See merge request espressif/esp-idf!35406
2024-12-11 14:27:20 +08:00
WanqQixiang
68fbe1dd83 fix(openthread): Disable Border Agent features by default 2024-12-11 10:49:48 +08:00
hrushikesh.bhosale
9e9577b3f2 fix(esp_wifi_prov): Send failure msg on first fail
Added new sta state WIFI_PROV_ATTEMPT_FAILED, which is
returned on first failure with attemps_remaining field.
2024-12-10 17:52:47 +05:30
hrushikesh.bhosale
2bde704d1a fix(esp_wifi_prov): Moved the registering of wifi event handler
Moved the registering of of wifi event handler if under the condition
if device is already provisioned
2024-12-10 17:52:47 +05:30
Erhan Kurubas
190f021ba8 fix(espcoredump): prevent null pointer dereference in panic reason handling 2024-12-09 14:48:39 +01:00
Erhan Kurubas
cd913c60be change(tools): enhance expect_reg_dump to support any or specific core values 2024-12-09 14:48:39 +01:00
Erhan Kurubas
2837c83dc9 fix(espcoredump): fix incorrect pointer usage in checksum update call 2024-12-09 14:48:39 +01:00
Alexey Lapshin
3375c87e55 fix(espcoredump): fix GCC-14 analyzer warnings for coredump 2024-12-09 14:48:39 +01:00
Chen Jichang
5a1e5d04d0 feat(parlio_tx): add check of fifo empty event 2024-12-09 20:35:37 +08:00
Chen Jichang
174fa30ade refactor(i80_lcd): adapt example to lvgl9 2024-12-09 20:35:37 +08:00
Chen Jichang
9b112e2a70 docs(pcnt): add pullup and pulldown documentation
Closes https://github.com/espressif/esp-idf/issues/14277
2024-12-09 20:23:06 +08:00
linruihao
76dbdaadf2 fix(bt/bluedroid): Allow adding empty header in OBEX and GOEP 2024-12-09 17:46:01 +08:00
Zhang Hai Peng
285e4ac4f3 feat(bt): Add support for converting BT HCI logs to btsnoop format
(cherry picked from commit decb24f940)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2024-12-09 17:45:49 +08:00
Zhang Hai Peng
304a655804 fix(blufi): Fixed blufi init fail after deinit
(cherry picked from commit 7addb57ccd)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2024-12-09 17:45:33 +08:00
Zhang Hai Peng
efe62a875c fix(ble): Fixed crash in BLE HID host example during logging
(cherry picked from commit ab1e3c1ffd)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2024-12-09 17:15:14 +08:00
linruihao
ee02d14cd6 change(bt/bluedroid): Remove a duplicate macro in OBEX 2024-12-09 14:26:00 +08:00
linruihao
a8f9246123 feat(bt/bluedroid): Allow using bitwise OR on GOEP return value 2024-12-09 14:25:11 +08:00
linruihao
336f22c097 fix(bt/bluedroid): Fix memory leak in AVRCP cover art get image 2024-12-09 14:24:34 +08:00
linruihao
b9f2be9200 fix(bt/bluedroid): Fix l2cap psm not dereister when obex disconnect 2024-12-09 14:24:25 +08:00
shenmengjing
12f8c24846 docs: Update CN translation for docs in jtag-degugging 2024-12-06 19:36:47 +07:00
Alexey Lapshin
0e57dc044e feat(debugging): move gdbinit generation to CMake
This feature is useful for 3rd-party software to run GDB with predefined
options that described in project_description.json file

allow to pass custom options to "idf.py gdb":

  --gdb-commands: command line arguments for gdb. (without changes)
  -ex: pass command to gdb.
  -x: pass gdbinit file to gdb. Alias for old --gdbinit command
2024-12-06 19:36:41 +07:00
Omar Chebib
ce9bbd66ba fix(esp_hw_support): fix a bug in the interrupt allocator related to shared interrupts
On RISC-V targets, when allocating a shared interrupt, the provided level would
override the current level of the allocated interrupt. As such, a medium level
interrupt could become a low level one and vice versa.
2024-12-06 18:15:38 +08:00
Omar Chebib
1468e5aff2 fix(esp_hw_support): fix the interrupt allocator test app's CMakeLists.txt 2024-12-06 15:11:37 +08:00
igor.udot
6f28a59a27 ci: update idf-build-apps version in pre-commit 2024-12-06 12:04:47 +08:00
C.S.M
37101f5e0f fix(i2c): Fix some issue in programming guide,
Closes https://github.com/espressif/esp-idf/issues/14794
2024-12-05 13:22:51 +08:00
C.S.M
82903b0bc6 fix(i2c): Add bus handle check so that it will not be panic when there is no free bus,
Closes https://github.com/espressif/esp-idf/issues/14819
2024-12-05 13:22:43 +08:00
Jin Cheng
e7e7605d22 fix(bt/bluedroid): fixed access NULL in HFP callback handler 2024-12-05 13:20:50 +08:00
morris
bd45800cd5 refactor(cp_dma): to use gdma_link driver for descriptor config 2024-12-05 11:41:55 +08:00
C.S.M
36834f34cd fix(i2c_slave): Fix the wrong semaphore take in isr 2024-12-04 19:29:05 +08:00
C.S.M
2ab0921a80 fix(i2c): Fix lose byte during data reading in i2c master on esp32,
Closes https://github.com/espressif/esp-idf/issues/12860
2024-12-04 19:28:43 +08:00
C.S.M
2803aed082 fix(i2c): Enhance lp clock source and avoid deadlock,
Closes https://github.com/espressif/esp-idf/issues/14908,
Closes https://github.com/espressif/esp-idf/issues/14906
2024-12-04 19:28:18 +08:00
C.S.M
122b579024 test(i2c): Enhance the stability for i2c tests 2024-12-04 19:28:10 +08:00
Ivan Grokhotkov
da2c883622 docs(cxx): add a section about std::filesystem limitations
Co-authored-by: Shen Meng Jing <shenmengjing@espressif.com>
2024-12-04 11:22:02 +01:00
Ivan Grokhotkov
e3f5a5a347 feat(storage): add a test app for std::filesystem features 2024-12-04 11:22:02 +01:00
Ivan Grokhotkov
80d4c75b89 feat(fatfs): add support for a few fcntl commands 2024-12-04 11:22:02 +01:00
Ivan Grokhotkov
7a214c1fab feat(newlib): add dummy implementations of pathconf, chmod, dirfd
Closes https://github.com/espressif/esp-idf/issues/14174
2024-12-04 11:22:02 +01:00
Nebojša Cvetković
d79c4f7e28 docs(cxx): mark std::filesystem as generally supported (#5003)
Closes https://github.com/espressif/esp-idf/pull/13736
2024-12-04 11:22:01 +01:00
yiwenxiu
9695a404f2 feat(openthread): add delay before execute wifi command in openthread ci cases 2024-12-04 16:52:36 +08:00
Luo Xu
5d7d1a180a fix(ble_mesh): Miscellaneous update
(cherry picked from commit 589ebfc1d6)

Co-authored-by: luoxu <luoxu@espressif.com>
2024-12-04 16:23:41 +08:00
Abhinav Kudnar
1d5cf825b4 feat(nimble): Added PAwR support for nimble with IDF examples 2024-12-03 18:19:00 +05:30
Sumeet Singh
668e739263 fix(nimble): Added
1. Option to disable automatic discovery when receiving out-of-sync
2. Fixed bugs related to robust caching
2024-12-03 18:19:00 +05:30
Sumeet Singh
29d92facf6 feat(nimble): Added ways to enable/disable some menuconfig options at runtime 2024-12-03 18:19:00 +05:30
Sumeet Singh
c93bd21056 feat(nimble): Added option to disable automatically sending extra credits to peer 2024-12-03 18:19:00 +05:30
Sumeet Singh
e2f24fb9fd feat(nimble): Added support for persisting csf characteristic for bonded devices 2024-12-03 18:18:59 +05:30
chenjianhua
526e1b6970 fix(bt/bluedroid): Fixed connection params copying when creating LE connection 2024-12-03 17:52:49 +08:00
shenmengjing
d80b192e89 docs: Update CN translation for vfs.rst 2024-12-03 17:41:44 +08:00
Song Ruo Jing
cfcedfe42d feat(uart): support uart sleep retention on C5/C61 2024-12-03 17:17:14 +08:00
Song Ruo Jing
43175ff671 fix(uart_vfs): read() now aligned to POSIX defined behavior
- For blocking mode, block until data available
- Return with the bytes available in the file at the time,
  it should not block until reaching the requested size

And read() should not realy return on the newline character
Closes https://github.com/espressif/esp-idf/issues/14155
2024-12-03 16:32:01 +08:00
wangtao@espressif.com
84bd87231d fix(wifi): fix esp32c2eco4 wifi deinit crash issue 2024-12-03 16:02:07 +08:00
Konstantin Kondrashov
d00f8b7898 fix(spi_flash): Fix Test esp_flash_write 2024-12-03 09:54:56 +02:00
Armando
a5eb720a9f fix(psram): fixed esp32p pico-v3 psram init not ignored issue
Closes https://github.com/espressif/esp-idf/issues/14970
2024-12-03 15:21:05 +08:00
morris
b5c5c046d6 fix(gdma): burst size should be configurable on esp32c5 2024-12-03 11:21:03 +08:00
Sumeet Singh
ef47084025 feat(nimble): Added option in menuconfig to enable Secure Connections Only mode 2024-12-02 21:04:58 +08:00
Sumeet Singh
0694880e5b fix(nimble): fix and enable connection subrating 2024-12-02 21:04:58 +08:00
Sumeet Singh
ecedb5fc5e fix(nimble): Added option to enable code under Enhanced COC 2024-12-02 21:04:58 +08:00
Sumeet Singh
cc9520b3dc fix(nimble): Fixed Device Information and Scan Parameters service 2024-12-02 21:04:58 +08:00
Sumeet Singh
29ab5643dc fix(nimble): Fixed encrypted advertisement data example 2024-12-02 21:04:58 +08:00
Sumeet Singh
31c8a6ee77 feat(nimble): Added LE GATT Security Levels Characteristic 2024-12-02 21:04:58 +08:00
Sumeet Singh
53a064274f feat(nimble): Added support for EATT Credit Based Flow Control Mode 2024-12-02 21:04:58 +08:00
wuzhenghui
afa697bd74 fix(esp_driver_gptimer): do gptimer retention by timer unit rather than timer group 2024-12-02 19:07:50 +08:00
wuzhenghui
4db067f8dc fix(esp_hw_support): remove p4 wdt retention on entry2 2024-12-02 19:05:04 +08:00
wuzhenghui
6f13d341c6 fix(esp_hw_support): fix retention link dump helper functions 2024-12-02 19:04:06 +08:00
zhiweijian
6103fc1430 fix(bt/controller): Fixed BLE assert ke_mem.c line 267 on ESP32-C3 and ESP32-S3 2024-12-02 15:58:56 +08:00
Wei Yu Han
47605ef8c4 Merge branch 'fix/optimize_ble_example_ci_build_rule' into 'master'
fix(ble): Optimizied the bluetooth build test rules

See merge request espressif/esp-idf!35259

(cherry picked from commit 0163cb8ed0)

67da5f4e fix(ble): Optimizied the bluetooth build test rules
c7deda66 fix(ble): Added ESP32C5 to the supported targets in...
d12fdfed fix(ble): Fixed a typo in nimble/throughput_app/blecent_throughput/README.md
c8288e17 fix(ble): Fixed the rule for esp_hid_device and esp_hid_host examples
fddf6403 fix(ble): enable esp_hid_host testing on ESP32 only
db31513d fix(ble): Added build rule for hci/ble_adv_scan_combined and controller_vhci_ble_adv examples
e76086f1 fix(ble): Added supported chip for examples hci/ble_adv_scan_combined and...
1b05f9e1 docs(ble): Replaced dbm with dBm in esp32c2 controller API reference

Co-authored-by: Island <island@espressif.com>
2024-12-02 14:27:05 +08:00
Song Ruo Jing
623351e791 fix(clk): add an inevitable kconfig option to be selected to use rc32k 2024-12-02 11:15:17 +08:00
Jiang Jiang Jian
daf465c038 Merge branch 'bugfix/pm-215_pm-259_v5.4' into 'release/v5.4'
fix(Power Management): fix_esp32c5_and_esp32c61_ext1_wakeup_failed_after_changing_io

See merge request espressif/esp-idf!35276
2024-11-30 11:24:47 +08:00
Marius Vikhammer
fb271d25d2 Merge branch 'fix/ulp_riscv_interrupt_bug_v5.4' into 'release/v5.4'
fix(ulp): fix ULP RISC-V interrupt handler corrupting the stack (backport v5.4)

See merge request espressif/esp-idf!35225
2024-11-30 10:51:31 +08:00
Jiang Jiang Jian
e767502c6a Merge branch 'bugfix/esp_ringbuf_static_analyzer_v5.4' into 'release/v5.4'
fix(ringbuf): fixed logic errors when compiling with CONFIG_COMPILER_STATIC_ANALYZER (v5.4)

See merge request espressif/esp-idf!35300
2024-11-30 10:37:00 +08:00
Jiang Jiang Jian
25039926a6 Merge branch 'fix/duplicated_enc_restart_request_when_change_key_type_v5.4' into 'release/v5.4'
fix(bt): fixed some issues in esp32 bt controller(backport v5.4)

See merge request espressif/esp-idf!35295
2024-11-30 01:57:46 +08:00
Jiang Jiang Jian
1b4e4d7f83 Merge branch 'backport/backport_some_changes_to_v5.4' into 'release/v5.4'
backport some changes to release/v5.4

See merge request espressif/esp-idf!35283
2024-11-30 01:57:25 +08:00
morris
e7b555de8d feat(mipi): fine tune DPHY PLL clock 2024-11-30 00:29:15 +08:00
Jiang Jiang Jian
3f63fd91ec Merge branch 'bugfix/fix_ble_creat_conn_fail_enh_v5.4' into 'release/v5.4'
fix(ble/bluedroid): Fixed BLE create connection fail because of invalid own address type (v5.4)

See merge request espressif/esp-idf!35019
2024-11-29 23:40:55 +08:00
Li Shuai
7d4af9aedd fix(Power Management): fix_esp32c5_and_esp32c61_ext1_wakeup_failed_after_changing_io 2024-11-29 23:37:52 +08:00
yinqingzhao
0af23ceb2b fix(wifi): fix esp32c5 schan and nchan not take effect on 2.4G 2024-11-29 23:36:51 +08:00
xuxiao
bd21db34b2 fix(wifi): fix esp32c6 can receive data frames where the SA (Source Address) matches its own address 2024-11-29 23:36:51 +08:00
wangtao@espressif.com
8886dba9d1 change(wifi): change softap default dtim period to 1 2024-11-29 23:36:51 +08:00
morris
bbdcabe250 Merge branch 'fix/sdmmc_test_various_cmds_sdmmc_test_sd_skip_if_board_incompatible_emmc_parameter' into 'release/v5.4'
fix: Add missing parameter to a function in sdmmc_tests

See merge request espressif/esp-idf!35294
2024-11-29 22:22:01 +08:00
David Čermák
a47b17e4e0 Merge branch 'fix/lwip_dhcp_timeout_u32_v5.4' into 'release/v5.4'
fix(lwip): Fix DHCP lease overlow using u32 type (v5.4)

See merge request espressif/esp-idf!35274
2024-11-29 18:27:51 +08:00
morris
0f24828900 Merge branch 'docs/update_vscode_extension_link_v5.4' into 'release/v5.4'
docs: Update vscode extension link in get started (v5.4)

See merge request espressif/esp-idf!35302
2024-11-29 18:14:26 +08:00
luweike
c166bf306f docs: Update vscode extension link in get started 2024-11-29 16:06:18 +08:00
Marius Vikhammer
2a04297e64 fix(ringbuf): fixed logic errors when compiling with CONFIG_COMPILER_STATIC_ANALYZER
ESP_STATIC_ANALYZER_CHECK was added to remove some static analyzer warning about
null pointer dereferences that should never happen, but the logic was wrong.

We return pdFALSE if prvReceiveGeneric was called with any of the input pointers
as NULL, but pvItem2 and xItemSize2 will only be non-null for split buffers.

Closes https://github.com/espressif/esp-idf/issues/14905
2024-11-29 15:11:19 +08:00
gongyantao
a3774cae8a fix(bt): fixed some issues in esp32 bt controller
1: fix duplicated lc_enc_restart_req when new lk type is semi-permanent
   key
2: reset PreventEncEvt flag at the end of restart encryption procedure
2024-11-29 14:10:01 +08:00
Jiang Jiang Jian
da9e87a711 Merge branch 'feature/switch_to_new_vfs_api_v5.4' into 'release/v5.4'
feat(storage): switch to new VFS API (v5.4)

See merge request espressif/esp-idf!35282
2024-11-29 13:52:03 +08:00
Jiang Jiang Jian
34a35b9591 Merge branch 'fix/usb_device_msc_storage_example_backport_v5.4' into 'release/v5.4'
fix(tusb_msc): Added SD power supply configuration for p4 (backport v5.4)

See merge request espressif/esp-idf!35102
2024-11-29 13:49:46 +08:00
Adam Múdry
1bc92b46fd fix: Add missing parameter to a function in sdmmc_tests
In sdmmc_test_various_cmds.c in sdmmc_test_sd_skip_if_board_incompatible function
2024-11-29 04:10:10 +01:00
Jiang Jiang Jian
023d772d90 Merge branch 'bugfix/chip823_pll_bug_v5.4' into 'release/v5.4'
fix(H2):fix pll low temp bug(v5.4)

See merge request espressif/esp-idf!35242
2024-11-29 10:47:55 +08:00
Jiang Jiang Jian
20bd6add52 Merge branch 'feature/mmu_page_size_from_app_bin_v5.4' into 'release/v5.4'
feat(bootloader): add support to use MMU page size from app binary (v5.4)

See merge request espressif/esp-idf!35070
2024-11-29 10:44:26 +08:00
Jiang Jiang Jian
236affbff2 Merge branch 'fix/tusb_midi_task_stack_overflow_v5.4' into 'release/v5.4'
fix(examples): tusb_midi task stack overflow fix (v5.4)

See merge request espressif/esp-idf!34933
2024-11-29 10:42:21 +08:00
Jiang Jiang Jian
985090a453 Merge branch 'feature/adds_efuse_adc_calib_data2_v5.4' into 'release/v5.4'
feat(efuse): Adds efuse ADC calib data for P4 C5 C61 (v5.4)

See merge request espressif/esp-idf!35118
2024-11-29 10:41:33 +08:00
Jiang Jiang Jian
850d102ea5 Merge branch 'fix/ble_mesh_heartbeat_bug_v5.4' into 'release/v5.4'
fix(ble_mesh): fixed heartbeat issue (v5.4)

See merge request espressif/esp-idf!34966
2024-11-29 10:29:03 +08:00
Konstantin Kondrashov
223b99aad5 feat(efuse): Adds 3 bit for PSRAM_CAP efuse field 2024-11-29 00:44:51 +08:00
Tomáš Rohlínek
def8b9b639 feat(storage/vfs): move semihost to new vfs API 2024-11-28 13:56:34 +01:00
Tomáš Rohlínek
7fe45180db feat(storage/vfs): move l2tap to new vfs API 2024-11-28 13:56:34 +01:00
Tomáš Rohlínek
0cd2e72dc1 feat(storage/esp_vfs_console): move console to new vfs API 2024-11-28 13:56:33 +01:00
Tomáš Rohlínek
4ff53bc9c7 feat(storage/vfs): move jtag driver to new vfs API 2024-11-28 13:56:33 +01:00
Tomáš Rohlínek
0aa10dcb43 feat(storage/vfs): move uart driver to new vfs API 2024-11-28 13:56:33 +01:00
Tomáš Rohlínek
906b3df54b feat(storage/vfs): move nullfs to new API 2024-11-28 13:56:32 +01:00
Tomáš Rohlínek
39197864a1 feat(storage/vfs): make part of nullfs API private 2024-11-28 13:56:32 +01:00
Tomáš Rohlínek
bb305bd109 feat(storage/esp_vfs_console): move cdcacm driver to new vfs API 2024-11-28 13:56:32 +01:00
Tomáš Rohlínek
e5ab487e3c feat(storage/vfs): update docs to new version of API 2024-11-28 13:56:31 +01:00
Tomáš Rohlínek
6b07039281 feat(storage/spiffs): move spiffs to new VFS API 2024-11-28 13:56:31 +01:00
Tomáš Rohlínek
09d222c38d feat(storage/fatfs): move fatfs to new VFS API 2024-11-28 13:56:31 +01:00
Tomáš Rohlínek
ced490fc6e feat(storage/vfs): make subcomponent pointers const 2024-11-28 13:56:26 +01:00
Jiang Jiang Jian
05b6d92042 Merge branch 'bugfix/esp32c3_eco7_usj_console_v5.4' into 'release/v5.4'
fix(esp_rom): fix esp32c3 eco7 console rom function address (v5.4)

See merge request espressif/esp-idf!34738
2024-11-28 19:55:38 +08:00
David Cermak
d85744af43 fix(lwip): Fix DHCP lease overlow using u32 type 2024-11-28 10:06:14 +01:00
Rahul Tank
5af12cf722 Merge branch 'bugfix/resolve_watchdog_crash_v5.4' into 'release/v5.4'
fix(nimble): Resolved watchdog due to memory exceed prints (v5.4)

See merge request espressif/esp-idf!35209
2024-11-28 14:46:54 +08:00
Jin Chen
a3c9a39304 fix(ble): fix btbb retention register size on esp32c61
(cherry picked from commit ce85e113a9)

Co-authored-by: cjin <jinchen@espressif.com>
2024-11-28 11:34:50 +08:00
morris
830d836fb1 Merge branch 'change/use_uart0_for_ram_app_c5_v5.4' into 'release/v5.4'
ci(ram_app): use uart0 config (v5.4)

See merge request espressif/esp-idf!35245
2024-11-28 11:23:55 +08:00
Island
5e0fe45c25 Merge branch 'bugfix/add_aa_check_on_esp32c2_and_esp32c6_v5.4' into 'release/v5.4'
Bugfix/add aa check on esp32c2 and esp32c6 (v5.4)

See merge request espressif/esp-idf!35234
2024-11-28 11:02:34 +08:00
Shu Chen
dac9e60690 Merge branch 'fix/enhance_wifi_connection_check_in_ot_ci_case_v5.4' into 'release/v5.4'
feat(openthread): enhance wifi connection check in openthread ci cases (Backport v5.4)

See merge request espressif/esp-idf!35164
2024-11-28 10:46:26 +08:00
xiongweichao
92780d3f88 fix(bt/bluedroid): fixed issues introduced by byte alignment
- esp_bt_uuid_t is byte aligned, tBT_UUID is 4-byte aligned.
2024-11-28 10:12:32 +08:00
Armando
138b3390c5 ci(ram_app): use uart0 config 2024-11-28 10:08:43 +08:00
Martin Vychodil
60c561792c Merge branch 'fix/sdmmc_send_acmd22_after_multiple_write_cmd_v5.4' into 'release/v5.4'
fix(sdmmc): Send ACMD22 if CMD25 fails (v5.4)

See merge request espressif/esp-idf!34860
2024-11-28 02:11:25 +08:00
Martin Vychodil
f48f07a418 Merge branch 'feature/storage_nvs_bootloader_v5.4' into 'release/v5.4'
feat(storage/nvs): NVS bootloader support (v5.4)

See merge request espressif/esp-idf!35249
2024-11-28 01:55:03 +08:00
Anton Maklakov
b88913ca27 Merge branch 'feature/update-toolchain-to-esp-14.2.0_20241119_v5.4' into 'release/v5.4'
feat(tools): update toolchain version to esp-14.2.0_20241119 (v5.4)

See merge request espressif/esp-idf!35140
2024-11-27 22:26:47 +08:00
radek.tandler
4e8bb8a082 feat(nvs_flash): Implemented basic nvs_flash support for bootloader 2024-11-27 15:22:46 +01:00
Alexey Gerenkov
c2ae806661 Merge branch 'change/sysview_test_config_v5.4' into 'release/v5.4'
change(sysview): run heap_log tracing tests on existing cores (v5.4)

See merge request espressif/esp-idf!35195
2024-11-27 19:04:02 +08:00
Abhinav Kudnar
2f6a7ec1ae fix(nimble): Resolved watchdog due to memory exceed prints 2024-11-27 18:00:37 +08:00
zlq
7a92f14df6 fix(H2):fix pll low temp bug 2024-11-27 17:46:10 +08:00
chenjianhua
02cc012db5 feat(ble/bluedroid): Support setting connection params when creating connection 2024-11-27 17:13:21 +08:00
zhanghaipeng
4ed30165d8 fix(ble/bluedroid): Optimize BLE API "esp_ble_gattc_enh_open" 2024-11-27 17:07:24 +08:00
zhanghaipeng
719a2313be fix(ble/bluedroid): Fixed BLE create connection fail because of invalid own address type 2024-11-27 17:07:24 +08:00
Martin Vychodil
315b1ec4ae Merge branch 'fix/littlefs_image_creation_windows_v5.4' into 'release/v5.4'
fix(littlefs): Allow LittleFS image generation on Windows + version bump (v5.4)

See merge request espressif/esp-idf!34915
2024-11-27 16:21:18 +08:00
Zhao Wei Liang
079acc88a7 fix(ble): fixed the connect issue when rx error aa on ESP32-H2
(cherry picked from commit 093b65e27c)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-11-27 16:03:51 +08:00
Zhao Wei Liang
903307b191 fix(ble): fixed the connect issue when rx error aa on ESP32-C6
(cherry picked from commit 69b535d422)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-11-27 16:03:49 +08:00
yiwenxiu
516e1131a7 feat(openthread): enhance wifi connection check in openthread ci cases 2024-11-27 15:53:37 +08:00
Island
a516ca527d Merge branch 'bugfix/fix_bleqabr24_1646_v5.4' into 'release/v5.4'
Fixed BLE creating connection when the connection already exists on ESP32 (v5.4)

See merge request espressif/esp-idf!35047
2024-11-27 15:45:05 +08:00
Omar Chebib
ab4fa65d0d fix(ulp): fix ULP RISC-V interrupt handler corrupting the stack
* Closes https://github.com/espressif/esp-idf/issues/14930
2024-11-27 11:43:15 +08:00
Konstantin Kondrashov
409a75936a feat(efuse): Adds efuse ADC calib data for ESP32-C61 2024-11-26 22:17:23 +08:00
Konstantin Kondrashov
b1662f643a feat(efuse): Adds efuse ADC calib data for ESP32-C5 2024-11-26 22:17:23 +08:00
morris
8f58a27418 Merge branch 'change/p4_sd_runner_no_use_usj_v5.4' into 'release/v5.4'
ci(sd): use uart0 as usj always serial noise on ci on p4 (v5.4)

See merge request espressif/esp-idf!35191
2024-11-26 18:01:10 +08:00
Erhan Kurubas
e5d377be8d fix(sysview): add prefix to the module desc to avoid stuck in Segger SystemView app
Closes https://github.com/espressif/esp-idf/issues/10483
2024-11-26 10:51:18 +01:00
Guillaume Souchere
0f6adbfd25 fix(heap): Fix wrong config to enable MALLOC_CAP_EXEC in memory_layout.c
In esp32c2 and esp32c61 memory_layout.c files, the config used to allow
MALLOC_CAP_EXEC was CONFIG_ESP_SYSTEM_MEMPROT_FEATURE when
CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT should be used.

Closes https://github.com/espressif/esp-idf/issues/14836
2024-11-26 09:24:54 +01:00
Erhan Kurubas
688b86ba24 change(sysview): support single/dual core targets in heap_trace_log test 2024-11-26 08:49:30 +01:00
Island
4cf553509e Merge branch 'feat/remove_unused_sdkconfig_in_ble_examples_v5.4' into 'release/v5.4'
fix(ble/example): Removed unused sdkconfig files (v5.4)

See merge request espressif/esp-idf!35189
2024-11-26 15:46:04 +08:00
morris
ef3c64d006 Merge branch 'fix/fix_jpeg_decode_info_v5.4' into 'release/v5.4'
fix(jpeg_decoder): Fix jpeg decoder get picture information (backport v5.4)

See merge request espressif/esp-idf!35157
2024-11-26 15:36:37 +08:00
Armando
56ec6b8b66 test(emmc): disabled emmc tests on p4 2024-11-26 15:10:28 +08:00
Armando
fbbfa3bab3 ci(sd): use uart0 as usj always serial noise on ci on p4 2024-11-26 15:09:38 +08:00
Armando
5fdf844c0a test(sd): no uhs1 runner 2024-11-26 15:09:34 +08:00
Wang Meng Yang
76d90ba1ca Merge branch 'bugfix/disconn_sdp_upon_wrong_data_v5.4' into 'release/v5.4'
fix(bt/bluedroid): disconnect SDP connection on receiving incorrect response (v5.4)

See merge request espressif/esp-idf!35143
2024-11-26 15:00:07 +08:00
Wang Meng Yang
3eab76508e Merge branch 'feat/add_profile_state_event_v5.4' into 'release/v5.4'
feat(bt/bluedroid): added events to indicate the profile states of HFP (v5.4)

See merge request espressif/esp-idf!35148
2024-11-26 14:59:31 +08:00
chenjianhua
c37e7ced7d fix(bt): Update bt lib for ESP32(c3082c4)
- Fixed BLE creating connection when the connection already exists
2024-11-26 14:46:02 +08:00
Mahavir Jain
9e2decf7df Merge branch 'ci/fix_pytest_otatool_for_c2_v5.4' into 'release/v5.4'
fix(examples): Fix pytest_otatool for C2 (v5.4)

See merge request espressif/esp-idf!35116
2024-11-26 13:05:21 +08:00
Zhou Xiao
8805bf97d3 feat(ble/example): Removed unused sdkconfig files
(cherry picked from commit 57b98f4e1e)

Co-authored-by: Zhou Xiao <zhouxiao@espressif.com>
2024-11-26 12:05:37 +08:00
Island
3915ea30f2 Merge branch 'bugfix/fix_c2_light_sleep_coex_v5.4' into 'release/v5.4'
fix(ble): fix ble light sleep error on esp32c2 (v5.4)

See merge request espressif/esp-idf!35056
2024-11-26 10:50:33 +08:00
Shu Chen
9181ecabf8 Merge branch 'backport/openthread_related_feature_v54_20241125' into 'release/v5.4'
Backport openthread related features to 5.4

See merge request espressif/esp-idf!35172
2024-11-26 09:51:38 +08:00
Roland Dobai
37cb1521a1 Merge branch 'feat/add_activate_debug_information_v5.4' into 'release/v5.4'
feat(tools): Imporve activate.py debug information (v5.4)

See merge request espressif/esp-idf!35170
2024-11-25 17:41:59 +08:00
morris
af5ddf0eb6 Merge branch 'contrib/github_pr_14767_v5.4' into 'release/v5.4'
fix(gptimer): race on FSM state in gptimer_start() (GitHub PR) (v5.4)

See merge request espressif/esp-idf!35134
2024-11-25 17:24:23 +08:00
Marek Fiala
2e2740d20b feat(tools): Imporve activate.py debug information 2024-11-25 10:13:02 +01:00
C.S.M
65ce617a8d fix(jpeg_decoder): Fix jpeg decoder get picture information 2024-11-25 14:37:06 +08:00
Xu Si Yu
aa3e5d9832 feat(openthread): adjusted the default macro configurations of openthread 2024-11-25 14:31:28 +08:00
Xu Si Yu
b813889b62 feat(openthread): support using custom header file 2024-11-25 12:29:56 +08:00
morris
fe3bb073f9 Merge branch 'refactor/i2c_ll_trm_sync_v5.4' into 'release/v5.4'
refactor(i2c): rename some LL functions according to TRM descriptions (v5.4)

See merge request espressif/esp-idf!35107
2024-11-25 10:30:02 +08:00
Jin Cheng
e8c3b6418c feat(bt/bluedroid): added events to indicate the profile states of HFP 2024-11-25 10:21:55 +08:00
Jin Cheng
f22b03cd7e fix(bt/bluedroid): disconnect SDP connection on receiving incorrect response 2024-11-25 10:19:05 +08:00
Alexey Lapshin
bb72e51d6a feat(tools): update toolchain version to esp-14.2.0_20241119 2024-11-23 14:39:35 +07:00
Alexey Lapshin
fd89e9f144 fix(tools): fix adding tar.gz archive to tools.json if tar.xz is present 2024-11-23 14:39:35 +07:00
David Čermák
8a17f7f8c5 Merge branch 'fix/lwip_tcp_pcb_recycle_v5.4' into 'release/v5.4'
fix(lwip): Limit active TCP PCBs and recycle them faster (v5.4)

See merge request espressif/esp-idf!35092
2024-11-23 02:53:41 +08:00
David Cermak
7d9970590a fix(lwip): Limit active TCP PCBs and recycle them faster
Update submodule: git log --oneline c816f0ee..a587d929
  - test: Add tcp-pcb recycle test (espressif/esp-lwip@a587d929)
  - tcp: Apply faster PCB recycling in FIN_WAIT_1 or FIN_WAIT_2 state (espressif/esp-lwip@3bfc85d2)
  - test: Add tcp alloc limitation test (espressif/esp-lwip@0c9c39a9)
  - memp: Employ TCP-PCB allocation limit if libc malloc used (espressif/esp-lwip@9cb96ac1)
2024-11-22 14:45:36 +01:00
David Čermák
b1c4c9ae2f Merge branch 'fix/lwip_ping_ipv6only_v5.4' into 'release/v5.4'
fix(lwip): Fix IP6 raw socket checksum in IPv6-only configuration (v5.4)

See merge request espressif/esp-idf!35083
2024-11-22 21:38:49 +08:00
Wang Meng Yang
c122f727d1 Merge branch 'bugfix/lmp_trans_collision_v5.4' into 'release/v5.4'
fix(bt/controller): Fixed some controller bugs on ESP32 (v5.4)

See merge request espressif/esp-idf!34944
2024-11-22 19:15:02 +08:00
lsita
fa3cdccb18 fix(gptimer): race condition between start and stop
Merges https://github.com/espressif/esp-idf/pull/14767
2024-11-22 18:22:47 +08:00
Island
438c0634af Merge branch 'feat/optimize_cble50y24_110_v5.4' into 'release/v5.4'
feat(bt/bluedroid): Added BLE 5.0 throughput examples (v5.4)

See merge request espressif/esp-idf!35010
2024-11-22 17:53:44 +08:00
Adam Múdry
94aa1c0d5d fix(sdmmc): Fix ACMD22 DMA buffer problem for ESP32-P4 2024-11-22 17:13:07 +08:00
Adam Múdry
2d5d2509fb test(sdmmc): Add test_apps test for sdmmc component 2024-11-22 17:13:07 +08:00
Adam Múdry
68c1423cf3 fix(sdmmc): Generalize waiting for card idle to a function 2024-11-22 17:13:07 +08:00
Adam Múdry
1f0931f6d1 fix(sdmmc): Send ACMD22 if CMD25 fails
Send the number of the written write blocks (ACMD22) after
write multiple blocks fails (CMD25)
2024-11-22 17:13:07 +08:00
morris
47d0a913e0 Merge branch 'doc/vad_programming_guide_v5.4' into 'release/v5.4'
doc: lp_i2s and vad programming guide (v5.4)

See merge request espressif/esp-idf!35108
2024-11-22 15:48:31 +08:00
Jiang Jiang Jian
bc89933ad6 Merge branch 'bugfix/wps_ie_reset_v54' into 'release/v5.4'
fix(wifi): Remove WPS IEs once WPS succeeds (v5.4)

See merge request espressif/esp-idf!35071
2024-11-22 14:39:24 +08:00
Jiang Jiang Jian
b56ad1d633 Merge branch 'fix/ws_transport_head_fragments_v5.4' into 'release/v5.4'
fix(ws_transport): Fix reading WS header in fragments (v5.4)

See merge request espressif/esp-idf!35088
2024-11-22 13:43:19 +08:00
Jiang Jiang Jian
5e65f632a3 Merge branch 'feature/avoid_compiling_wifi_components_when_wifi_is_unsupported_v5.4' into 'release/v5.4'
feat(wifi): avoid compiling components related to wifi when wifi is not supported(Backport v5.4)

See merge request espressif/esp-idf!35062
2024-11-22 13:42:51 +08:00
Jiang Jiang Jian
31ef58d98e Merge branch 'fix/add_sbom_exception_v5.4' into 'release/v5.4'
Add an exception in wpa_supplicant sbom.yml (Backport v5.4)

See merge request espressif/esp-idf!35061
2024-11-22 13:41:52 +08:00
Jiang Jiang Jian
569f6c0213 Merge branch 'fix/fix_modem_module_clock_missing_after_ota_v5.4' into 'release/v5.4'
fix(esp_system): deselect all modem modules lp clock source selection before clk initialization (v5.4)

See merge request espressif/esp-idf!34923
2024-11-22 13:41:23 +08:00
Li Bo
7bba3dfe8a fix(esp_rom): fix esp32c3 eco7 console rom function address 2024-11-22 13:40:05 +08:00
Konstantin Kondrashov
ed5a540439 fix(examples): Fix pytest_otatool for C2
Test for C2 has to be run with flash_4mb
2024-11-22 07:09:03 +02:00
Jin Cheng
5cd5ede2f5 fix(bt/controller): Fixed some controller bugs on ESP32
- Fixed wrong logic in handling sniff transaction collision at slave
      side
    - Fixed the issue ACL is stopped too early before eSCO
2024-11-22 11:01:30 +08:00
gongyantao
dc6fc5a1f5 fix(bt): fix some issues in bt controller
1: Store local device name into NVDS when handling hci_wr_local_name_cmd.
2: Set default device name during link manager initialization.
3: Set the QoS value to the minimum value if the calculated QoS is less
   than the minumum.
2024-11-22 11:01:30 +08:00
zhanghaipeng
5c722289b6 fix(bt/ble): Update esp32 libbtdm_app.a (17db8bd)
- Added a verification step for the Access Address within the CONNECT_IND PDU
2024-11-22 11:01:30 +08:00
Jin Cheng
f4f1d20c82 fix(bt/bluedroid): AG should send OK or other error codes to HF client
when it is driven by HF to initiate a call.
2024-11-22 11:01:30 +08:00
Armando
4207ec8b3b doc(vad): remove vad png 2024-11-22 10:47:05 +08:00
Armando
6aa6883af4 change(lp_i2d): use atomic fsm check 2024-11-22 10:46:53 +08:00
Armando
22f36bea53 change(vad): wakeup driver maitain necessary power domain 2024-11-22 10:46:49 +08:00
Armando
37d8e97a9d doc(lp_vad): lp vad programming guide 2024-11-22 10:46:43 +08:00
Armando
e4a9243517 doc(lp_i2s): lp i2s programming guide 2024-11-22 10:46:39 +08:00
Armando
e83fc30b67 fix(lp_i2s): added cbs iram check 2024-11-22 10:46:34 +08:00
morris
85e86626ff refactor(i2c): rename some LL functions according to TRM descriptions 2024-11-22 10:14:22 +08:00
morris
30f0c6f5db Merge branch 'docs/usb_host_ext_port_driver_backport_v5.4' into 'release/v5.4'
docs(ext_port): Maintainers Notes for the External Port Driver (backport v5.4)

See merge request espressif/esp-idf!35100
2024-11-22 10:06:15 +08:00
Roland Dobai
6048d26493 Merge branch 'fix/import_error_msg_v5.4' into 'release/v5.4'
fix(tools): re-raise ImportError without module name (v5.4)

See merge request espressif/esp-idf!35073
2024-11-22 01:37:20 +08:00
Roman Leonov
8fc6dad7ff fix(tusb_msc): Added SD power supply configuration for p4 2024-11-21 13:10:03 +01:00
Roman Leonov
adb468bade docs(ext_port): Maintainers Notes for the External Port Driver 2024-11-21 12:49:32 +01:00
Mahavir Jain
e1c0ad9189 Merge branch 'fix/aes_cache_failure_when_l2_cache_line_size_greater_than_l1_cache_v5.4' into 'release/v5.4'
Fix memory corruption caused due to unaligned external memory buffers sync in AES (v5.4)

See merge request espressif/esp-idf!35064
2024-11-21 18:35:33 +08:00
David Cermak
2822cc671a fix(lwip): Fix ping_v6 receiving to accept only echo replies
This fixes a bug where we ping our own IP and the request itself
bounces back to the raw receive function and is incorrectly treated as
reply. (this bug was discovered when fixing ICMPv6 pings with incorrect
checksums, while the ping request was dropped in icmpv6.c due to wrong
checksum, but was also fed to raw layers where it was treated as
"correct" response, so the PINGv6 to ourselves still worked)
2024-11-21 11:24:46 +01:00
David Cermak
e390c17f99 fix(common_connect): Fix example's stdin/out to setup UART interrupt once
Function example_configure_stdin_stdout() was used for simple UART I/O
operation in CI to enter test env configuration (wifi ssid, IPs, etc).
It could be called multiple times, but didn't handle the situation where
we install UART interrupt from multiple source (e.g. in ICMP tests,
where we first need to enter wifi credentials of test AP and then we
start ping-cmd console to handle ping commands)
2024-11-21 11:24:46 +01:00
David Cermak
f75e399139 fix(lwip): Fix IP6 raw socket checksum in IPv6-only configuration
* Update submodule: git log --oneline f150e232..c816f0ee
  - sockets: Make IPv6 only netconn type IPv6 aware (espressif/esp-lwip@c816f0ee)
  - test: Make test application scalable (espressif/esp-lwip@3ec12c3b)
  - dns: Handle active DNS entries before clearing cache (espressif/esp-lwip@b15cd2de)
2024-11-21 11:24:30 +01:00
Laukik Hase
9d7a4e5917 change(bootloader): Map only the necessary length when fetching the app description struct 2024-11-21 15:12:55 +05:30
Mahavir Jain
fbe93aa25e test: add configurable mmu page size test app
Test app to ensure that bootloader and application built with
different flash MMU page size are compatible. This is for the
SoCs that support configurable flash MMU page size.
2024-11-21 15:11:45 +05:30
Mahavir Jain
07318a4987 feat(bootloader): add support to use MMU page size from app binary
For the SoCs that support configurable MMU page size, it is possible
that the bootloader and application are built with different MMU page
size configuration. This mismatch is not supported at the moment and
application verification fails (at bootup or during OTA update).

Configuring MMU page size helps to optimize the flash space by having
smaller alignment and padding (secure) requirements. Please note that
the MMU page size is tied with the flash size configuration at the
moment (`ESPTOOLPY_FLASHSIZE_XMB`).

This MR ensures that application verification happens using the MMU page
size configured in its binary header. Thus, bootloader and application
can now have different MMU page sizes and different combinations shall
be supported.
2024-11-21 15:11:38 +05:30
David Cermak
15636a2f14 fix(ws_transport): Unit test on reading WS data byte by byte
Closes https://github.com/espressif/esp-idf/issues/14704
Closes https://github.com/espressif/esp-protocols/issues/679
2024-11-21 10:39:23 +01:00
Richard Allen
b8a7d96e98 fix(ws_transport): Fix reading WS header bytes
Correct split header bytes

When the underlying transport returns header,
length, or mask bytes early, again call the
underlying transport.

This solves the WS parser getting offset when
the server sends a burst of frames where the
last WS header is split across packet boundaries,
so fewer than the needed bytes may be available.

Merges https://github.com/espressif/esp-idf/pull/14706
2024-11-21 10:39:23 +01:00
Frantisek Hrbata
2151f23f46 fix(tools): re-raise ImportError without module name
The ImportError or ModuleNotFoundError might be raised without
specifying a module name. In this not so common situation, re-raise the
exception to print all the information that could assist in identifying
the problem.

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-21 09:37:12 +01:00
Kapil Gupta
234dce0e7f fix(wifi): Remove WPS IEs once WPS succeeds 2024-11-21 13:42:29 +05:30
harshal.patil
e0312feddb fix(mbedtls/aes): Fix external memory corruption caused due to unaligned length cache sync
Fixes the memory corruption issue that arises due to external memory cache sync of unaligned
length bytes when L2 cache line size is greater than the L1 cache line size
2024-11-21 12:15:57 +05:30
yinqingzhao
a34f1eb6f9 feat(wifi): avoid compiling components related to wifi when wifi is not supported 2024-11-21 14:18:41 +08:00
Nachiket Kukade
8580f9f622 fix(wpa_supplicant): Add an exception in wpa_supplicant sbom.yml 2024-11-21 11:48:19 +05:30
Jin Chen
999b10d2d4 fix(ble): change ld for ble scan coex issue
(cherry picked from commit dd499d7b2e)

Co-authored-by: cjin <jinchen@espressif.com>
2024-11-21 11:03:55 +08:00
Jin Chen
43cd3491c9 fix(ble): fix ble light sleep error on esp32c2
(cherry picked from commit 23f7e33a97)

Co-authored-by: cjin <jinchen@espressif.com>
2024-11-21 11:03:53 +08:00
Shu Chen
9240757145 Merge branch 'fix/fix_a_naming_error_of_esp_radio_spinel_v54' into 'release/v5.4'
fix a naming error of esp radio spinel (backport to 5.4)

See merge request espressif/esp-idf!35041
2024-11-21 10:35:23 +08:00
Jiang Jiang Jian
914a4810a9 Merge branch 'bugfix/idf-11064_v5.4' into 'release/v5.4'
backport v5.4: fix some issues on esp32c5 eco1

See merge request espressif/esp-idf!34790
2024-11-20 19:38:13 +08:00
Jiang Jiang Jian
48ed77c9cc Merge branch 'bugfix/rx_invalid_cmd_err_code_v5.4' into 'release/v5.4'
fix(bt/bluedroid): Fixed the incorrect error code returned when receiving an invalid command(v5.4)

See merge request espressif/esp-idf!34987
2024-11-20 19:12:23 +08:00
Jiang Jiang Jian
a61663d63b Merge branch 'bugfix/crash_deauth_fix_5.4' into 'release/v5.4'
Fix for crash while receiving deauth in esp32c2 ECO4(v5.4)

See merge request espressif/esp-idf!34984
2024-11-20 19:10:59 +08:00
Island
b5c02eb3d8 Merge branch 'bugfix/fix_classic_bt_build_fail_v5.4' into 'release/v5.4'
fix(bt/bluedroid): Fixed classic bt build fail when enable dynamic memory and disable BLE (v5.4)

See merge request espressif/esp-idf!34931
2024-11-20 18:05:49 +08:00
Island
28bf5eacb9 Merge branch 'feature/support_moving_code_to_flash_v5.4' into 'release/v5.4'
feat(ble): Support for putting code in flash on ESP32-C2 (v5.4)

See merge request espressif/esp-idf!34786
2024-11-20 17:46:55 +08:00
morris
8d4b04742c Merge branch 'fix/c61_h2_pmu_icg_csv_update_v5.4' into 'release/v5.4'
fix(pmu): c61 and h2 update pmu_icg_mapping.h (v5.4)

See merge request espressif/esp-idf!34795
2024-11-20 17:41:37 +08:00
Jiang Jiang Jian
a09d5747e1 Merge branch 'bugfix/esp_bt_wifi_bt_power_api_v5.4' into 'release/v5.4'
fix(bt): Move esp_wifi_bt_power_domain_on/off to esp_phy_init.h(v5.4)

See merge request espressif/esp-idf!34626
2024-11-20 16:27:01 +08:00
Xu Si Yu
f70bec1cf8 fix(openthread): fix a naming error of esp radio spinel 2024-11-20 15:47:38 +08:00
Jiang Jiang Jian
4cc82c7d66 Merge branch 'feat/sleep_retention_expand_module_bitmap_v5.4' into 'release/v5.4'
backport v5.4: expand the number of sleep retention modules supported on different chips

See merge request espressif/esp-idf!34691
2024-11-20 14:50:52 +08:00
morris
0e966ba0d6 Merge branch 'feat/mipi_dsi_underrun_error_v5.4' into 'release/v5.4'
feat(mipi_dsi): enable underrun error interrupt (v5.4)

See merge request espressif/esp-idf!34980
2024-11-20 14:47:09 +08:00
wanckl
6abf54e150 fix(pmu): c61 and h2 update pmu_icg_mapping.h 2024-11-20 10:32:40 +08:00
morris
9c2a5ac60e Merge branch 'fix/twai_io_init_glitch_v5.4' into 'release/v5.4'
fix(driver_twai): fixed bus-off when twai_init due to wrong gpio config (v5.4)

See merge request espressif/esp-idf!34815
2024-11-20 10:32:05 +08:00
morris
fb52ad1d26 Merge branch 'fix/p4_spi_no_dma_polling_cache_fail_v5.4' into 'release/v5.4'
fix(driver_spi): fixed p4 no dma polling trans cache sync fail (v5.4)

See merge request espressif/esp-idf!34813
2024-11-20 10:18:33 +08:00
Shu Chen
c46fe1fa4f Merge branch 'fix/add_network_reconnectin_in_ot_ci_case_v5.4' into 'release/v5.4'
feat(openthread): flush ipv6 addr in openthread ci cases(Backport v5.4)

See merge request espressif/esp-idf!34675
2024-11-20 10:15:49 +08:00
morris
dfe11ebb47 Merge branch 'doc/isp_lsc_doc_v5.4' into 'release/v5.4'
isp: lsc doc (v5.4)

See merge request espressif/esp-idf!35021
2024-11-20 10:12:19 +08:00
morris
0960a602f4 feat(mipi_dsi): enable underrun error interrupt 2024-11-19 21:42:47 +08:00
morris
15202df249 Merge branch 'ci/fix_i2s_multi_dev_test_potential_overflow_v5.4' into 'release/v5.4'
ci(i2s): fix the potential overflow in multi_dev test (v5.4)

See merge request espressif/esp-idf!35022
2024-11-19 18:15:31 +08:00
Luo Xu
5fef371bad fix(ble_mesh): fixed heartbeat issue
(cherry picked from commit 167cd4762b)

Co-authored-by: luoxu <luoxu@espressif.com>
2024-11-19 18:03:23 +08:00
Rahul Tank
be95e8e14b Merge branch 'bugfix/memory_issue_v5.4' into 'release/v5.4'
fix(nimble): Nimble Error logs in case of memory overflow/failure (v5.4)

See merge request espressif/esp-idf!34997
2024-11-19 16:56:40 +08:00
laokaiyao
3ea47a6cf3 docs(i2s): update i2s cap overview 2024-11-19 15:57:26 +08:00
laokaiyao
1a685b7e1c ci(i2s): fix the potential overflow in multi_dev test 2024-11-19 15:57:24 +08:00
yiwenxiu
cad2ff8de5 feat(openthread): flush ipv6 addr in openthread ci cases 2024-11-19 15:48:40 +08:00
Jiang Jiang Jian
17b7419786 Merge branch 'fix/update_ping_cmd_version_v5.4' into 'release/v5.4'
update: Update ping-cmd component to v1.0.0 (v5.4)

See merge request espressif/esp-idf!35012
2024-11-19 14:59:23 +08:00
Shu Chen
69a9b17587 Merge branch 'backport/openthread_related_feature_v54_20241112' into 'release/v5.4'
Backport openthread related features to 5.4

See merge request espressif/esp-idf!34834
2024-11-19 14:54:03 +08:00
Armando
b873befcd8 doc(isp): isp lsc programming guide 2024-11-19 14:33:55 +08:00
Armando
10b3296085 change(sdmmc): simplify cmd11 enable code 2024-11-19 14:30:31 +08:00
wanckl
b282c41954 fix(driver_spi): fixed p4 no dma polling trans cache sync fail 2024-11-19 11:50:47 +08:00
wanckl
928b7f6efc fix(driver_twai): fixed bus-off when twai_init due to wrong gpio config
Closes https://github.com/espressif/esp-idf/issues/14548
2024-11-19 11:50:29 +08:00
Chen Yudong
e8f76a93a1 change: Update ping-cmd component to v1.0.0 2024-11-19 11:38:16 +08:00
Chen Jian Hua
91fe5d7fa8 feat(bt/bluedroid): Added BLE 5.0 throughput examples
(cherry picked from commit 6d3a82eecf)

Co-authored-by: zhangbowen <zhangbowen@espressif.com>
2024-11-19 10:33:44 +08:00
xiongweichao
91c2390897 fix(bt): Move esp_wifi_bt_power_domain_on/off to esp_phy_init.h 2024-11-19 10:12:59 +08:00
Li Shuai
52bcb74b67 fix(esp_hw_support): fix the issue of wifi rx packet loss when switchng soc root clock source 2024-11-18 21:52:00 +08:00
Li Shuai
ea6dd7344d fix(esp_hw_support): fix the issue of mmu table content loss due to default sd signal 2024-11-18 21:52:00 +08:00
morris
e422e12f17 Merge branch 'feat/dynamic_usb_hal_backport_v5.4' into 'release/v5.4'
feat(hal/usb): Make USB-DWC HAL&LL configuration independent backport v5.4

See merge request espressif/esp-idf!34812
2024-11-18 21:40:16 +08:00
Abhinav Kudnar
16d7351cbc fix(nimble): Nimble Error logs in case of memory overflow/failure 2024-11-18 17:47:05 +08:00
Li Shuai
71f83bd02b change(esp_hw_support): fix some sleep retention build error 2024-11-18 17:46:41 +08:00
Li Shuai
4b0faf47b4 change(soc): define sleep retention module total number to 64 for esp32p4 2024-11-18 17:46:41 +08:00
Li Shuai
a56249f631 change(esp_hw_support): update power domain pd allowed check logic 2024-11-18 17:46:41 +08:00
Li Shuai
bde6b9141f change(esp_hw_support): update some modules sleep retention init dependency bitmap 2024-11-18 17:46:40 +08:00
Rahul Tank
06587938fb Merge branch 'feature/remove_min_max_def_v5.4' into 'release/v5.4'
fix(nimble): Removed min/max macro definition from os.h (v5.4)

See merge request espressif/esp-idf!34909
2024-11-18 17:07:25 +08:00
xiongweichao
8480fb3c6f fix(bt/bluedroid): Fixed the incorrect error code returned
when receiving an invalid command
2024-11-18 16:49:54 +08:00
Li Shuai
00a6f825b0 change(soc): add sleep retention module total number definition 2024-11-18 16:05:34 +08:00
Li Shuai
78b272c092 feat(esp_hw_support): extend sleep retention module bitmap bit width 2024-11-18 15:57:42 +08:00
morris
538b0fc180 Merge branch 'fix/fix_tsens_retention_p4_v5.4' into 'release/v5.4'
fix(temperature_sensor): Fix temperature sensor sleep retention on p4 (backport v5.4)

See merge request espressif/esp-idf!34979
2024-11-18 14:31:15 +08:00
akshat
853a944cd0 fix(esp_rom): Comment out unused function pointers in esp32c2 eco4 linker file 2024-11-18 11:49:50 +05:30
Aditi
1917e7f532 fix(esp_wifi): Fix for crash while receiving deauth in esp32c2 ECO4 2024-11-18 11:45:46 +05:30
Shu Chen
84569bc94f Merge branch 'backport/2015_enhack_v54' into 'release/v5.4'
fix(802.15.4): add case for 2015 frame enh-ack (Backport v5.4)

See merge request espressif/esp-idf!34954
2024-11-18 11:48:48 +08:00
Jiang Jiang Jian
35f0fdcd36 Merge branch 'fix/fix_deadlock_in_pm_mode_switching_v5.4' into 'release/v5.4'
fix(esp_pm): fix deadlock in pm_mode switching (v5.4)

See merge request espressif/esp-idf!34938
2024-11-18 11:20:01 +08:00
C.S.M
479f7bfdc4 fix(temperature_sensor): Fix temperature sensor sleep retention on p4 2024-11-18 10:37:50 +08:00
Shu Chen
75e0cc387e Merge branch 'fix/thread_resolve_invalid_host_v5_4' into 'release/v5.4'
fix(openthread): Fix invalid host resolving for Thread end devices(v5.4)

See merge request espressif/esp-idf!34942
2024-11-17 21:29:26 +08:00
zwx
d5d07b44ef feat(openthread): support alloc nat64 session from psram 2024-11-15 18:53:28 +08:00
Simon Dean
f9ac9f052e enable openthread coap client for mtd 2024-11-15 18:53:28 +08:00
Xu Si Yu
8b098ae53c fix(coex): fix 802.15.4 external coexistence 2024-11-15 18:53:28 +08:00
Xu Si Yu
14bc7c01ea feat(openthread): update openthread submodule and border router lib 2024-11-15 18:53:28 +08:00
morris
71c437767f Merge branch 'feat/i2c_slave_v2_v5.4' into 'release/v5.4'
feat(i2c_slave): Add new i2c slave driver --version two with great stretch handling (backport v5.4)

See merge request espressif/esp-idf!34907
2024-11-15 15:36:46 +08:00
Tan Yan Quan
e3fe456cf9 fix(802.15.4): add case for 2015 frame enh-ack 2024-11-15 15:15:55 +08:00
Jiang Jiang Jian
41ce4c9e07 Merge branch 'fix/fix_cache_stuck_in_esp_restart_v5.4' into 'release/v5.4'
fix(esp_system): writeback L1 Dcache before disable L2 if PSRAM used (v5.4)

See merge request espressif/esp-idf!34801
2024-11-15 13:56:19 +08:00
wuzhenghui
2c35c09742 fix(esp_pm): fix deadlock in pm_mode switching 2024-11-15 11:25:58 +08:00
wuzhenghui
78362aff04 fix(esp_pm): fix missed ccompare update when another core is already in do_switch 2024-11-15 11:25:58 +08:00
WanqQixiang
7cf389deab fix(openthread): Fix invalid host resolving for Thread end devices 2024-11-15 11:24:00 +08:00
Marius Vikhammer
356e7b6954 Merge branch 'feat/esp32p4_unicore_stop_other_core_v5.4' into 'release/v5.4'
feat(esp_system): stop other core for unicore esp32p4 (v5.4)

See merge request espressif/esp-idf!34827
2024-11-15 11:10:48 +08:00
wuzhenghui
a2d26ab56f fix(esp_system): deselect all modem modules clk source selection before clk init 2024-11-15 11:00:54 +08:00
morris
779106e49c Merge branch 'contrib/github_pr_14859_v5.4' into 'release/v5.4'
fix(usb_host): return ESP_ERR_NO_MEM on failed alloc in client register (GitHub PR) (v5.4)

See merge request espressif/esp-idf!34875
2024-11-15 10:56:46 +08:00
morris
63ef26e9ee Merge branch 'ci/backport_i2s_ci_fix_to_v5.4' into 'release/v5.4'
ci(i2s): backport i2s ci fix (v5.4)

See merge request espressif/esp-idf!34586
2024-11-15 10:53:39 +08:00
Tomas Rezucha
68a95f5c94 feat(hal/usb): Make USB-DWC HAL&LL configuration independent
Previously, we included symbols from soc/usb_dwc_cfg.h and configured
the HAL and LL according to it. Now we get the configuration in runtime
from USB-DWC registers.

Added missing definition for USB FS peripheral on ESP32-P4.
2024-11-15 00:36:10 +08:00
Adam Múdry
8b1f8cb20e fix(examples): tusb_midi task stack overflow fix 2024-11-14 16:43:16 +01:00
Zhang Hai Peng
0dea1a84d6 fix(bt/bluedroid): Fixed classic bt build fail when enable dynamic memory and disable BLE
(cherry picked from commit 59d20e80d3)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2024-11-14 22:13:50 +08:00
Marius Vikhammer
af18afd279 Merge branch 'fix/typo-esp-rom_v5.4' into 'release/v5.4'
fix(esp_rom): Fix comment typos (Backport v5.4)

See merge request espressif/esp-idf!34870
2024-11-14 21:49:19 +08:00
Adam Múdry
94e55817d2 fix(littlefs): Allow LittleFS image generation on Windows + version bump
Closes https://github.com/espressif/esp-idf/issues/12900
2024-11-14 13:17:40 +01:00
Abhinav Kudnar
d21a0a9b64 fix(nimble): Removed min/max macro defination from os.h
Closes https://github.com/espressif/esp-idf/issues/14840
2024-11-14 19:04:33 +08:00
C.S.M
32adbe72b6 docs(i2c_slave): Update i2c slave programming guide for new changes 2024-11-14 18:04:25 +08:00
C.S.M
170d44b75d feat(i2c_slave): Add new example for making i2c slave as a network sensor 2024-11-14 18:04:11 +08:00
C.S.M
e27594efc1 test(i2c_slave): Add some new tests for i2c slave version 2 2024-11-14 18:02:27 +08:00
C.S.M
56625cda88 feat(i2c_slave): refactor i2c slave api to version 2 inorder to solve some existing problem 2024-11-14 18:02:15 +08:00
Samuel Obuch
5304897608 feat(esp_system): stop other core for unicore esp32p4 2024-11-14 09:40:08 +01:00
xuxiao
976cf648f7 fix(ci): enable esp32c5 eco1 ci test (Backport v5.4) 2024-11-14 14:37:31 +08:00
Mahavir Jain
6d7fd7a722 Merge branch 'change/disable_stub_bins_v5.4' into 'release/v5.4'
change(esp_system): do not include openocd stub bins by default (v5.4)

See merge request espressif/esp-idf!34871
2024-11-14 12:41:45 +08:00
Shu Chen
0c5d3749f1 Merge branch 'fix/find_and_close_service_in_ot_ci_case_v5.4' into 'release/v5.4'
fix(ci): optimize an openthread ci case (Backport v5.4)

See merge request espressif/esp-idf!34727
2024-11-14 11:59:43 +08:00
morris
3b2eb13199 Merge branch 'feat/sdmmc_uhs_tuning_v5.4' into 'release/v5.4'
sdmmc: UHS-I support for SDR50 (100MHz, 50MB/s), DDR50 (50MHz, 50MB/s) (v5.4)

See merge request espressif/esp-idf!34867
2024-11-14 11:13:45 +08:00
morris
e1aed77c72 Merge branch 'feat/mcpwm_sleep_rentention_v5.4' into 'release/v5.4'
feat(mcpwm): support sleep retention (v5.4)

See merge request espressif/esp-idf!34802
2024-11-14 10:46:49 +08:00
laokaiyao
76d87acd59 fix(i2s): suplimemt of c61 i2s ll 2024-11-14 10:18:16 +08:00
laokaiyao
24a6994471 feat(i2s): support i2s retention on C61 2024-11-14 10:18:16 +08:00
laokaiyao
ecf7f8257f ci(i2s): fix i2s_multi_dev failed case 2024-11-14 10:18:16 +08:00
morris
551cb70a1b Merge branch 'fix/disable_sar_power_when_enter_deepsleep_v5.4' into 'release/v5.4'
fix(esp_hw_support): disable sar power when esp32p4 going to deepsleep (v5.4)

See merge request espressif/esp-idf!34869
2024-11-14 10:09:56 +08:00
Roland Dobai
85a742351c Merge branch 'feat/size_unify_sections_v5.4' into 'release/v5.4'
feat(tools): unify sections in idf.py size reports for NG version (v5.4)

See merge request espressif/esp-idf!34855
2024-11-14 02:18:07 +08:00
morris
6932df2ce8 Merge branch 'change/esp_ldo_reserve_for_spi_flash_v5.4' into 'release/v5.4'
LDO calibration on ESP32-P4 (v5.4)

See merge request espressif/esp-idf!34864
2024-11-13 17:11:39 +08:00
Daniel Mangum
35aaccdbc1 fix(usb_host): return ESP_ERR_NO_MEM on failed alloc in client register
Fixes issue where ESP_ERR_NO_MEM was being silently discarded after
cleaning up after a failed malloc in usb_host_client_register.

Signed-off-by: Daniel Mangum <georgedanielmangum@gmail.com>
2024-11-13 10:08:04 +01:00
morris
09f1411389 Merge branch 'fix/suspend_ci_v5.4' into 'release/v5.4'
test(spi_flash): Fix some failing test related to spi flash (backport v5.4)

See merge request espressif/esp-idf!34819
2024-11-13 17:07:40 +08:00
morris
35ed582ebf Merge branch 'fix/bod_p4eco2_fix_v5.4' into 'release/v5.4'
fix(bod): Remove config for bod on p4 eco1  (backport v5.4)

See merge request espressif/esp-idf!34821
2024-11-13 17:02:59 +08:00
morris
ad8d75222a Merge branch 'fix/jpeg_com_marker_v5.4' into 'release/v5.4'
fix(jpeg): Fix the length of com marker (backport v5.4)

See merge request espressif/esp-idf!34822
2024-11-13 17:02:27 +08:00
Erhan Kurubas
368f71443b change(esp_system): do not include openocd stub bins by default 2024-11-13 07:36:07 +01:00
YAMAMOTO Takashi
dbd394cb4a fix(esp-rom): Fix comment typos in cache.h
Fix typo in parameter names in cache_flash_mmu_set
amd cache_sram_mmu_set functions.

Closes https://github.com/espressif/esp-idf/pull/14518
2024-11-13 07:00:49 +01:00
wuzhenghui
88c345aca8 fix(esp_hw_support): disable sar power when esp32p4 going to deepsleep 2024-11-13 11:44:46 +08:00
Chen Jichang
2e44cb9387 feat(mcpwm): support sleep retention 2024-11-13 11:13:34 +08:00
Chen Jichang
c8fa2a1f42 fix(mcpwm): fix mcpwm register offset on p4 2024-11-13 11:13:34 +08:00
Armando
0f32537b93 fix(i2s): fixed i2s example build warning 2024-11-13 11:12:24 +08:00
Armando
c1a8efaf09 doc(sdmmc): aadd UHS1 support for DDR50 / SDR50 2024-11-13 11:12:19 +08:00
Armando
a89abd5eac example(sdmmc): support hs and uhs1 sdr50/ddr50 2024-11-13 11:12:14 +08:00
Armando
04cd469e4a feat(sdmmc): supported UHS-I SDR50 (100Mhz) and DDR50 mode 2024-11-13 11:12:10 +08:00
Ivan Grokhotkov
31dc34a909 feat(sdmmc): support for voltage switching in protocol layer 2024-11-13 11:11:23 +08:00
Ivan Grokhotkov
a03cbdba2e change(sdmmc): enable UHS-1 support in test_app, swap slots on P4 EV board 2024-11-13 11:08:25 +08:00
Ivan Grokhotkov
b8de3dfb35 change(sdmmc): adapt host state machine for CMD11, commit reg/struct files 2024-11-13 11:08:09 +08:00
Ivan Grokhotkov
a8efd39877 change(sdmmc): disable the logic related to D3 line, it needs to be connected for CMD11 to work 2024-11-13 11:08:05 +08:00
Ivan Grokhotkov
c9e7d09e0a change(sdmmc): allow speciying pins for IOMUX slots as well 2024-11-13 11:07:39 +08:00
Ivan Grokhotkov
646cb24b71 change(sdmmc): make sdmmc_host_clock_update_command compatible with CMD11 2024-11-13 11:07:29 +08:00
C.S.M
8baade44fd test(spi_flash): Fix some failing test related to spi flash 2024-11-13 10:58:53 +08:00
C.S.M
2db5607060 fix(bod): Remove config for bod on p4 v0.x 2024-11-13 10:58:33 +08:00
C.S.M
0aa8d7f7c9 fix(jpeg): Fix the length of com marker 2024-11-13 10:57:48 +08:00
Shen Wei Long
59e3a1f046 feat(ble): Support for putting code in flash on ESP32-C2
(cherry picked from commit 192f13135488a2f8a386ace2dad69da59e81f5b5)

Co-authored-by: Shen Weilong <shenweilong@espressif.com>
2024-11-13 10:45:03 +08:00
morris
e5a5cb8779 feat(ldo): load calibration parameters from efuse 2024-11-13 10:18:30 +08:00
Konstantin Kondrashov
c9be3c2dc6 feat(efuse): Adds efuse ADC calib data for ESP32-P4 2024-11-13 10:18:30 +08:00
Martin Vychodil
8ea7ae7086 Merge branch 'fix/nvs_generator_test_fail_due_to_safer_write_namespace_function_v5.4' into 'release/v5.4'
fix(nvs): Fix the NVS generator test (write_namespace safer behavior change) (v5.4)

See merge request espressif/esp-idf!34857
2024-11-13 03:45:05 +08:00
Adam Múdry
67ab814756 fix(nvs): Fix the nvs generator test (write_namespace safer behavior change) 2024-11-12 14:56:38 +01:00
Frantisek Hrbata
67039c590d feat(tools): unify sections in idf.py size reports for NG version
By default, esp-idf-size.ng displays all sections individually. This can
be confusing, especially if CONFIG_SOC_MEM_NON_CONTIGUOUS_SRAM is
enabled, resulting in sections like .dram0.data and .dram1.data being
abbreviated as two .data sections in the size report. To avoid confusion
for idf.py and cmake users, pass the --unify option to the underlying
esp_idf_size.ng by default.

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-11-12 14:13:02 +01:00
morris
29003010a3 Merge branch 'feat/mipi_dsi_yuv_converter_v5.4' into 'release/v5.4'
feat(lcd): support YUV422 input color format (v5.4)

See merge request espressif/esp-idf!34760
2024-11-12 15:04:46 +08:00
Marius Vikhammer
7481f7eb9e Merge branch 'ci/known-failure-cases-5.4' into 'release/v5.4'
Ci/known failure cases 5.4

See merge request espressif/esp-idf!34688
2024-11-12 10:37:32 +08:00
morris
bfebd2e3ff Merge branch 'bugfix/gpio_set_level_atomic_v5.4' into 'release/v5.4'
fix(gpio): improve set level performance (v5.4)

See merge request espressif/esp-idf!34764
2024-11-11 14:24:47 +08:00
wuzhenghui
054706c115 fix(esp_system): writeback L1 Dcache before disable L2 if PSRAM used 2024-11-11 14:02:35 +08:00
Jiang Jiang Jian
df64e63bbd Merge branch 'fix/bypass_some_restore_process_if_sleep_rejected_v5.4' into 'release/v5.4'
fix(esp_hw_support): skip some wakeup steps if sleep is rejected (v5.4)

See merge request espressif/esp-idf!34622
2024-11-09 00:37:21 +08:00
Jiang Jiang Jian
3b0cf1a2ea Merge branch 'bugfix/backport_some_wifi_fixes_v5.4' into 'release/v5.4'
fix(wifi): backport some wifi fixes to v5.4

See merge request espressif/esp-idf!34690
2024-11-09 00:33:43 +08:00
Jiang Jiang Jian
12c49601c3 Merge branch 'feature/support_to_query_phy_rf_used_time_v5.4' into 'release/v5.4'
feat(phy): support to query phy used time

See merge request espressif/esp-idf!34624
2024-11-09 00:05:31 +08:00
Jiang Jiang Jian
36e78b3bd3 Merge branch 'bugfix/chip823_pll_low_temp_bug_v5.4' into 'release/v5.4'
[H2]Fix cpu switch fail for bbpll cali fail bug in low temp (v5.4)

See merge request espressif/esp-idf!34598
2024-11-08 23:28:38 +08:00
Jiang Jiang Jian
82802eb460 Merge branch 'bugfix/fix_avrc_absolute_volume_compatibility_v5.4' into 'release/v5.4'
bugfix/fix_avrc_absolute_volume_compatibility[backport v5.4]

See merge request espressif/esp-idf!34769
2024-11-08 22:28:10 +08:00
Sergei Silnov
68d680bafd Merge branch 'ci/fix_macos_ccache_v5.4' into 'release/v5.4'
CI: Fix failing ccache and show ccache statistics for macOS tests (master) (v5.4)

See merge request espressif/esp-idf!34758
2024-11-08 19:46:14 +08:00
Jiang Jiang Jian
b79c8faba4 Merge branch 'fix/fix_writeback_psram_after_vo2_powerdown_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix writeback cache to psram after vo2 powerdown (v5.4)

See merge request espressif/esp-idf!34579
2024-11-08 18:44:13 +08:00
hongshuqing
019afc0f80 fix: fix pll low temp bug 2024-11-08 18:01:54 +08:00
morris
0e43df1a47 Merge branch 'feat/pcnt_sleep_retention_v5.4' into 'release/v5.4'
feat(pcnt): add sleep retention init to avoid light sleep when pcnt is working (v5.4)

See merge request espressif/esp-idf!34728
2024-11-08 17:31:28 +08:00
Jiang Jiang Jian
2afa1cc04d Merge branch 'update/version_5_4_0' into 'release/v5.4'
Update version to 5.4.0

See merge request espressif/esp-idf!34743
2024-11-08 16:23:23 +08:00
liuning
91006fdee1 feat(phy): support to query phy used time 2024-11-08 16:23:16 +08:00
wuzhenghui
59230175df fix(esp_hw_support): skip some wakeup steps if sleep is rejected
1. Skip esp_timer time compensation to avoid introducing errors into rtc_timer
    2. Ignore sleep_time_overhead_out measurements when sleep is rejected
2024-11-08 16:08:32 +08:00
Jiang Jiang Jian
98fccdef20 Merge branch 'bugfix/osi_replace_free_v5.4' into 'release/v5.4'
fix(bt/bluedroid): Replace free/malloc with osi_free/malloc(v5.4)

See merge request espressif/esp-idf!34605
2024-11-08 16:07:08 +08:00
morris
49fbe54bc4 feat(lcd): support color conversion for mipi dsi driver 2024-11-08 15:23:06 +08:00
liqigan
d7dd068478 fix(bt/bluedroid): Fixed AVRCP compatibility issue on absolute volume synchronization 2024-11-08 14:48:03 +08:00
zhangyanjiao
1d87c94ca3 fix(wifi/pm): Fixed the tbtt interval update error when AP's beacon interval changed
Closes https://github.com/espressif/esp-idf/issues/14720
2024-11-08 12:08:59 +08:00
xuxiao
c433d95441 fix(wifi): fix esp32c61 can not tx frame under ht40 above 2024-11-08 12:08:59 +08:00
yinqingzhao
30acf8b5d1 feat(twt): twt add parameter to enable keep alive 2024-11-08 12:08:59 +08:00
yinqingzhao
3d95fd17e3 docs(wifi): add migration guide for types change in wifi 2024-11-08 12:08:59 +08:00
yinqingzhao
504a248ba1 fix(wifi): modify bandwidth in wifi_ap_record_t 2024-11-08 12:08:59 +08:00
zhangyanjiao
295f1576e1 fix(wifi/mesh): Enlarge the mesh TX task stack 2024-11-08 12:08:59 +08:00
zhangyanjiao
e36118f4f0 fix(wifi): Support AES IV with random value in esptouch v2 2024-11-08 12:08:59 +08:00
sibeibei
49b8292f51 fix(wifi): fix some wifi issues 241031
1. fix cant sleep if reconnect to connected ap
    2. clear pmk in internal reconnection
    3. update connect status for init-->auth
    4. add protection for probe request when wifi band is 5g
2024-11-08 12:08:59 +08:00
wangtao@espressif.com
ea05f7f647 fix(wifi): fix spiram ignore issue 2024-11-08 12:08:59 +08:00
xuxiao
e2c732c906 feat(wifi): add wifi support for esp32c5 eco1 2024-11-08 12:08:59 +08:00
morris
a5fee4b8cc fix(gpio): improve set level performance
by avoid "read-modify-write" operation. The registers designed to be
write only.

Related to https://github.com/espressif/esp-idf/issues/14674
2024-11-08 11:44:08 +08:00
Peter Macko
1254494dd8 fix(macos): ccache: re-enable, show stats, set CCACHE_DIR, limit CCACHE_MAXSIZE 2024-11-07 17:39:49 +01:00
Aditya Patwardhan
64b9d85a76 change(version): Update version to 5.4.0 2024-11-07 12:55:42 +05:50
morris
ec8de8a1f9 Merge branch 'feat/mcpwm_dead_time_add_warning_v5.4' into 'release/v5.4'
fix(mcpwm): add warning about generator deadtime (v5.4)

See merge request espressif/esp-idf!34729
2024-11-07 14:52:29 +08:00
Mahavir Jain
c366277e64 Merge branch 'fix/fetch_image_hdr_v5.4' into 'release/v5.4'
fix(esp_system): Correct address used to fetch application image header (v5.4)

See merge request espressif/esp-idf!34627
2024-11-07 13:48:54 +08:00
Chen Jichang
31befbfad3 feat(pcnt): add sleep retention init
Currently, due to the lack of sleep callback feature. We only init
sleep module but don't allocate it. Thus the power domain will be
kept during the light sleep. And temporarily disable pcnt sleep
retention support on P4 due to the lack of retention module ID.
2024-11-07 12:09:26 +08:00
Shu Chen
dd8b4fa06e Merge branch 'backport/upgrade-zigbee-examples-v5.4' into 'release/v5.4'
feat(zigbee): Upgrade the Zigbee lib to v1.6 for Zigbee examples(Backport v5.4)

See merge request espressif/esp-idf!34716
2024-11-07 11:39:54 +08:00
Shu Chen
343bb81729 Merge branch 'fix/esp_prov_ipv6_resolve_v5_4' into 'release/v5.4'
fix(tools/esp_prov): Fix hostname resolving for IPv6-only host(v5.4)

See merge request espressif/esp-idf!34679
2024-11-07 11:07:34 +08:00
Chen Jichang
7946eb51e0 fix(mcpwm): add warning about generator deadtime
Closes https://github.com/espressif/esp-idf/issues/14773
2024-11-07 10:56:57 +08:00
Shu Chen
367059b93d Merge branch 'backport/linker_script_check_missing_function_v54' into 'release/v5.4'
fix(802.15.4): add no inline to some static function(Backport v5.4)

See merge request espressif/esp-idf!34722
2024-11-07 10:53:37 +08:00
Xu Si Yu
454c3140ad fix(ci): optimize an openthread ci case 2024-11-07 10:49:37 +08:00
xieqinan@espressif.com
b0a9704c3d feat(zigbee): Upgrade the Zigbee lib to v1.6 for Zigbee examples
- Optimize the Zigbee light, switch and gateway examples
- Remove the esp_zigbee_rcp example
2024-11-07 10:39:39 +08:00
Michael (XIAO Xufeng)
bab289ca78 Merge branch 'fix/sdio_slave_add_pm_lock_v5.4' into 'release/v5.4'
fix(sdio_slave): fix issue that auto light sleep can happen SDIO slave enabled (v5.4)

See merge request espressif/esp-idf!34646
2024-11-07 02:31:38 +08:00
Island
81020a3748 Merge branch 'feat/support_controller_run_in_flash_only_v5.4' into 'release/v5.4'
feat/support controller run in flash only(backport v5.4)

See merge request espressif/esp-idf!34625
2024-11-06 20:06:08 +08:00
zwx
ab2e360266 fix(802.15.4): add no inline to some static function 2024-11-06 19:49:17 +08:00
xiongweichao
500165ffb3 fix(bt/bluedroid): Replace free/malloc with osi_free/malloc 2024-11-06 19:15:04 +08:00
Mahavir Jain
69d72ca243 Merge branch 'ci/nightly_run_crt_bundle_stress_test_v5.4' into 'release/v5.4'
Run https x509 bundle default crt bundle stress test using QEMU (v5.4)

See merge request espressif/esp-idf!34660
2024-11-06 18:45:15 +08:00
Mahavir Jain
2b12fb6daa Merge branch 'docs/fix_section_visibility_esp32p4_v5.4' into 'release/v5.4'
Fix typo to make a section visible for non-esp32 SPIRAM supported targets (v5.4)

See merge request espressif/esp-idf!34680
2024-11-06 17:45:06 +08:00
Island
7f42ed38fd Merge branch 'bugfix/fix_ble_build_fail_v5.4' into 'release/v5.4'
fix(ble/bluedroid): Fixed BLE build fail when enable dynamic memory and BLE5.0 (v5.4)

See merge request espressif/esp-idf!34665
2024-11-06 16:36:46 +08:00
Island
b763700bc8 Merge branch 'bugfix/fixed_h2_assert_master_1031_v5.4' into 'release/v5.4'
Bugfix/fixed h2 assert master 1031 (v5.4)

See merge request espressif/esp-idf!34541
2024-11-06 15:06:45 +08:00
morris
764f5414ff Merge branch 'ci/run_gdma_after_reset_v5.4' into 'release/v5.4'
fix(gdma): run test cases after reset (v5.4)

See merge request espressif/esp-idf!34689
2024-11-06 15:02:47 +08:00
Island
1e37c32fb6 Merge branch 'bugfix/fix_mem_debug_on_bluedroid_v5.4' into 'release/v5.4'
fix(bt/bluedroid): Fixed error when memory debug enabled (v5.4)

See merge request espressif/esp-idf!34576
2024-11-06 11:50:40 +08:00
Marius Vikhammer
ee5e2798ba Merge branch 'fix/nmi_not_triggering_on_s3_v5.4' into 'release/v5.4'
fix(examples): fix NMI interrupt example to work on ESP32-S3 (release v5.4)

See merge request espressif/esp-idf!34687
2024-11-06 11:31:51 +08:00
morris
eeb4baf17f fix(gdma): run test cases after reset 2024-11-06 11:24:16 +08:00
igor.udot
17a023989b ci: updated known failure cases file env 2024-11-06 10:42:40 +08:00
Omar Chebib
ad910e3ce0 fix(examples): fix NMI interrupt example to work on ESP32-S3 2024-11-06 10:15:09 +08:00
morris
f5c71b8715 Merge branch 'bugfix/wrong_return_type_v5.4' into 'release/v5.4'
fix(i2c_lcd): wrong return type for esp_lcd_new_panel_io_i2c (v5.4)

See merge request espressif/esp-idf!34653
2024-11-05 21:28:26 +08:00
harshal.patil
7c9bec2633 docs(mem_alloc): Fix typo to make a section visible for non-esp32 spiram targets 2024-11-05 16:13:08 +05:30
Alexey Gerenkov
c17aa3e020 Merge branch 'fix/sysview_stack_overflow_v5.4' into 'release/v5.4'
fix(sysview): reduce isr stack usage to avoid stack guard exception (v5.4)

See merge request espressif/esp-idf!34614
2024-11-05 18:36:25 +08:00
WanqQixiang
2980c7f5e5 fix(tools/esp_prov): Fix hostname resolving for IPv6-only host 2024-11-05 17:47:14 +08:00
Zhang Hai Peng
9685b3b4ca fix(ble/bluedroid): Fixed BLE build fail when enable dynamic memory and BLE5.0
(cherry picked from commit 94d1a4f1c0)

Co-authored-by: zhanghaipeng <zhanghaipeng@espressif.com>
2024-11-05 16:13:51 +08:00
harshal.patil
8b8956f7ed ci(examples/protocols): Run the https x509 bundle default crt bundle stress test using QEMU 2024-11-05 13:31:48 +05:30
Shu Chen
1754c8f8e5 Merge branch 'backport/fix_energy_scan_api_para_mismatch_v54' into 'release/v5.4'
fix(openthread): set channel for energy scan(Backport v5.4)

See merge request espressif/esp-idf!34597
2024-11-05 14:28:08 +08:00
morris
2770a95a5f fix(i2c_lcd): wrong return type for esp_lcd_new_panel_io_i2c
when build for C++ project
2024-11-05 13:46:16 +08:00
Shu Chen
f012157cf9 Merge branch 'feat/openthread_dataset_changed_event_v5_4' into 'release/v5.4'
feat(openthread): Add dataset changed event and post it in state change callback(v5.4)

See merge request espressif/esp-idf!34548
2024-11-05 12:17:22 +08:00
Xiao Xufeng
3e0611757b fix(sdio_slave): prevents peripheral power domain being powered off when SDIO slave in use 2024-11-05 03:22:06 +08:00
Xiao Xufeng
802e7b2192 feat(sleep_retention): allow drivers taking TOP power lock
Also add a dump function
2024-11-05 03:22:01 +08:00
Sergei Silnov
a2ffd9e955 Merge branch 'ci/fix_diff_manifest_sha_v5.4' into 'release/v5.4'
ci: use different base commit for merge result pipelines (v5.4)

See merge request espressif/esp-idf!34582
2024-11-05 01:07:13 +08:00
Zhao Wei Liang
0505eb80c9 fix(ble): fixed occasional crash issue in low memory scenarios on ESP32-H2
(cherry picked from commit dbad6a0ca5)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-11-05 00:05:58 +08:00
Zhao Wei Liang
ae6f824fcf fix(ble): fixed occasional crash issue in low memory scenarios on ESP32-C6
(cherry picked from commit dabd66e16f)

Co-authored-by: zwl <zhaoweiliang@espressif.com>
2024-11-05 00:05:58 +08:00
Laukik Hase
e0e285b841 fix(esp_system): Correct address used to fetch application image header 2024-11-04 14:07:17 +05:30
zhiweijian
2a05eb8fd3 feat(bt/controller): Support controller code run in flash only 2024-11-04 15:44:11 +08:00
wuzhenghui
651e5adbda fix(esp_hw_support): only support power down flash after revison v1.0 on esp32p4 2024-11-04 14:08:29 +08:00
wuzhenghui
2558760224 fix(esp_hw_support): fix writeback cache to psram after vo2 powerdown 2024-11-04 14:08:28 +08:00
Jiang Jiang Jian
0e6c74e93d Merge branch 'bugfix/fix_memory_leak_in_sco_v5.4' into 'release/v5.4'
fix(bt/bluedroid): Fix memory leak in sco when bluedroid disable (v5.4)

See merge request espressif/esp-idf!34564
2024-11-04 11:35:39 +08:00
Jiang Jiang Jian
b21b7294c6 Merge branch 'feature/add_ledc_output_in_sleep_test_v5.4' into 'release/v5.4'
feat(ledc): added a multi device test for testing ledc output in sleep (v5.4)

See merge request espressif/esp-idf!34522
2024-11-04 11:35:11 +08:00
Jiang Jiang Jian
131609cf29 Merge branch 'fix/fix_ota_slowclock_switching_v5.4' into 'release/v5.4'
fix(esp_hw_support): fix rtc slow clock missing after the OTA app changes the slow clock source (v5.4)

See merge request espressif/esp-idf!34488
2024-11-04 11:34:40 +08:00
Erhan Kurubas
92cc8a5512 fix(sysview): reduce isr stack usage to avoid stack guard exception 2024-11-01 22:30:37 +01:00
zwx
7c03514a28 fix(openthread): set channel for energy scan 2024-11-01 16:40:51 +08:00
Fu Hanxi
5f62667aba ci: use different base commit for merge result pipelines 2024-10-31 13:53:50 +01:00
chenjianhua
c6810a102b fix(bt/bluedroid): Fixed error when memory debug enabled 2024-10-31 19:12:47 +08:00
WanqQixiang
9677b9bfaf feat(openthread): Add dataset changed event and post it in state change callback 2024-10-31 19:04:00 +08:00
linruihao
6fe128ac6f fix(bt/bluedroid): Fix memory leak in sco when bluedroid disable 2024-10-31 17:52:31 +08:00
Song Ruo Jing
33103306a6 feat(ledc): added a multi device test for testing ledc output in sleep 2024-10-30 14:06:42 +08:00
Ivan Grokhotkov
851679e63a Merge branch 'maint/release_v5.4_codeowners' into 'release/v5.4'
change(gitlab): simplify approvals for backports (v5.4)

See merge request espressif/esp-idf!34481
2024-10-29 17:26:54 +08:00
wuzhenghui
280f6cb4e9 fix(esp_hw_support): disable unused clock sources after rtc clock switching complete 2024-10-28 20:16:01 +08:00
wuzhenghui
cf5bdf5e9f fix(esp_hw_support): enable all supported slow clock at pmu_init 2024-10-28 20:15:55 +08:00
Ivan Grokhotkov
661a487610 change(gitlab): simplify approvals for backports (v5.4) 2024-10-28 10:38:15 +01:00
11982 changed files with 463981 additions and 1820877 deletions

View File

@@ -1,4 +1,4 @@
[codespell]
skip = build,*.yuv,components/fatfs/src/*,alice.txt,*.rgb,components/wpa_supplicant/*,components/esp_wifi/*,*.pem,*/COPYING*,docs/sphinx-known-warnings.txt
skip = build,*.yuv,components/fatfs/src/*,alice.txt,*.rgb,components/wpa_supplicant/*,components/esp_wifi/*,*.pem
ignore-words-list = ser,dout,rsource,fram,inout,shs,ans,aci,unstall,unstalling,hart,wheight,wel,ot,fane,assertIn,registr,oen,parms
write-changes = true

165
.flake8 Normal file
View File

@@ -0,0 +1,165 @@
[flake8]
select =
# Full lists are given in order to suppress all errors from other plugins
# Full list of pyflakes error codes:
F401, # module imported but unused
F402, # import module from line N shadowed by loop variable
F403, # 'from module import *' used; unable to detect undefined names
F404, # future import(s) name after other statements
F405, # name may be undefined, or defined from star imports: module
F406, # 'from module import *' only allowed at module level
F407, # an undefined __future__ feature name was imported
F601, # dictionary key name repeated with different values
F602, # dictionary key variable name repeated with different values
F621, # too many expressions in an assignment with star-unpacking
F622, # two or more starred expressions in an assignment (a, *b, *c = d)
F631, # assertion test is a tuple, which are always True
F701, # a break statement outside of a while or for loop
F702, # a continue statement outside of a while or for loop
F703, # a continue statement in a finally block in a loop
F704, # a yield or yield from statement outside of a function
F705, # a return statement with arguments inside a generator
F706, # a return statement outside of a function/method
F707, # an except: block as not the last exception handler
F721, F722, # doctest syntax error syntax error in forward type annotation
F811, # redefinition of unused name from line N
F812, # list comprehension redefines name from line N
F821, # undefined name name
F822, # undefined name name in __all__
F823, # local variable name referenced before assignment
F831, # duplicate argument name in function definition
F841, # local variable name is assigned to but never used
F901, # raise NotImplemented should be raise NotImplementedError
# Full list of pycodestyle violations:
E101, # indentation contains mixed spaces and tabs
E111, # indentation is not a multiple of four
E112, # expected an indented block
E113, # unexpected indentation
E114, # indentation is not a multiple of four (comment)
E115, # expected an indented block (comment)
E116, # unexpected indentation (comment)
E121, # continuation line under-indented for hanging indent
E122, # continuation line missing indentation or outdented
E123, # closing bracket does not match indentation of opening bracket's line
E124, # closing bracket does not match visual indentation
E125, # continuation line with same indent as next logical line
E126, # continuation line over-indented for hanging indent
E127, # continuation line over-indented for visual indent
E128, # continuation line under-indented for visual indent
E129, # visually indented line with same indent as next logical line
E131, # continuation line unaligned for hanging indent
E133, # closing bracket is missing indentation
E201, # whitespace after '('
E202, # whitespace before ')'
E203, # whitespace before ':'
E211, # whitespace before '('
E221, # multiple spaces before operator
E222, # multiple spaces after operator
E223, # tab before operator
E224, # tab after operator
E225, # missing whitespace around operator
E226, # missing whitespace around arithmetic operator
E227, # missing whitespace around bitwise or shift operator
E228, # missing whitespace around modulo operator
E231, # missing whitespace after ',', ';', or ':'
E241, # multiple spaces after ','
E242, # tab after ','
E251, # unexpected spaces around keyword / parameter equals
E261, # at least two spaces before inline comment
E262, # inline comment should start with '# '
E265, # block comment should start with '# '
E266, # too many leading '#' for block comment
E271, # multiple spaces after keyword
E272, # multiple spaces before keyword
E273, # tab after keyword
E274, # tab before keyword
E275, # missing whitespace after keyword
E301, # expected 1 blank line, found 0
E302, # expected 2 blank lines, found 0
E303, # too many blank lines
E304, # blank lines found after function decorator
E305, # expected 2 blank lines after end of function or class
E306, # expected 1 blank line before a nested definition
E401, # multiple imports on one line
E402, # module level import not at top of file
E501, # line too long (82 > 79 characters)
E502, # the backslash is redundant between brackets
E701, # multiple statements on one line (colon)
E702, # multiple statements on one line (semicolon)
E703, # statement ends with a semicolon
E704, # multiple statements on one line (def)
E711, # comparison to None should be 'if cond is None:'
E712, # comparison to True should be 'if cond is True:' or 'if cond:'
E713, # test for membership should be 'not in'
E714, # test for object identity should be 'is not'
E721, # do not compare types, use 'isinstance()'
E722, # do not use bare except, specify exception instead
E731, # do not assign a lambda expression, use a def
E741, # do not use variables named 'l', 'O', or 'I'
E742, # do not define classes named 'l', 'O', or 'I'
E743, # do not define functions named 'l', 'O', or 'I'
E901, # SyntaxError or IndentationError
E902, # IOError
W191, # indentation contains tabs
W291, # trailing whitespace
W292, # no newline at end of file
W293, # blank line contains whitespace
W391, # blank line at end of file
W503, # line break before binary operator
W504, # line break after binary operator
W505, # doc line too long (82 > 79 characters)
W601, # .has_key() is deprecated, use 'in'
W602, # deprecated form of raising exception
W603, # '<>' is deprecated, use '!='
W604, # backticks are deprecated, use 'repr()'
W605, # invalid escape sequence 'x'
W606, # 'async' and 'await' are reserved keywords starting with Python 3.7
# Full list of flake8 violations
E999, # failed to compile a file into an Abstract Syntax Tree for the plugins that require it
# Full list of mccabe violations
C901 # complexity value provided by the user
ignore =
E221, # multiple spaces before operator
E231, # missing whitespace after ',', ';', or ':'
E241, # multiple spaces after ','
W503, # line break before binary operator
W504 # line break after binary operator
max-line-length = 160
show_source = True
statistics = True
exclude =
.git,
__pycache__,
# submodules
components/bootloader/subproject/components/micro-ecc/micro-ecc,
components/bt/host/nimble/nimble,
components/cmock/CMock,
components/json/cJSON,
components/mbedtls/mbedtls,
components/openthread/openthread,
components/unity/unity,
components/spiffs/spiffs,
# autogenerated scripts
components/protocomm/python/constants_pb2.py,
components/protocomm/python/sec0_pb2.py,
components/protocomm/python/sec1_pb2.py,
components/protocomm/python/sec2_pb2.py,
components/protocomm/python/session_pb2.py,
components/wifi_provisioning/python/wifi_ctrl_pb2.py,
components/wifi_provisioning/python/wifi_scan_pb2.py,
components/wifi_provisioning/python/wifi_config_pb2.py,
components/wifi_provisioning/python/wifi_constants_pb2.py,
components/esp_local_ctrl/python/esp_local_ctrl_pb2.py,
per-file-ignores =
# Sphinx conf.py files use star imports to setup config variables
docs/conf_common.py: F405

View File

@@ -95,26 +95,6 @@ body:
render: plain
validations:
required: false
- type: textarea
id: diag
attributes:
label: Diagnostic report archive.
description: |
Diagnostic report for ESP-IDF created using [idf.py diag](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-diag.html) or [esp-idf-diag](https://github.com/espressif/esp-idf-diag). The `idf.py diag` command is available beginning with ESP-IDF version 5.5. For older versions, you may want to consider using the `esp-idf-diag` command.
In your project directory, execute the following command:
Using `idf.py diag`
1. idf.py diag
Using `esp-idf-diag`
1. pip install esp-idf-diag
2. esp-idf-diag create
Once the report is generated, the tool will guide you with the next steps.
placeholder: Please attach the diagnostic report zip file here.
validations:
required: false
- type: textarea
id: more-info
attributes:

View File

@@ -26,7 +26,7 @@ body:
id: chip_revision
attributes:
label: Espressif SoC revision.
description: On which Espressif SoC revision does your application run on? Run `esptool chip-id` (or `esptool.py chip_id` for ESP-IDF v5.5 and older) to find it.
description: On which Espressif SoC revision does your application run on? Run `esptool chip_id` to find it.
placeholder: ex. ESP32-C3 (QFN32) (revision v0.3)
validations:
required: true
@@ -123,26 +123,6 @@ body:
render: plain
validations:
required: false
- type: textarea
id: diag
attributes:
label: Diagnostic report archive.
description: |
Diagnostic report for ESP-IDF created using [idf.py diag](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-diag.html) or [esp-idf-diag](https://github.com/espressif/esp-idf-diag). The `idf.py diag` command is available beginning with ESP-IDF version 5.5. For older versions, you may want to consider using the `esp-idf-diag` command.
In your project directory, execute the following command:
Using `idf.py diag`
1. idf.py diag
Using `esp-idf-diag`
1. pip install esp-idf-diag
2. esp-idf-diag create
Once the report is generated, the tool will guide you with the next steps.
placeholder: Please attach the diagnostic report zip file here.
validations:
required: false
- type: textarea
id: more-info
attributes:

View File

@@ -21,7 +21,7 @@ jobs:
# Disable the job in forks
if: ${{ github.repository_owner == 'espressif' }}
runs-on: ubuntu-24.04-X64-large
runs-on: ubuntu-latest
steps:
# Depending on the branch/tag, set CLONE_BRANCH_OR_TAG variable (used in the Dockerfile
# as a build arg) and TAG_NAME (used when tagging the image).

View File

@@ -14,11 +14,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- name: Sync issue comments to JIRA
uses: espressif/sync-jira-actions@v1
uses: espressif/github-actions/sync_issues_to_jira@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
JIRA_PASS: ${{ secrets.JIRA_PASS }}
JIRA_PROJECT: IDFGH
JIRA_URL: ${{ secrets.JIRA_URL }}
JIRA_USER: ${{ secrets.JIRA_USER }}
WEBHOOK_URL: ${{ secrets.JIRA_ISSUE_COMMENT_WEBHOOK_URL }}

View File

@@ -14,11 +14,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- name: Sync GitHub issues to Jira project
uses: espressif/sync-jira-actions@v1
uses: espressif/github-actions/sync_issues_to_jira@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
JIRA_PASS: ${{ secrets.JIRA_PASS }}
JIRA_PROJECT: IDFGH
JIRA_URL: ${{ secrets.JIRA_URL }}
JIRA_USER: ${{ secrets.JIRA_USER }}
WEBHOOK_URL: ${{ secrets.JIRA_ISSUE_COMMENT_WEBHOOK_URL }}

View File

@@ -23,7 +23,7 @@ jobs:
- name: Set up Python environment
uses: actions/setup-python@master
with:
python-version: "3.10"
python-version: v3.8
- name: Install python packages
run: |
pip install pre-commit

View File

@@ -8,11 +8,10 @@ on:
jobs:
release_zips:
name: Create release zip file
runs-on: ubuntu-24.04
runs-on: ubuntu-20.04
steps:
- name: Create a recursive clone source zip
uses: espressif/release-zips-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
release_project_name: ESP-IDF
git_extra_args: --shallow-since="1 year ago"
uses: espressif/github-actions/release_zips@master
env:
RELEASE_PROJECT_NAME: ESP-IDF
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -27,7 +27,6 @@ jobs:
- name: Vulnerability scan
env:
SBOM_CHECK_LOCAL_DB: ${{ vars.SBOM_CHECK_LOCAL_DB }}
SBOM_MATTERMOST_WEBHOOK: ${{ secrets.SBOM_MATTERMOST_WEBHOOK }}
NVDAPIKEY: ${{ secrets.NVDAPIKEY }}
uses: espressif/esp-idf-sbom-action@master

5
.gitignore vendored
View File

@@ -37,7 +37,6 @@ components/**/build/
components/**/build_*_*/
components/**/sdkconfig
components/**/sdkconfig.old
components/**/test_apps/wifi_nvs_config/nvs_data_suffix.csv
# Example project files
examples/**/build/
@@ -66,6 +65,8 @@ build_summary_*.xml
coverage.info
coverage_report/
test_multi_heap_host
# VS Code Settings
.vscode/
@@ -98,7 +99,7 @@ managed_components
pytest-embedded/
# legacy one
pytest_embedded_log/
app_info_*.txt
list_job*.txt
size_info*.txt
XUNIT_RESULT*.xml
.manifest_sha

View File

@@ -3,30 +3,33 @@ workflow:
# Disable those non-protected push triggered pipelines
- if: '$CI_COMMIT_REF_NAME != "master" && $CI_COMMIT_BRANCH !~ /^release\/v/ && $CI_COMMIT_TAG !~ /^v\d+\.\d+(\.\d+)?($|-)/ && $CI_COMMIT_TAG !~ /^qa-test/ && $CI_PIPELINE_SOURCE == "push"'
when: never
# merged result pipelines
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA
# when running merged result pipelines, CI_COMMIT_SHA represents the temp commit it created.
# Please use PIPELINE_COMMIT_SHA at all places that require a commit sha of the original commit.
- if: $CI_OPEN_MERGE_REQUESTS != null
variables:
PIPELINE_COMMIT_SHA: $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA
# else
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA == null || $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA == ""
IS_MR_PIPELINE: 1
- if: $CI_OPEN_MERGE_REQUESTS == null
variables:
PIPELINE_COMMIT_SHA: $CI_COMMIT_SHA
IS_MR_PIPELINE: 0
- when: always
# Place the default settings in `.gitlab/ci/common.yml` instead
include:
- ".gitlab/ci/danger.yml"
- ".gitlab/ci/common.yml"
- ".gitlab/ci/rules.yml"
- ".gitlab/ci/upload_cache.yml"
- ".gitlab/ci/docs.yml"
- ".gitlab/ci/static-code-analysis.yml"
- ".gitlab/ci/pre_commit.yml"
- ".gitlab/ci/pre_check.yml"
- ".gitlab/ci/build.yml"
- ".gitlab/ci/integration_test.yml"
- ".gitlab/ci/host-test.yml"
- ".gitlab/ci/deploy.yml"
- ".gitlab/ci/post_deploy.yml"
- ".gitlab/ci/test-win.yml"
- '.gitlab/ci/danger.yml'
- '.gitlab/ci/common.yml'
- '.gitlab/ci/rules.yml'
- '.gitlab/ci/upload_cache.yml'
- '.gitlab/ci/docs.yml'
- '.gitlab/ci/static-code-analysis.yml'
- '.gitlab/ci/pre_commit.yml'
- '.gitlab/ci/pre_check.yml'
- '.gitlab/ci/build.yml'
- '.gitlab/ci/integration_test.yml'
- '.gitlab/ci/host-test.yml'
- '.gitlab/ci/deploy.yml'
- '.gitlab/ci/post_deploy.yml'
- '.gitlab/ci/retry_failed_jobs.yml'
- '.gitlab/ci/test-win.yml'

View File

@@ -2,252 +2,5 @@
#
# https://docs.gitlab.com/ee/user/project/code_owners.html#the-syntax-of-code-owners-files
#
# If more than one rule matches a given file, the latest rule is used.
# The file should be generally kept sorted, except when it is necessary
# to use a different order due to the fact above. In that case, use
# '# sort-order-reset' comment line to reset the sort order.
#
# Recipes for a few common cases:
#
# 1. Specific directory with all its contents:
#
# /components/app_trace/
#
# Note the trailing slash!
#
# 2. File with certain extension in any subdirectory of a certain directory:
#
# /examples/**/*.py
#
# This includes an *.py files in /examples/ directory as well.
#
# 3. Contents of a directory with a certain name, anywhere in the tree:
#
# test_*_host/
#
# Will match everything under components/efuse/test_efuse_host/,
# components/heap/test_multi_heap_host/, components/lwip/test_afl_host/, etc.
#
# 4. Same as above, except limited to a specific place in the tree:
#
# /components/esp32*/
#
# Matches everything under /components/esp32, /components/esp32s2, etc.
# Doesn't match /tools/some-test/components/esp32s5.
#
# 5. Specific file:
#
# /tools/tools.json
#
# 6. File with a certain name anywhere in the tree
#
# .gitignore
#
* @esp-idf-codeowners/other
/.* @esp-idf-codeowners/tools
/.codespellrc @esp-idf-codeowners/ci
/.github/workflows/ @esp-idf-codeowners/ci
/.gitlab-ci.yml @esp-idf-codeowners/ci
/.gitlab/ci/ @esp-idf-codeowners/ci
/.idf_build_apps.toml @esp-idf-codeowners/ci
/.idf_ci.toml @esp-idf-codeowners/ci
/.pre-commit-config.yaml @esp-idf-codeowners/ci
/.vale.ini @esp-idf-codeowners/docs
/CMakeLists.txt @esp-idf-codeowners/build-config
/COMPATIBILITY*.md @esp-idf-codeowners/peripherals
/CONTRIBUTING.md @esp-idf-codeowners/docs
/Kconfig @esp-idf-codeowners/build-config
/README*.md @esp-idf-codeowners/docs
/ROADMAP*.md @esp-idf-codeowners/docs
/SUPPORT_POLICY*.md @esp-idf-codeowners/docs
/add_path.sh @esp-idf-codeowners/tools
/conftest.py @esp-idf-codeowners/ci
/export.* @esp-idf-codeowners/tools
/install.* @esp-idf-codeowners/tools
/pytest.ini @esp-idf-codeowners/ci
/ruff.toml @esp-idf-codeowners/tools
/sdkconfig.rename @esp-idf-codeowners/build-config
/sonar-project.properties @esp-idf-codeowners/ci
# sort-order-reset
/components/app_trace/ @esp-idf-codeowners/debugging
/components/app_update/ @esp-idf-codeowners/system @esp-idf-codeowners/app-utilities
/components/bootloader*/ @esp-idf-codeowners/system @esp-idf-codeowners/security
/components/bootloader_support/bootloader_flash/ @esp-idf-codeowners/peripherals
/components/bt/ @esp-idf-codeowners/bluetooth
/components/cmock/ @esp-idf-codeowners/system
/components/console/ @esp-idf-codeowners/system @esp-idf-codeowners/app-utilities/console
/components/cxx/ @esp-idf-codeowners/system
/components/driver/ @esp-idf-codeowners/peripherals
/components/efuse/ @esp-idf-codeowners/system
/components/esp_adc/ @esp-idf-codeowners/peripherals
/components/esp_app_format/ @esp-idf-codeowners/system @esp-idf-codeowners/app-utilities
/components/esp_blockdev/ @esp-idf-codeowners/storage
/components/esp_bootloader_format/ @esp-idf-codeowners/system @esp-idf-codeowners/app-utilities
/components/esp_coex/ @esp-idf-codeowners/wifi @esp-idf-codeowners/bluetooth @esp-idf-codeowners/ieee802154
/components/esp_common/ @esp-idf-codeowners/system
/components/esp_driver_*/ @esp-idf-codeowners/peripherals
/components/esp_driver_sdmmc/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/storage
/components/esp_eth/ @esp-idf-codeowners/network
/components/esp_event/ @esp-idf-codeowners/system
/components/esp_gdbstub/ @esp-idf-codeowners/debugging
/components/esp_hal_*/ @esp-idf-codeowners/peripherals
/components/esp_hid/ @esp-idf-codeowners/bluetooth
/components/esp_http_client/ @esp-idf-codeowners/app-utilities
/components/esp_http_server/ @esp-idf-codeowners/app-utilities
/components/esp_https_ota/ @esp-idf-codeowners/app-utilities
/components/esp_https_server/ @esp-idf-codeowners/app-utilities
/components/esp_hw_support/ @esp-idf-codeowners/system @esp-idf-codeowners/peripherals
/components/esp_hw_support/lowpower/ @esp-idf-codeowners/power-management
/components/esp_hw_support/usb_phy/ @esp-idf-codeowners/peripherals/usb
/components/esp_lcd/ @esp-idf-codeowners/peripherals
/components/esp_libc/ @esp-idf-codeowners/system @esp-idf-codeowners/toolchain
/components/esp_local_ctrl/ @esp-idf-codeowners/app-utilities
/components/esp_mm/ @esp-idf-codeowners/peripherals
/components/esp_netif/ @esp-idf-codeowners/network
/components/esp_netif_stack/ @esp-idf-codeowners/network
/components/esp_partition/ @esp-idf-codeowners/storage
/components/esp_phy/ @esp-idf-codeowners/bluetooth @esp-idf-codeowners/wifi @esp-idf-codeowners/ieee802154
/components/esp_pm/ @esp-idf-codeowners/power-management @esp-idf-codeowners/bluetooth @esp-idf-codeowners/wifi @esp-idf-codeowners/system
/components/esp_psram/ @esp-idf-codeowners/peripherals
/components/esp_psram/system_layer/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/system
/components/esp_ringbuf/ @esp-idf-codeowners/system
/components/esp_rom/ @esp-idf-codeowners/system @esp-idf-codeowners/bluetooth @esp-idf-codeowners/wifi
/components/esp_security/ @esp-idf-codeowners/security
/components/esp_stdio/ @esp-idf-codeowners/storage @esp-idf-codeowners/system
/components/esp_system/ @esp-idf-codeowners/system
/components/esp_tee/ @esp-idf-codeowners/security
/components/esp_timer/ @esp-idf-codeowners/system
/components/esp-tls/ @esp-idf-codeowners/app-utilities
/components/esp_trace/ @esp-idf-codeowners/debugging
/components/esp_usb_cdc_rom_console/ @esp-idf-codeowners/system @esp-idf-codeowners/peripherals/usb
/components/esp_wifi/ @esp-idf-codeowners/wifi
/components/espcoredump/ @esp-idf-codeowners/debugging
/components/esptool_py/ @esp-idf-codeowners/tools
/components/fatfs/ @esp-idf-codeowners/storage
/components/freertos/ @esp-idf-codeowners/system
/components/hal/ @esp-idf-codeowners/peripherals
/components/hal/test_apps/crypto/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/security
/components/hal/test_apps/tee/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/security
/components/heap/ @esp-idf-codeowners/system
/components/http_parser/ @esp-idf-codeowners/app-utilities
/components/idf_test/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/system
/components/ieee802154/ @esp-idf-codeowners/ieee802154
/components/linux/ @esp-idf-codeowners/system
/components/log/ @esp-idf-codeowners/system
/components/lwip/ @esp-idf-codeowners/lwip
/components/mbedtls/ @esp-idf-codeowners/app-utilities/mbedtls @esp-idf-codeowners/security
/components/mqtt/ @esp-idf-codeowners/network
/components/nvs_flash/ @esp-idf-codeowners/storage
/components/nvs_sec_provider/ @esp-idf-codeowners/storage @esp-idf-codeowners/security
/components/openthread/ @esp-idf-codeowners/ieee802154
/components/partition_table/ @esp-idf-codeowners/system
/components/perfmon/ @esp-idf-codeowners/debugging
/components/protobuf-c/ @esp-idf-codeowners/app-utilities
/components/protocomm/ @esp-idf-codeowners/app-utilities/provisioning
/components/pthread/ @esp-idf-codeowners/system
/components/riscv/ @esp-idf-codeowners/system
/components/rt/ @esp-idf-codeowners/system
/components/sdmmc/ @esp-idf-codeowners/storage
/components/soc/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/system
/components/spi_flash/ @esp-idf-codeowners/peripherals
/components/spiffs/ @esp-idf-codeowners/storage
/components/tcp_transport/ @esp-idf-codeowners/network
/components/ulp/ @esp-idf-codeowners/system
/components/unity/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/system
/components/vfs/ @esp-idf-codeowners/storage
/components/wear_levelling/ @esp-idf-codeowners/storage
/components/wpa_supplicant/ @esp-idf-codeowners/wifi @esp-idf-codeowners/app-utilities/mbedtls
/components/xtensa/ @esp-idf-codeowners/system
/docs/ @esp-idf-codeowners/docs
/docs/docs_not_updated/ @esp-idf-codeowners/all-maintainers
/docs/**/api-guides/tools/ @esp-idf-codeowners/tools
/docs/**/api-guides/kconfig/ @esp-idf-codeowners/tools
/docs/en/api-guides/core_dump.rst @esp-idf-codeowners/debugging
/docs/**/api-guides/wifi* @esp-idf-codeowners/wifi
/docs/**/api-guides/esp-wifi-mesh.rst @esp-idf-codeowners/wifi
/docs/en/api-guides/jtag-debugging/ @esp-idf-codeowners/debugging
/docs/**/api-reference/bluetooth/ @esp-idf-codeowners/bluetooth
/docs/**/api-reference/network/ @esp-idf-codeowners/network @esp-idf-codeowners/wifi
/docs/**/api-reference/peripherals/ @esp-idf-codeowners/peripherals
/docs/**/api-reference/peripherals/usb* @esp-idf-codeowners/peripherals @esp-idf-codeowners/peripherals/usb
/docs/**/api-reference/peripherals/usb*/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/peripherals/usb
/docs/**/api-reference/protocols/ @esp-idf-codeowners/network @esp-idf-codeowners/app-utilities
/docs/**/api-reference/provisioning/ @esp-idf-codeowners/app-utilities/provisioning
/docs/**/api-reference/storage/ @esp-idf-codeowners/storage
/docs/**/api-reference/system/ @esp-idf-codeowners/system
/docs/**/security/ @esp-idf-codeowners/security
/docs/**/migration-guides/ @esp-idf-codeowners/docs @esp-idf-codeowners/all-maintainers
/docs/**/contribute/install-pre-commit-hook.rst @esp-idf-codeowners/ci @esp-idf-codeowners/tools
/examples/README.md @esp-idf-codeowners/docs @esp-idf-codeowners/ci
/examples/**/*.py @esp-idf-codeowners/ci @esp-idf-codeowners/tools
/examples/bluetooth/ @esp-idf-codeowners/bluetooth
/examples/build_system/ @esp-idf-codeowners/build-config
/examples/common_components/ @esp-idf-codeowners/system @esp-idf-codeowners/wifi @esp-idf-codeowners/lwip @esp-idf-codeowners/network
/examples/custom_bootloader/ @esp-idf-codeowners/system
/examples/cxx/ @esp-idf-codeowners/system
/examples/ethernet/ @esp-idf-codeowners/network
/examples/get-started/ @esp-idf-codeowners/system
/examples/ieee802154/ @esp-idf-codeowners/ieee802154
/examples/lowpower/ @esp-idf-codeowners/power-management @esp-idf-codeowners/system
/examples/mesh/ @esp-idf-codeowners/wifi
/examples/network/ @esp-idf-codeowners/network @esp-idf-codeowners/wifi
/examples/openthread/ @esp-idf-codeowners/ieee802154
/examples/peripherals/ @esp-idf-codeowners/peripherals
/examples/peripherals/usb/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/peripherals/usb
/examples/phy/ @esp-idf-codeowners/bluetooth @esp-idf-codeowners/wifi @esp-idf-codeowners/ieee802154
/examples/protocols/ @esp-idf-codeowners/network @esp-idf-codeowners/app-utilities
/examples/security/ @esp-idf-codeowners/security
/examples/storage/ @esp-idf-codeowners/storage
/examples/system/ @esp-idf-codeowners/system
/examples/system/ota/ @esp-idf-codeowners/app-utilities
/examples/wifi/ @esp-idf-codeowners/wifi
/examples/zigbee/ @esp-idf-codeowners/ieee802154
/tools/ @esp-idf-codeowners/tools
/tools/ble/ @esp-idf-codeowners/app-utilities
/tools/bt/ @esp-idf-codeowners/bluetooth
/tools/ci/ @esp-idf-codeowners/ci
/tools/cmake/ @esp-idf-codeowners/build-config
/tools/cmake/toolchain-*.cmake @esp-idf-codeowners/toolchain
/tools/cmakev2/ @esp-idf-codeowners/build-config
/tools/esp_app_trace/ @esp-idf-codeowners/debugging
/tools/gdb_panic_server.py @esp-idf-codeowners/debugging
/tools/kconfig*/ @esp-idf-codeowners/build-config
/tools/ldgen/ @esp-idf-codeowners/build-config
/tools/mass_mfg/ @esp-idf-codeowners/app-utilities
/tools/mocks/ @esp-idf-codeowners/system
/tools/test_apps/ @esp-idf-codeowners/ci
/tools/test_apps/README.md @esp-idf-codeowners/docs @esp-idf-codeowners/ci
## Note: owners here should be the same as the owners for the same example subdir, above
/tools/test_apps/build_system/ @esp-idf-codeowners/build-config
/tools/test_apps/components/test_utils/ @esp-idf-codeowners/peripherals @esp-idf-codeowners/system
/tools/test_apps/configs/ @esp-idf-codeowners/system
/tools/test_apps/linux_compatible/ @esp-idf-codeowners/system
/tools/test_apps/phy/ @esp-idf-codeowners/bluetooth @esp-idf-codeowners/wifi @esp-idf-codeowners/ieee802154
/tools/test_apps/protocols/ @esp-idf-codeowners/network @esp-idf-codeowners/app-utilities
/tools/test_apps/security/ @esp-idf-codeowners/security
/tools/test_apps/storage/ @esp-idf-codeowners/storage
/tools/test_apps/system/ @esp-idf-codeowners/system
/tools/test_apps/**/*.py @esp-idf-codeowners/ci @esp-idf-codeowners/tools
/tools/test_build_system/ @esp-idf-codeowners/tools @esp-idf-codeowners/build-config
/tools/tools.json @esp-idf-codeowners/tools @esp-idf-codeowners/toolchain @esp-idf-codeowners/debugging
# sort-order-reset
/components/**/test_apps/**/*.py @esp-idf-codeowners/ci @esp-idf-codeowners/tools
# ignore lists
/tools/ci/check_copyright_config.yaml @esp-idf-codeowners/all-maintainers
/tools/ci/check_copyright_ignore.txt @esp-idf-codeowners/all-maintainers
/tools/ci/mypy_ignore_list.txt @esp-idf-codeowners/tools
* @esp-idf-codeowners/all-maintainers

View File

@@ -145,11 +145,11 @@ check if there's a suitable `.if-<if-anchor-you-need>` anchor
1. if there is, create a rule following [`rules` Template Naming Rules](#rules-template-naming-rules).For detail information, please refer to [GitLab Documentation `rules-if`](https://docs.gitlab.com/ee/ci/yaml/README.html#rulesif). Here's an example.
```yaml
.rules:patterns:clang_tidy:
.rules:patterns:python-files:
rules:
- <<: *if-protected
- <<: *if-dev-push
changes: *patterns-c-files
changes: *patterns-python-files
```
2. if there isn't
@@ -250,9 +250,76 @@ We're using the latest version of [idf-build-apps][idf-build-apps]. Please refer
In ESP-IDF CI, there's a few more special rules are additionally supported to disable the check app dependencies feature:
- Add MR labels `BUILD_AND_TEST_ALL_APPS`
- Pipeline variable `IDF_CI_SELECT_ALL_PYTEST_CASES=1`
- Run in protected branches
## Upload/Download Artifacts to Internal Minio Server
Please refer to the documentation [here](https://docs.espressif.com/projects/idf-ci/en/latest/guides/cli.html)
### Users Without Access to Minio
If you don't have access to the internal Minio server, you can still download the artifacts from the shared link in the job log.
The log will look like this:
```shell
Pipeline ID : 587355
Job name : build_clang_test_apps_esp32
Job ID : 40272275
Created archive file: 40272275.zip, uploading as 587355/build_dir_without_map_and_elf_files/build_clang_test_apps_esp32/40272275.zip
Please download the archive file includes build_dir_without_map_and_elf_files from [INTERNAL_URL]
```
### Users With Access to Minio
#### Env Vars for Minio
Minio takes these env vars to connect to the server:
- `IDF_S3_SERVER`
- `IDF_S3_ACCESS_KEY`
- `IDF_S3_SECRET_KEY`
- `IDF_S3_BUCKET`
#### Artifacts Types and File Patterns
The artifacts types and corresponding file patterns are defined in tools/ci/artifacts_handler.py, inside `ArtifactType` and `TYPE_PATTERNS_DICT`.
#### Upload
```shell
python tools/ci/artifacts_handler.py upload
```
will upload the files that match the file patterns to minio object storage with name:
`<pipeline_id>/<artifact_type>/<job_name>/<job_id>.zip`
For example, job 39043328 will upload these four files:
- `575500/map_and_elf_files/build_pytest_examples_esp32/39043328.zip`
- `575500/build_dir_without_map_and_elf_files/build_pytest_examples_esp32/39043328.zip`
- `575500/logs/build_pytest_examples_esp32/39043328.zip`
- `575500/size_reports/build_pytest_examples_esp32/39043328.zip`
#### Download
You may run
```shell
python tools/ci/artifacts_handler.py download --pipeline_id <pipeline_id>
```
to download all files of the pipeline, or
```shell
python tools/ci/artifacts_handler.py download --pipeline_id <pipeline_id> --job_name <job_name_or_pattern>
```
to download all files with the specified job name or pattern, or
```shell
python tools/ci/artifacts_handler.py download --pipeline_id <pipeline_id> --job_name <job_name_or_pattern> --type <artifact_type> <artifact_type> ...
```
to download all files with the specified job name or pattern and artifact type(s).
You may check all detailed documentation with `python tools/ci/artifacts_handler.py download -h`

View File

@@ -1,14 +1,55 @@
.build_template:
stage: build
extends:
- .before_script:build
- .after_script:build
- .after_script:build:ccache-show-stats:upload-failed-job-logs
image: $ESP_ENV_IMAGE
tags: [build, shiny]
tags:
- build
# build only on shiny servers since shiny storage server is at the same location
- shiny
variables:
# Enable ccache for all build jobs. See configure_ci_environment.sh for more ccache related settings.
IDF_CCACHE_ENABLE: "1"
dependencies: []
.build_cmake_clang_template:
extends:
- .build_template
- .before_script:build
- .after_script:build:ccache-show-stats
dependencies: # set dependencies to null to avoid missing artifacts issue
needs:
- job: fast_template_app
artifacts: false
- pipeline_variables
artifacts:
paths:
# The other artifacts patterns are defined under tools/ci/artifacts_handler.py
# Now we're uploading/downloading the binary files from our internal storage server
#
# keep the log file to help debug
- "**/build*/build_log.txt"
# keep the size info to help track the binary size
- size_info.txt
- "**/build*/size.json"
expire_in: 1 week
when: always
variables:
IDF_TOOLCHAIN: clang
TEST_BUILD_OPTS_EXTRA: ""
TEST_DIR: tools/test_apps/system/clang_build_test
PYTEST_IGNORE_COLLECT_IMPORT_ERROR: "1"
script:
# CI specific options start from "--parallel-count xxx". could ignore when running locally
- run_cmd python tools/ci/ci_build_apps.py $TEST_DIR -v
-t $IDF_TARGET
--copy-sdkconfig
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--modified-components ${MR_MODIFIED_COMPONENTS}
--modified-files ${MR_MODIFIED_FILES}
$TEST_BUILD_OPTS_EXTRA
- python tools/ci/artifacts_handler.py upload
######################
# build_template_app #
@@ -16,11 +57,18 @@
.build_template_app_template:
extends:
- .build_template
- .before_script:build
variables:
LOG_PATH: "${CI_PROJECT_DIR}/log_template_app"
BUILD_PATH: "${CI_PROJECT_DIR}/build_template_app"
BUILD_DIR: "${BUILD_PATH}/@t/@w"
BUILD_LOG_CMAKE: "${LOG_PATH}/cmake_@t_@w.txt"
BUILD_COMMAND_ARGS: ""
artifacts:
paths:
- log_template_app/*
- size_info.txt
- build_template_app/**/size*.json
- build_template_app/**/size.json
expire_in: 1 week
when: always
script:
@@ -34,71 +82,61 @@
# Only do the default cmake build for each target, remaining part are done in the build_template_app job
- tools/ci/build_template_app.sh ${BUILD_COMMAND_ARGS}
# build-related-pre-check-jobs ------------------------------------------------
# Build at least one project for each target at earliest stage to reduce build cost for obvious failing commits
fast_template_app:
extends:
- .build_template_app_template
- .rules:build
- .rules:build:target_test
stage: pre_check
tags: [fast_run, shiny]
variables:
BUILD_COMMAND_ARGS: "-p"
#------------------------------------------------------------------------------
# This job builds template app with permutations of targets and optimization levels
build_template_app:
#######################
# gnu_static_analyzer #
#######################
gcc_static_analyzer:
extends:
- .build_template_app_template
- .rules:build
stage: host_test
needs:
- job: fast_template_app
artifacts: false
- .rules:build:target_test
stage: pre_check
tags: [build, shiny]
variables:
CI_CCACHE_DISABLE: 1
ANALYZING_APP: "examples/get-started/hello_world"
script:
- echo "CONFIG_COMPILER_STATIC_ANALYZER=y" >> ${ANALYZING_APP}/sdkconfig.defaults
- python -m idf_build_apps build -v -p ${ANALYZING_APP} -t all
########################################
# Clang Build Apps Without Tests Cases #
########################################
.build_cmake_clang_template:
build_clang_test_apps_esp32:
extends:
- .build_template
- .build_cmake_clang_template
- .rules:build
needs:
- job: fast_template_app
artifacts: false
- pipeline_variables
artifacts:
paths:
# The other artifacts patterns are defined under .idf_ci.toml
# Now we're uploading/downloading the binary files from our internal storage server
#
# keep the log file to help debug
- "**/build*/build_log.txt"
# keep the size info to help track the binary size
- size_info.txt
- "**/build*/size*.json"
expire_in: 1 week
when: always
variables:
IDF_TOOLCHAIN: clang
TEST_BUILD_OPTS_EXTRA: ""
script:
# CI specific options start from "--parallel-count xxx". could ignore when running locally
- run_cmd idf-build-apps build
-p tools/test_apps/system/clang_build_test
-t $IDF_TARGET
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--modified-components ${MR_MODIFIED_COMPONENTS}
--modified-files ${MR_MODIFIED_FILES}
$TEST_BUILD_OPTS_EXTRA
IDF_TARGET: esp32
build_clang_test_apps_xtensa:
extends: .build_cmake_clang_template
parallel:
matrix:
- IDF_TARGET: [esp32, esp32s2, esp32s3]
build_clang_test_apps_esp32s2:
extends:
- .build_cmake_clang_template
- .rules:build
variables:
IDF_TARGET: esp32s2
build_clang_test_apps_riscv:
extends: .build_cmake_clang_template
build_clang_test_apps_esp32s3:
extends:
- .build_cmake_clang_template
- .rules:build
variables:
IDF_TARGET: esp32s3
.build_clang_test_apps_riscv:
extends:
- .build_cmake_clang_template
variables:
# https://reviews.llvm.org/D90108.
# GNU 'as' lets .weak override .globl since binutils-gdb
@@ -106,9 +144,134 @@ build_clang_test_apps_riscv:
# while MC lets the last directive win (PR38921).
# For RISCV chips we use integrated assembler by default, so suppress this warning to pass CI pipeline.
TEST_BUILD_OPTS_EXTRA: "--ignore-warning-str 'changed binding to STB_WEAK'"
parallel:
matrix:
- IDF_TARGET: [esp32c3, esp32c2, esp32c6, esp32c5, esp32h2, esp32p4]
build_clang_test_apps_esp32c3:
extends:
- .build_clang_test_apps_riscv
- .rules:build
variables:
IDF_TARGET: esp32c3
build_clang_test_apps_esp32c2:
extends:
- .build_clang_test_apps_riscv
- .rules:build
variables:
IDF_TARGET: esp32c2
build_clang_test_apps_esp32c6:
extends:
- .build_clang_test_apps_riscv
- .rules:build
variables:
IDF_TARGET: esp32c6
build_clang_test_apps_esp32c5:
extends:
- .build_clang_test_apps_riscv
- .rules:build
variables:
IDF_TARGET: esp32c5
build_clang_test_apps_esp32h2:
extends:
- .build_clang_test_apps_riscv
- .rules:build
variables:
IDF_TARGET: esp32h2
build_clang_test_apps_esp32p4:
extends:
- .build_clang_test_apps_riscv
- .rules:build
variables:
IDF_TARGET: esp32p4
######################
# Build System Tests #
######################
.test_build_system_template:
stage: host_test
extends:
- .build_template
- .rules:build:check
dependencies: # set dependencies to null to avoid missing artifacts issue
needs:
- job: fast_template_app
artifacts: false
optional: true
artifacts:
reports:
junit: XUNIT_RESULT.xml
paths:
- XUNIT_RESULT.xml
- test_build_system
expire_in: 1 week
when: always
script:
- ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
- cd ${IDF_PATH}/tools/test_build_system
- python ${IDF_PATH}/tools/ci/get_known_failure_cases_file.py
- pytest
--cleanup-idf-copy
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--work-dir ${CI_PROJECT_DIR}/test_build_system
--junitxml ${CI_PROJECT_DIR}/XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
pytest_build_system:
extends: .test_build_system_template
parallel: 3
pytest_build_system_macos:
extends:
- .test_build_system_template
- .before_script:build:macos
- .after_script:build:macos:upload-failed-job-logs:ccache-show-stats
- .rules:build:macos
tags:
- macos_shell
parallel: 3
variables:
PYENV_VERSION: "3.8"
# CCACHE_DIR: "/cache/idf_ccache". On macOS, you cannot write to this folder due to insufficient permissions.
CCACHE_DIR: "" # ccache will use "$HOME/Library/Caches/ccache".
CCACHE_MAXSIZE: "5G" # To preserve the limited Macbook storage. CCACHE automatically prunes old caches to fit the set limit.
build_docker:
extends:
- .before_script:minimal
- .rules:build:docker
stage: host_test
needs: []
image: espressif/docker-builder:1
tags:
- build_docker_amd64_brno
variables:
DOCKER_TMP_IMAGE_NAME: "idf_tmp_image"
script:
- export LOCAL_CI_REPOSITORY_URL=$CI_REPOSITORY_URL
- if [ -n "$LOCAL_GITLAB_HTTPS_HOST" ]; then export LOCAL_CI_REPOSITORY_URL="https://gitlab-ci-token:${CI_JOB_TOKEN}@${LOCAL_GITLAB_HTTPS_HOST}/${CI_PROJECT_PATH}"; fi
- if [ -n "$LOCAL_GIT_MIRROR" ]; then export LOCAL_CI_REPOSITORY_URL="${LOCAL_GIT_MIRROR}/${CI_PROJECT_PATH}"; fi
- echo "Using repository at $LOCAL_CI_REPOSITORY_URL"
- export DOCKER_BUILD_ARGS="--build-arg IDF_CLONE_URL=${LOCAL_CI_REPOSITORY_URL} --build-arg IDF_CLONE_BRANCH_OR_TAG=${CI_COMMIT_REF_NAME} --build-arg IDF_CHECKOUT_REF=${CI_COMMIT_TAG:-$PIPELINE_COMMIT_SHA}"
# Build
- docker build --tag ${DOCKER_TMP_IMAGE_NAME} ${DOCKER_BUILD_ARGS} tools/docker/
# We can't mount $PWD/examples/get-started/blink into the container, see https://gitlab.com/gitlab-org/gitlab-ce/issues/41227.
# The workaround mentioned there works, but leaves around directories which need to be cleaned up manually.
# Therefore, build a copy of the example located inside the container.
- docker run --rm --workdir /opt/esp/idf/examples/get-started/blink ${DOCKER_TMP_IMAGE_NAME} idf.py build
# This job builds template app with permutations of targets and optimization levels
build_template_app:
extends:
- .build_template_app_template
- .rules:build
stage: host_test
dependencies: # set dependencies to null to avoid missing artifacts issue
needs:
- job: fast_template_app
artifacts: false
####################
# Dynamic Pipeline #
@@ -129,12 +292,12 @@ generate_build_child_pipeline:
- non_test_related_apps.txt
expire_in: 1 week
when: always
variables:
PYTEST_IGNORE_COLLECT_IMPORT_ERROR: "1"
script:
- run_cmd idf-ci --debug gitlab build-child-pipeline
-p components
-p examples
-p tools/test_apps
--modified-files $MR_MODIFIED_FILES
# requires basic pytest dependencies
- run_cmd bash install.sh --enable-pytest
- run_cmd python tools/ci/dynamic_pipelines/scripts/generate_build_child_pipeline.py
build_child_pipeline:
stage: build
@@ -145,9 +308,12 @@ build_child_pipeline:
- pipeline_variables
- generate_build_child_pipeline
variables:
IS_MR_PIPELINE: $IS_MR_PIPELINE
MR_MODIFIED_COMPONENTS: $MR_MODIFIED_COMPONENTS
MR_MODIFIED_FILES: $MR_MODIFIED_FILES
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
BUILD_AND_TEST_ALL_APPS: $BUILD_AND_TEST_ALL_APPS
REPORT_EXIT_CODE: $REPORT_EXIT_CODE
# https://gitlab.com/gitlab-org/gitlab/-/issues/214340
inherit:
variables: false
@@ -156,22 +322,3 @@ build_child_pipeline:
- artifact: build_child_pipeline.yml
job: generate_build_child_pipeline
strategy: depend
generate_disabled_apps_report:
extends:
- .build_template
tags: [fast_run, shiny]
dependencies: # set dependencies to null to avoid missing artifacts issue
needs:
- pipeline_variables
- job: baseline_manifest_sha
optional: true
artifacts:
paths:
- disabled_report.html
expire_in: 1 week
when: always
script:
- pip install dominate idf-build-apps
- run_cmd python tools/ci/gen_disabled_report.py --output disabled_report.html --verbose --enable-preview-targets
- echo "Report generated at https://${CI_PAGES_HOSTNAME}:${CI_SERVER_PORT}/-/esp-idf/-/jobs/${CI_JOB_ID}/artifacts/disabled_report.html"

View File

@@ -12,6 +12,7 @@ stages:
- test_deploy
- deploy
- post_deploy
- retry_failed_jobs
variables:
# System environment
@@ -29,14 +30,17 @@ variables:
# - set GIT_STRATEGY: "clone" to shiny runners
# - set GIT_STRATEGY: "fetch" to brew runners
GIT_STRATEGY: clone
GIT_DEPTH: 1
GIT_SUBMODULE_STRATEGY: none # here we use cache for submodules, so we don't need to fetch them every time
# we will download archive for each submodule instead of clone.
# we don't do "recursive" when fetch submodule as they're not used in CI now.
GIT_SUBMODULE_STRATEGY: none
# since we're using merged-result pipelines, the last commit should work for most cases
GIT_DEPTH: 1
# --no-recurse-submodules: we use cache for submodules
# --prune --prune-tags: in case remote branch or tag is force pushed
GIT_FETCH_EXTRA_FLAGS: "--no-recurse-submodules --prune --prune-tags"
# we're using .cache folder for caches
GIT_CLEAN_FLAGS: -ffdx -e .cache/
LATEST_GIT_TAG: v6.1-dev
LATEST_GIT_TAG: v5.4.2
SUBMODULE_FETCH_TOOL: "tools/ci/ci_fetch_submodule.py"
# by default we will fetch all submodules
@@ -51,10 +55,11 @@ variables:
CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py"
# Docker images
ESP_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/esp-env-v6.1:1"
ESP_IDF_DOC_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/esp-idf-doc-env-v6.1:1-1"
TARGET_TEST_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/target-test-env-v6.1:1"
ESP_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/esp-env-v5.4:2"
ESP_IDF_DOC_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/esp-idf-doc-env-v5.4:2-1"
TARGET_TEST_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/target-test-env-v5.4:2"
SONARQUBE_SCANNER_IMAGE: "${CI_DOCKER_REGISTRY}/sonarqube-scanner:5"
PRE_COMMIT_IMAGE: "${CI_DOCKER_REGISTRY}/esp-idf-pre-commit:1"
# cache python dependencies
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
@@ -65,7 +70,7 @@ variables:
CI_PYTHON_CONSTRAINT_BRANCH: ""
# Update the filename for a specific ESP-IDF release. It is used only with CI_PYTHON_CONSTRAINT_BRANCH.
CI_PYTHON_CONSTRAINT_FILE: "espidf.constraints.v6.1.txt"
CI_PYTHON_CONSTRAINT_FILE: "espidf.constraints.v5.4.txt"
# Set this variable to repository name of a Python tool you wish to install and test in the context of ESP-IDF CI.
# Keep the variable empty when not used.
@@ -83,7 +88,7 @@ variables:
CI_CLANG_DISTRO_URL: ""
# Set this variable to specify the file name for the known failure cases.
KNOWN_FAILURE_CASES_FILE_NAME: "master.txt"
KNOWN_FAILURE_CASES_FILE_NAME: "5.4.txt"
IDF_CI_BUILD: 1
@@ -96,7 +101,6 @@ variables:
CCACHE_MAXSIZE: "50G"
FF_USE_NEW_BASH_EVAL_STRATEGY: "true"
FORCE_COLOR: "1" # rich print with color
################################################
# `before_script` and `after_script` Templates #
@@ -119,7 +123,7 @@ variables:
source tools/ci/configure_ci_environment.sh
# add extra python packages
export PYTHONPATH="$IDF_PATH/tools:$IDF_PATH/tools/ci:$IDF_PATH/tools/esp_app_trace:$IDF_PATH/components/partition_table:$IDF_PATH/tools/ci/python_packages:$PYTHONPATH"
export PYTHONPATH="$IDF_PATH/tools:$IDF_PATH/tools/esp_app_trace:$IDF_PATH/components/partition_table:$IDF_PATH/tools/ci/python_packages:$PYTHONPATH"
.setup_tools_and_idf_python_venv: &setup_tools_and_idf_python_venv |
# must use after setup_tools_except_target_test
@@ -127,7 +131,7 @@ variables:
# download constraint file for dev
if [[ -n "$CI_PYTHON_CONSTRAINT_BRANCH" ]]; then
wget -O /tmp/constraint.txt --header="Authorization:Bearer ${ESPCI_TOKEN}" "${GITLAB_HTTP_SERVER}/api/v4/projects/2581/repository/files/${CI_PYTHON_CONSTRAINT_FILE}/raw?ref=${CI_PYTHON_CONSTRAINT_BRANCH}"
wget -O /tmp/constraint.txt --header="Authorization:Bearer ${ESPCI_TOKEN}" ${GITLAB_HTTP_SERVER}/api/v4/projects/2581/repository/files/${CI_PYTHON_CONSTRAINT_FILE}/raw?ref=${CI_PYTHON_CONSTRAINT_BRANCH}
mkdir -p ~/.espressif
mv /tmp/constraint.txt ~/.espressif/${CI_PYTHON_CONSTRAINT_FILE}
fi
@@ -136,64 +140,46 @@ variables:
if [[ -n "$IDF_DONT_USE_MIRRORS" ]]; then
export IDF_MIRROR_PREFIX_MAP=
fi
# Optimize pip install
if echo "${CI_RUNNER_TAGS}" | grep "shiny"; then
export PIP_INDEX_URL="${PIP_INDEX_URL_SHINY}"
fi
if [[ "$(uname -m)" == "x86_64" ]] || [[ "$(uname -m)" == "aarch64" ]]; then
export IDF_PIP_WHEELS_URL=""
fi
# install.sh
if [[ "${CI_JOB_STAGE}" != "target_test" ]]; then
section_start "running_install_sh" "Running install.sh"
if [[ "${CI_JOB_STAGE}" == "build_doc" ]]; then
run_cmd bash install.sh --enable-ci --enable-docs
else
elif [[ "${CI_JOB_STAGE}" == "build" ]]; then
run_cmd bash install.sh --enable-ci
else
if ! echo "${CI_JOB_NAME}" | egrep ".*pytest.*"; then
run_cmd bash install.sh --enable-ci
else
run_cmd bash install.sh --enable-ci --enable-pytest --enable-test-specific
fi
fi
section_end "running_install_sh"
else
section_start "install_python_env" "Install Python environment, skip required tools check"
run_cmd python tools/idf_tools.py install-python-env --features ci,test-specific
export IDF_SKIP_TOOLS_CHECK=1
section_start "install_python_env" "Install Python environment"
run_cmd python tools/idf_tools.py install-python-env --features ci,pytest,test-specific
section_end "install_python_env"
fi
section_start "source_export" "Source export.sh"
source ./export.sh
section_end "source_export"
# Eager upgrade of CI dependencies
# Done after sourcing export.sh so that we could easily invoke the right pip
section_start "upgrade_ci_dependencies" "Upgrading CI dependencies"
pip install --upgrade --upgrade-strategy=eager -r $IDF_PATH/tools/requirements/requirements.ci.txt -c ~/.espressif/${CI_PYTHON_CONSTRAINT_FILE}
if [[ "${CI_JOB_STAGE}" == "target_test" ]]; then
pip install --upgrade --upgrade-strategy=eager -r $IDF_PATH/tools/requirements/requirements.test-specific.txt -c ~/.espressif/${CI_PYTHON_CONSTRAINT_FILE}
fi
section_end "upgrade_ci_dependencies"
REEXPORT_NEEDED=0
if [[ ! -z "$INSTALL_EXTRA_TOOLS" ]]; then
section_start "installing_optional_tools" "Install optional tools ${INSTALL_EXTRA_TOOLS}"
run_cmd $IDF_PATH/tools/idf_tools.py --non-interactive install $INSTALL_EXTRA_TOOLS
$IDF_PATH/tools/idf_tools.py --non-interactive install $INSTALL_EXTRA_TOOLS
section_end "installing_optional_tools"
REEXPORT_NEEDED=1
fi
# Install esp-clang if necessary (esp-clang is separately installed)
if [[ "$IDF_TOOLCHAIN" == "clang" && -z "$CI_CLANG_DISTRO_URL" ]]; then
$IDF_PATH/tools/idf_tools.py --non-interactive install esp-clang
REEXPORT_NEEDED=1
fi
if [[ $REEXPORT_NEEDED -eq 1 ]]; then
section_start "re_source_export" "Re-source export.sh"
source ./export.sh
section_end "re_source_export"
if [[ "${CI_JOB_STAGE}" == "target_test" ]]; then
section_start "IDF_SKIP_TOOLS_CHECK" "Skip required tools check"
export IDF_SKIP_TOOLS_CHECK=1
section_end "IDF_SKIP_TOOLS_CHECK"
fi
section_start "source_export" "Source export.sh"
source ./export.sh
section_end "source_export"
# Custom clang toolchain
if [[ "$IDF_TOOLCHAIN" == "clang" && ! -z "$CI_CLANG_DISTRO_URL" ]]; then
@@ -232,19 +218,43 @@ variables:
.show_ccache_statistics: &show_ccache_statistics |
# Show ccache statistics if enabled globally
section_start "ccache_show_stats" "Show ccache statistics"
test "$CI_CCACHE_STATS" == 1 && test -n "$(which ccache)" && ccache --show-stats -vv || true
section_end "ccache_show_stats"
.upload_failed_job_log_artifacts: &upload_failed_job_log_artifacts |
if [ $CI_JOB_STATUS = "failed" ]; then
run_cmd idf-ci gitlab upload-artifacts --type log
python tools/ci/artifacts_handler.py upload --type logs
fi
.before_script:minimal:
before_script:
- *common-before_scripts
.before_script:build:macos:
before_script:
# macos is running shell executor, which means it would use
# the system installed /usr/local/bin/python3 by default.
# Ensure pyenv and PYENV_VERSION installed
- eval "$(pyenv init -)"
- *common-before_scripts
# On macOS, these tools need to be installed
- export IDF_TOOLS_PATH="${HOME}/.espressif_runner_${CI_RUNNER_ID}_${CI_CONCURRENT_ID}"
# remove idf-env.json, since it may contains enabled "features"
- rm -f $IDF_TOOLS_PATH/idf-env.json
# This adds tools (compilers) and the version-specific Python environment to PATH
- *setup_tools_and_idf_python_venv
- fetch_submodules
variables:
INSTALL_EXTRA_TOOLS: cmake ninja
.after_script:build:macos:upload-failed-job-logs:ccache-show-stats:
after_script:
# macos is running shell executor, which means it would use
# the system installed /usr/local/bin/python3 by default.
# Ensure pyenv and PYENV_VERSION installed
- eval "$(pyenv init -)"
- *upload_failed_job_log_artifacts
- *show_ccache_statistics
.before_script:build:
before_script:
- *common-before_scripts
@@ -254,9 +264,12 @@ variables:
- export EXTRA_CFLAGS=${PEDANTIC_CFLAGS}
- export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS}
.after_script:build:
.after_script:build:ccache-show-stats:
after_script:
- *show_ccache_statistics
.after_script:build:ccache-show-stats:upload-failed-job-logs:
after_script:
- source tools/ci/utils.sh
- *show_ccache_statistics
- *upload_failed_job_log_artifacts
@@ -296,7 +309,7 @@ variables:
.git_checkout_ci_commit_sha: &git_checkout_ci_commit_sha |
git checkout $CI_COMMIT_SHA
eval "git clean ${GIT_CLEAN_FLAGS}"
git clean ${GIT_CLEAN_FLAGS}
# git diff requires two commits, with different CI env var
#
@@ -314,33 +327,26 @@ variables:
- *git_init
- *git_fetch_from_mirror_url_if_exists
- |
# Store the diff output in a temporary file
TEMP_FILE=$(mktemp)
# merged results pipelines, by default
if [[ -n $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA ]]; then
git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_SHA
git fetch origin $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA
git diff --name-only $CI_MERGE_REQUEST_TARGET_BRANCH_SHA...$CI_MERGE_REQUEST_SOURCE_BRANCH_SHA > "$TEMP_FILE"
GIT_DIFF_OUTPUT=$(cat "$TEMP_FILE")
git fetch origin $CI_MERGE_REQUEST_DIFF_BASE_SHA --depth=1 ${GIT_FETCH_EXTRA_FLAGS}
git fetch origin $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA --depth=1 ${GIT_FETCH_EXTRA_FLAGS}
export GIT_DIFF_OUTPUT=$(git diff --name-only $CI_MERGE_REQUEST_DIFF_BASE_SHA $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA)
git fetch origin $CI_COMMIT_SHA --depth=1 ${GIT_FETCH_EXTRA_FLAGS}
# merge request pipelines, when the mr got conflicts
elif [[ -n $CI_MERGE_REQUEST_DIFF_BASE_SHA ]]; then
git fetch origin $CI_MERGE_REQUEST_DIFF_BASE_SHA --depth=1 ${GIT_FETCH_EXTRA_FLAGS}
git fetch origin $CI_COMMIT_SHA --depth=1 ${GIT_FETCH_EXTRA_FLAGS}
git diff --name-only $CI_MERGE_REQUEST_DIFF_BASE_SHA $CI_COMMIT_SHA > "$TEMP_FILE"
GIT_DIFF_OUTPUT=$(cat "$TEMP_FILE")
export GIT_DIFF_OUTPUT=$(git diff --name-only $CI_MERGE_REQUEST_DIFF_BASE_SHA $CI_COMMIT_SHA)
# other pipelines, like the protected branches pipelines
elif [[ "$CI_COMMIT_BEFORE_SHA" != "0000000000000000000000000000000000000000" ]]; then
git fetch origin $CI_COMMIT_BEFORE_SHA --depth=1 ${GIT_FETCH_EXTRA_FLAGS}
git fetch origin $CI_COMMIT_SHA --depth=1 ${GIT_FETCH_EXTRA_FLAGS}
git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA > "$TEMP_FILE"
GIT_DIFF_OUTPUT=$(cat "$TEMP_FILE")
export GIT_DIFF_OUTPUT=$(git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA)
else
# pipeline source could be web, scheduler, etc.
git fetch origin $CI_COMMIT_SHA --depth=2 ${GIT_FETCH_EXTRA_FLAGS}
git diff --name-only $CI_COMMIT_SHA~1 $CI_COMMIT_SHA > "$TEMP_FILE"
GIT_DIFF_OUTPUT=$(cat "$TEMP_FILE")
export GIT_DIFF_OUTPUT=$(git diff --name-only $CI_COMMIT_SHA~1 $CI_COMMIT_SHA)
fi
- *git_checkout_ci_commit_sha
- *common-before_scripts
@@ -355,48 +361,13 @@ variables:
before_script:
- *git_init
- *git_fetch_from_mirror_url_if_exists
- eval "git fetch --depth=1 ${GIT_FETCH_EXTRA_FLAGS} origin ${CI_COMMIT_SHA}"
- git fetch origin "${CI_COMMIT_SHA}" --depth=1 ${GIT_FETCH_EXTRA_FLAGS}
- *git_checkout_ci_commit_sha
- *common-before_scripts
- *setup_tools_and_idf_python_venv
- add_gitlab_ssh_keys
# no submodules
.brew-macos-settings:
variables:
GIT_STRATEGY: none # we do manual git clone to use local mirror
IDF_CCACHE_ENABLE: "0"
CCACHE_DIR: "/var/tmp/cache/idf_ccache"
tags:
- macos-tart
image: macos-sequoia-idf-v6.1
cache: [] # pip cache is created under amd64, and submodules are downloaded with brew mirror, so disable cache here
before_script:
# assert LOCAL_GIT_MIRROR is set
- echo -e "section_start:`date +%s`:check_out\r\e[0Kchecking out from local git mirror, then reset to CI_COMMIT_SHA"
- |
if [ -z "${LOCAL_GIT_MIRROR:-}" ]; then
echo "Error: LOCAL_GIT_MIRROR not set, cannot clone from mirror."
exit 1
fi
- MIRROR_REPO_URL="${LOCAL_GIT_MIRROR}/${CI_PROJECT_PATH}"
- cd "${CI_PROJECT_DIR}"
# since .cache exists in CI_PROJECT_DIR, so can't direct `git clone .`
- git clone -b ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-${CI_COMMIT_BRANCH}} --depth=1 --recursive --shallow-submodules "${MIRROR_REPO_URL}" tmp
- mv tmp/.git ./
- rm -rf tmp
- git reset --hard
# set remote url back
- git remote set-url origin "${CI_REPOSITORY_URL}"
- eval "git fetch --depth=1 ${GIT_FETCH_EXTRA_FLAGS} origin ${CI_COMMIT_SHA}"
- git checkout FETCH_HEAD
- git submodule update --init --recursive --depth=1
- echo -e "section_end:`date +%s`:check_out\r\e[0K"
- *common-before_scripts
- *setup_tools_and_idf_python_venv
after_script: [] # ccache now is disabled for macos brew runners
timeout: 30m
#############
# `default` #
#############

View File

@@ -2,17 +2,16 @@
# - extra_default_build_targets:
# besides of the SUPPORTED_TARGETS in IDF,
# enable build for the specified targets by default as well.
# !!! DEPRECATED: use `additional_build_targets` in .idf_build_apps.toml instead
#
# - bypass_check_test_targets:
# suppress the check_build_test_rules check-test-script warnings for the specified targets
#
# This file should ONLY be used during bringup. Should be reset to empty after the bringup process
extra_default_build_targets:
bypass_check_test_targets:
- esp32h21
- esp32h4
- esp32c5
- esp32c61
#
# These lines would

View File

@@ -1,3 +1,19 @@
.all_targets: &all_targets
- esp32
- esp32s2
- esp32s3
- esp32c3
- esp32c2
- esp32c6
- esp32c5
- esp32h2
- esp32p4
.target_test: &target_test
- example_test
- custom_test
- component_ut
##############
# Build Jobs #
##############
@@ -9,6 +25,7 @@
- build_system
- downloadable-tools
included_in:
- build:target_test
- build:check
# -------------------
@@ -26,13 +43,13 @@
"build:macos":
labels:
# - build
- build
- macos
- macos_test # for backward compatibility
# patterns:
# - build_system
# - build_macos
# - downloadable-tools
patterns:
- build_system
- build_macos
- downloadable-tools
# ---------------------------
# Add patterns to build rules
@@ -40,6 +57,8 @@
"patterns:template-app":
patterns:
- build_template-app
included_in:
- build:target_test
"patterns:build-check":
patterns:
@@ -71,9 +90,3 @@
- windows
specific_rules:
- if-schedule-test-build-system-windows
patterns:
- build_system_win
"labels:buildv2":
labels:
- buildv2

View File

@@ -3,27 +3,7 @@
image: $ESP_ENV_IMAGE
tags: [ deploy ]
.metrics_template:
stage: deploy
tags: [ fast_run, shiny ]
image: python:3.13-slim
dependencies: []
needs: []
variables:
PIP_CACHE_DIR: ".cache/pip"
# Metrics - related env vars
ESP_METRICS_PROJECT_URL: "$CI_PROJECT_URL"
ESP_METRICS_PROJECT_ID: "$CI_PROJECT_ID"
ESP_METRICS_COMMIT_SHA: "$PIPELINE_COMMIT_SHA"
ESP_METRICS_BRANCH_NAME: "$CI_COMMIT_REF_NAME"
cache:
key: metrics-pip
paths:
- .cache/pip
before_script:
- echo "Installing esp-metrics-cli tool"
- pip install "esp-metrics-cli>=0.3,<1"
# Check this before push_to_github
check_submodule_sync:
extends:
- .deploy_job_template
@@ -32,13 +12,13 @@ check_submodule_sync:
tags: [ brew, github_sync ]
retry: 2
variables:
GIT_STRATEGY: fetch # use brew local mirror first
# for brew runners, we always set GIT_STRATEGY to fetch
GIT_STRATEGY: fetch
SUBMODULES_TO_FETCH: "none"
PUBLIC_IDF_URL: "https://github.com/espressif/esp-idf.git"
dependencies: []
script:
- git submodule deinit --force .
- rm -rf .git/modules # remove all the cached metadata
# setting the default remote URL to the public one, to resolve relative location URLs
- git config remote.origin.url ${PUBLIC_IDF_URL}
# check if all submodules are correctly synced to public repository
@@ -51,65 +31,31 @@ push_to_github:
extends:
- .deploy_job_template
- .before_script:minimal
- .rules:protected:deploy
- .rules:push_to_github
needs:
# submodule must be synced before pushing to github
- check_submodule_sync
tags: [ brew, github_sync ]
variables:
GIT_STRATEGY: fetch # use brew local mirror first
GIT_DEPTH: 0 # github needs full record of commits
# for brew runners, we always set GIT_STRATEGY to fetch
GIT_STRATEGY: fetch
# github also need full record of commits
GIT_DEPTH: 0
script:
- add_github_ssh_keys
- git remote remove github &>/dev/null || true
- git remote add github git@github.com:espressif/esp-idf.git
- tools/ci/push_to_github.sh
environment:
name: push_to_github_production
deployment_tier: production
url: "https://github.com/espressif/esp-idf"
deploy_update_SHA_in_esp-dockerfiles:
extends:
- .deploy_job_template
- .before_script:minimal
- .rules:protected:deploy
- .rules:protected-no_label-always
dependencies: []
variables:
GIT_DEPTH: 2
tags: [build, shiny]
tags: [ shiny, build ]
script:
- 'curl --header "PRIVATE-TOKEN: ${ESPCI_SCRIPTS_TOKEN}" -o create_MR_in_esp_dockerfile.sh $GITLAB_HTTP_SERVER/api/v4/projects/1260/repository/files/create_MR_in_esp_dockerfile%2Fcreate_MR_in_esp_dockerfile.sh/raw\?ref\=master'
- chmod +x create_MR_in_esp_dockerfile.sh
- ./create_MR_in_esp_dockerfile.sh
environment:
name: deploy_update_SHA_in_esp-dockerfiles_production
deployment_tier: production
upload_junit_report:
extends:
- .deploy_job_template
tags: [ fast_run, shiny ]
needs:
- pipeline_variables
- job: build_child_pipeline
artifacts: false
script:
- run_cmd idf-ci gitlab download-artifacts --type junit
rules:
- when: always
artifacts:
reports:
junit: XUNIT_RESULT_*.xml
expire_in: 1 week
when: always
target-examples-count-metrics:
extends:
- .metrics_template
allow_failure: true
script:
- echo "Generating ESP-IDF examples count metrics"
- cd tools/ci/metrics/examples_count
- python3 generate_metrics.py
- esp-metrics-cli upload -d schema.yaml -i metrics.json

View File

@@ -4,11 +4,11 @@
- "**/*.rst"
- "CONTRIBUTING.rst"
- "**/soc_caps.h"
- "**/Kconfig*"
.patterns-docs-partial: &patterns-docs-partial
- "components/**/*.h"
- "components/**/CMakeLists.txt"
- "components/**/Kconfig*"
- "components/**/CMakeList.txt"
- "components/**/sdkconfig*"
- "tools/tools.json"
- "tools/idf_tools.py"
@@ -19,9 +19,12 @@
.patterns-docs-preview: &patterns-docs-preview
- "docs/**/*"
.if-protected-check: &if-protected-check
.if-protected: &if-protected
if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/ || $CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/)'
.if-protected-no_label: &if-protected-no_label
if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/ || $CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/) && $BOT_TRIGGER_WITH_LABEL == null'
.if-qa-test-tag: &if-qa-test-tag
if: '$CI_COMMIT_TAG =~ /^qa-test/'
@@ -38,7 +41,7 @@
rules:
- <<: *if-qa-test-tag
when: never
- <<: *if-protected-check
- <<: *if-protected
- <<: *if-label-build_docs
- <<: *if-label-docs_full
- <<: *if-dev-push
@@ -58,10 +61,10 @@
check_readme_links:
extends:
- .pre_check_template
tags: ["amd64", "brew"]
tags: ["build", "amd64", "internet"]
allow_failure: true
rules:
- <<: *if-protected-check
- <<: *if-protected
- <<: *if-dev-push
changes: *patterns-example-readme
script:
@@ -85,15 +88,13 @@ check_docs_lang_sync:
artifacts: false
optional: true
script:
- if [ -n "${BREATHE_ALT_INSTALL_URL_PY39}" ]; then
pip uninstall -y breathe && pip install -U ${BREATHE_ALT_INSTALL_URL_PY39};
fi
- if [ -n "${BREATHE_ALT_INSTALL_URL}" ]; then pip uninstall -y breathe && pip install -U ${BREATHE_ALT_INSTALL_URL}; fi
- cd docs
- build-docs -t $DOCTGT -bs $DOC_BUILDERS -l $DOCLANG build
parallel:
matrix:
- DOCLANG: ["en", "zh_CN"]
DOCTGT: ["esp32", "esp32s2", "esp32s3", "esp32c3", "esp32c2", "esp32c6", "esp32c61", "esp32c5", "esp32h2", "esp32h4", "esp32h21", "esp32p4"]
DOCTGT: ["esp32", "esp32s2", "esp32s3", "esp32c3", "esp32c2", "esp32c6", "esp32c61", "esp32c5","esp32h2", "esp32p4"]
check_docs_gh_links:
image: $ESP_IDF_DOC_ENV_IMAGE
@@ -143,16 +144,11 @@ build_docs_html_partial:
variables:
DOCS_BUILD_DIR: "${IDF_PATH}/docs/_build/"
PYTHONUNBUFFERED: 1
# ensure all tags are fetched, need to know the latest/stable tag for the docs
GIT_STRATEGY: clone
GIT_DEPTH: 0
stage: test_deploy
tags:
- brew
- amd64
- deploy
- shiny
script:
# ensure all tags are fetched, need to know the latest/stable tag for the docs
- git fetch --tags --prune
- add_doc_server_ssh_keys $DOCS_DEPLOY_PRIVATEKEY $DOCS_DEPLOY_SERVER $DOCS_DEPLOY_SERVER_USER
- export GIT_VER=$(git describe --always ${PIPELINE_COMMIT_SHA} --)
- deploy-docs
@@ -179,17 +175,14 @@ deploy_docs_preview:
DOCS_DEPLOY_SERVER_USER: "$DOCS_SERVER_USER"
DOCS_DEPLOY_PATH: "$DOCS_PATH"
DOCS_DEPLOY_URL_BASE: "https://$DOCS_PREVIEW_SERVER_URL/docs/esp-idf"
environment:
name: deploy_docs_preview
deployment_tier: staging
url: "https://$DOCS_PREVIEW_SERVER_URL/docs/esp-idf"
# stage: post_deploy
deploy_docs_production:
# The DOCS_PROD_* variables used by this job are "Protected" so these branches must all be marked "Protected" in Gitlab settings
extends:
- .deploy_docs_template
- .rules:protected:deploy
rules:
- <<: *if-protected-no_label
stage: post_deploy
dependencies: # set dependencies to null to avoid missing artifacts issue
needs: # ensure runs after push_to_github succeeded
@@ -204,15 +197,12 @@ deploy_docs_production:
DOCS_DEPLOY_PATH: "$DOCS_PROD_PATH"
DOCS_DEPLOY_URL_BASE: "https://docs.espressif.com/projects/esp-idf"
DEPLOY_STABLE: 1
environment:
name: deploy_docs_production
deployment_tier: production
url: "https://docs.espressif.com/projects/esp-idf"
check_doc_links:
extends:
- .build_docs_template
- .rules:protected:deploy
rules:
- <<: *if-protected-no_label
stage: post_deploy
needs:
- job: deploy_docs_production

View File

@@ -2,20 +2,18 @@
extends: .rules:test:host_test
stage: host_test
image: $ESP_ENV_IMAGE
tags: [build, shiny]
tags:
- host_test
dependencies: # set dependencies to null to avoid missing artifacts issue
# run host_test jobs immediately, only after upload cache
needs:
- pipeline_variables
- job: upload-pip-cache
optional: true
artifacts: false
- job: upload-submodules-cache
optional: true
artifacts: false
- job: fast_template_app
optional: true
artifacts: false
- pipeline_variables
artifacts:
expire_in: 1 week
when: always
@@ -35,8 +33,6 @@ check_public_headers:
- IDF_TARGET=esp32h2 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32p4 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32c61 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32h21 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32h4 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
test_nvs_coverage:
extends:
@@ -55,14 +51,14 @@ test_partition_table_on_host:
extends: .host_test_template
script:
- cd components/partition_table/test_gen_esp32part_host
- pytest_for_ut ./gen_esp32part_tests.py
- ./gen_esp32part_tests.py
test_ldgen_on_host:
extends: .host_test_template
script:
- cd tools/ldgen/test
- export PYTHONPATH=$PYTHONPATH:..
- pytest_for_ut .
- python -m unittest
variables:
LC_ALL: C.UTF-8
@@ -70,19 +66,33 @@ test_spiffs_on_host:
extends: .host_test_template
script:
- cd components/spiffs/test_spiffsgen/
- pytest_for_ut ./test_spiffsgen.py
- ./test_spiffsgen.py
test_fatfsgen_on_host:
extends: .host_test_template
script:
- cd components/fatfs/test_fatfsgen/
- pytest_for_ut ./test_fatfsgen.py ./test_wl_fatfsgen.py ./test_fatfsparse.py
- ./test_fatfsgen.py
- ./test_wl_fatfsgen.py
- ./test_fatfsparse.py
test_multi_heap_on_host:
extends: .host_test_template
script:
- cd components/heap/test_multi_heap_host
- ./test_all_configs.sh
test_certificate_bundle_on_host:
extends: .host_test_template
script:
- cd components/mbedtls/esp_crt_bundle/test_gen_crt_bundle/
- pytest_for_ut ./test_gen_crt_bundle.py
- ./test_gen_crt_bundle.py
test_gdbstub_on_host:
extends: .host_test_template
script:
- cd components/esp_gdbstub/test_gdbstub_host
- make test
# Test for create virtualenv. It must be invoked from Python, not from virtualenv.
# Use docker image system python without any extra dependencies
@@ -101,21 +111,18 @@ test_cli_installer:
script:
# Tools must be downloaded for testing
# We could use "idf_tools.py download all", but we don't want to install clang because of its huge size
# cmake@version that is supported
- python3 ${IDF_PATH}/tools/idf_tools.py download required qemu-riscv32 qemu-xtensa cmake cmake@3.22.1
- python3 ${IDF_PATH}/tools/idf_tools.py download required qemu-riscv32 qemu-xtensa cmake
- cd ${IDF_PATH}/tools/test_idf_tools
- python3 -m pip install jsonschema
# Testing with system python3, so don't use any third-party packages
- python3 ./test_idf_tools.py -v
- python3 ./test_idf_tools_python_env.py
# It runs at the end because it modifies dependencies
- IDF_TEST_MAY_BREAK_DEPENDENCIES=1 python3 ./test_idf_tools.py -v TestSystemDependencies.test_commands_when_nodeps
test_efuse_table_on_host:
.test_efuse_table_on_host_template:
extends: .host_test_template
parallel:
matrix:
- IDF_TARGET: [esp32, esp32s2, esp32c3, esp32s3, esp32c2, esp32c6, esp32h2, esp32p4, esp32c5, esp32c61]
variables:
IDF_TARGET: "esp32"
artifacts:
when: on_failure
paths:
@@ -125,7 +132,35 @@ test_efuse_table_on_host:
- ./efuse_table_gen.py -t "${IDF_TARGET}" ${IDF_PATH}/components/efuse/${IDF_TARGET}/esp_efuse_table.csv
- git diff --exit-code -- ${IDF_TARGET}/esp_efuse_table.c || { echo 'Differences found for ${IDF_TARGET} target. Please run idf.py efuse-common-table and commit the changes.'; exit 1; }
- cd ${IDF_PATH}/components/efuse/test_efuse_host
- pytest_for_ut ./efuse_tests.py
- ./efuse_tests.py
test_efuse_table_on_host_esp32:
extends: .test_efuse_table_on_host_template
test_efuse_table_on_host_esp32s2:
extends: .test_efuse_table_on_host_template
variables:
IDF_TARGET: esp32s2
test_efuse_table_on_host_esp32s3:
extends: .test_efuse_table_on_host_template
variables:
IDF_TARGET: esp32s3
test_efuse_table_on_host_esp32c3:
extends: .test_efuse_table_on_host_template
variables:
IDF_TARGET: esp32c3
test_efuse_table_on_host_esp32h2:
extends: .test_efuse_table_on_host_template
variables:
IDF_TARGET: esp32h2
test_efuse_table_on_host_esp32c6:
extends: .test_efuse_table_on_host_template
variables:
IDF_TARGET: esp32c6
test_logtrace_proc:
extends: .host_test_template
@@ -163,21 +198,16 @@ test_tools:
INSTALL_EXTRA_TOOLS: "qemu-xtensa qemu-riscv32" # for test_idf_qemu.py
script:
- stat=0
- run_cmd idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- cd ${IDF_PATH}/tools/ci/test_autocomplete
- run_cmd pytest --noconftest test_autocomplete.py --junitxml=${IDF_PATH}/XUNIT_AUTOCOMP.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} || stat=1
- pytest --noconftest test_autocomplete.py --junitxml=${IDF_PATH}/XUNIT_AUTOCOMP.xml || stat=1
- cd ${IDF_PATH}/tools/test_idf_py
- run_cmd pytest --noconftest test_idf_py.py --junitxml=${IDF_PATH}/XUNIT_IDF_PY.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} || stat=1
- run_cmd pytest --noconftest test_hints.py --junitxml=${IDF_PATH}/XUNIT_HINTS.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} || stat=1
- run_cmd pytest --noconftest test_idf_qemu.py --junitxml=${IDF_PATH}/XUNIT_IDF_PY_QEMU.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} || stat=1
- cd ${IDF_PATH}/tools/test_bsasm
- run_cmd pytest --noconftest test_bsasm.py --junitxml=${IDF_PATH}/XUNIT_BSASM.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} || stat=1
- pytest --noconftest test_idf_py.py --junitxml=${IDF_PATH}/XUNIT_IDF_PY.xml || stat=1
- pytest --noconftest test_hints.py --junitxml=${IDF_PATH}/XUNIT_HINTS.xml || stat=1
- pytest --noconftest test_idf_qemu.py --junitxml=${IDF_PATH}/XUNIT_IDF_PY_QEMU.xml || stat=1
- cd ${IDF_PATH}/tools/test_mkdfu
- run_cmd pytest --noconftest test_mkdfu.py --junitxml=${IDF_PATH}/XUNIT_MKDFU.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} || stat=1
- pytest --noconftest test_mkdfu.py --junitxml=${IDF_PATH}/XUNIT_MKDFU.xml || stat=1
- cd ${IDF_PATH}/tools/test_idf_size
- run_cmd pytest --noconftest test_idf_size.py --junitxml=${IDF_PATH}/XUNIT_IDF_SIZE.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} || stat=1
- cd ${IDF_PATH}/tools/test_idf_diag
- run_cmd pytest --noconftest test_idf_diag.py --junitxml=${IDF_PATH}/XUNIT_IDF_DIAG.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} || stat=1
- pytest --noconftest test_idf_size.py --junitxml=${IDF_PATH}/XUNIT_IDF_SIZE.xml || stat=1
- cd ${IDF_PATH}
- shellcheck -s sh tools/detect_python.sh || stat=1
- shellcheck -s bash tools/detect_python.sh || stat=1
@@ -192,7 +222,14 @@ test_split_path_by_spaces:
extends: .host_test_template
script:
- cd ${IDF_PATH}/tools
- pytest_for_ut ./split_paths_by_spaces.py
- python -m unittest split_paths_by_spaces.py
test_mqtt_on_host:
extends: .host_test_template
script:
- cd ${IDF_PATH}/components/mqtt/esp-mqtt/host_test
- idf.py build
- LSAN_OPTIONS=verbosity=1:log_threads=1 build/host_mqtt_client_test.elf
test_transport_on_host:
extends: .host_test_template
@@ -231,13 +268,122 @@ test_gen_soc_caps_kconfig:
extends: .host_test_template
script:
- cd ${IDF_PATH}/tools/gen_soc_caps_kconfig/
- pytest_for_ut ./test/test_gen_soc_caps_kconfig.py
- ./test/test_gen_soc_caps_kconfig.py
test_pytest_qemu:
extends:
- .host_test_template
- .before_script:build
artifacts:
paths:
- XUNIT_RESULT.xml
- pytest-embedded/
- "**/build*/*.bin"
reports:
junit: XUNIT_RESULT.xml
parallel:
matrix:
- IDF_TARGET: "esp32"
INSTALL_EXTRA_TOOLS: "qemu-xtensa"
- IDF_TARGET: "esp32c3"
INSTALL_EXTRA_TOOLS: "qemu-riscv32"
script:
- run_cmd python tools/ci/ci_build_apps.py . -v
--target $IDF_TARGET
--pytest-apps
-m qemu
--collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt"
--modified-components ${MR_MODIFIED_COMPONENTS}
--modified-files ${MR_MODIFIED_FILES}
- python tools/ci/get_known_failure_cases_file.py
- run_cmd pytest
--target $IDF_TARGET
--log-cli-level DEBUG
-m qemu
--embedded-services idf,qemu
--junitxml=XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
--app-info-filepattern \"list_job_*.txt\"
--qemu-extra-args \"-global driver=timer.$IDF_TARGET.timg,property=wdt_disable,value=true\"
test_pytest_linux:
extends:
- .host_test_template
- .before_script:build
artifacts:
paths:
- XUNIT_RESULT.xml
- pytest-embedded/
- "**/build*/build_log.txt"
reports:
junit: XUNIT_RESULT.xml
script:
- run_cmd python tools/ci/ci_build_apps.py components examples tools/test_apps -v
--target linux
--pytest-apps
-m host_test
--collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt"
--modified-components ${MR_MODIFIED_COMPONENTS}
--modified-files ${MR_MODIFIED_FILES}
- python tools/ci/get_known_failure_cases_file.py
- run_cmd pytest
--target linux
-m host_test
--embedded-services idf
--junitxml=XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
--app-info-filepattern \"list_job_*.txt\"
test_pytest_macos:
extends:
- .host_test_template
- .before_script:build:macos
tags:
- macos_shell
artifacts:
paths:
- XUNIT_RESULT.xml
- pytest-embedded/
- "**/build*/build_log.txt"
reports:
junit: XUNIT_RESULT.xml
variables:
PYTEST_IGNORE_COLLECT_IMPORT_ERROR: "1"
script:
- run_cmd python tools/ci/ci_build_apps.py components examples tools/test_apps -v
--target linux
--pytest-apps
-m \"host_test and macos_shell\"
--collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt"
--modified-components ${MR_MODIFIED_COMPONENTS}
--modified-files ${MR_MODIFIED_FILES}
- python tools/ci/get_known_failure_cases_file.py
- run_cmd pytest
--target linux
-m \"host_test and macos_shell\"
--junitxml=XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
--app-info-filepattern \"list_job_*.txt\"
test_idf_pytest_plugin:
extends:
- .host_test_template
- .rules:patterns:idf-pytest-plugin
variables:
SUBMODULES_TO_FETCH: "none"
artifacts:
reports:
junit: XUNIT_RESULT.xml
script:
- cd ${IDF_PATH}/tools/ci/dynamic_pipelines/tests/test_report_generator
- python -m unittest test_report_generator.py
- cd ${IDF_PATH}/tools/ci/idf_pytest
- pytest --junitxml=${CI_PROJECT_DIR}/XUNIT_RESULT.xml
test_idf_build_apps_load_soc_caps:
extends: .host_test_template
script:
- cd tools/ci
- pytest_for_ut ./test_soc_headers_load_in_idf_build_apps.py
- python tools/ci/check_soc_headers_load_in_idf_build_apps.py
test_nvs_gen_check:
extends: .host_test_template
@@ -251,7 +397,7 @@ test_nvs_gen_check:
LC_ALL: C.UTF-8
script:
- cd ${IDF_PATH}/components/nvs_flash/nvs_partition_tool
- pytest_for_ut test_nvs_gen_check.py
- pytest --noconftest test_nvs_gen_check.py --junitxml=XUNIT_RESULT.xml
test_esp_rom:
extends: .host_test_template
@@ -262,7 +408,7 @@ test_esp_rom:
junit: XUNIT_RESULT.xml
script:
- cd ${IDF_PATH}/components/esp_rom/
- pytest_for_ut test_esp_rom.py
- pytest --noconftest test_esp_rom.py --junitxml=XUNIT_RESULT.xml
make_sure_soc_caps_compatible_in_idf_build_apps:
extends:
@@ -281,224 +427,3 @@ make_sure_soc_caps_compatible_in_idf_build_apps:
- git checkout $CI_COMMIT_SHA -- tools/ci/idf_build_apps_dump_soc_caps.py
- python tools/ci/idf_build_apps_dump_soc_caps.py base.json
- diff new.json base.json
build_docker:
extends:
- .before_script:minimal
- .rules:build:docker
stage: host_test
needs: []
image: espressif/docker-builder:1
tags: [shiny, dind]
variables:
DOCKER_TMP_IMAGE_NAME: "idf_tmp_image"
script:
- export DOCKER_BUILD_ARGS="--build-arg IDF_CLONE_URL=${CI_REPOSITORY_URL} --build-arg IDF_CLONE_BRANCH_OR_TAG=${CI_COMMIT_REF_NAME} --build-arg IDF_CHECKOUT_REF=${CI_COMMIT_TAG:-$CI_COMMIT_SHA} --build-arg IDF_CLONE_SHALLOW=1 --build-arg IDF_GITHUB_ASSETS=${INTERNAL_GITHUB_ASSETS}"
- docker build --tag ${DOCKER_TMP_IMAGE_NAME} ${DOCKER_BUILD_ARGS} tools/docker/
# We can't mount $PWD/examples/get-started/blink into the container, see https://gitlab.com/gitlab-org/gitlab-ce/issues/41227.
# The workaround mentioned there works, but leaves around directories which need to be cleaned up manually.
# Therefore, build a copy of the example located inside the container.
- docker run --rm --workdir /opt/esp/idf/examples/get-started/blink ${DOCKER_TMP_IMAGE_NAME} idf.py build
############################
# Host test with test apps #
############################
test_pytest_qemu:
extends:
- .host_test_template
- .before_script:build
artifacts:
paths:
- XUNIT_RESULT.xml
- pytest-embedded/
- "**/build*/*.bin"
reports:
junit: XUNIT_RESULT.xml
parallel:
matrix:
- IDF_TARGET: "esp32"
INSTALL_EXTRA_TOOLS: "qemu-xtensa"
# Skip Clang + Xtensa tests due to bootloader size issue
IDF_TOOLCHAIN: [gcc]
- IDF_TARGET: "esp32c3"
INSTALL_EXTRA_TOOLS: "qemu-riscv32"
IDF_TOOLCHAIN: [gcc, clang]
script:
- run_cmd idf-ci build run
--build-system cmake
--target $IDF_TARGET
-m qemu
--modified-files ${MR_MODIFIED_FILES}
- run_cmd idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- run_cmd pytest
--target $IDF_TARGET
-m qemu
--embedded-services idf,qemu
--junitxml=XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
--qemu-extra-args \"-global driver=timer.$IDF_TARGET.timg,property=wdt_disable,value=true\"
test_pytest_linux:
extends:
- .host_test_template
- .before_script:build
artifacts:
paths:
- XUNIT_RESULT.xml
- pytest-embedded/
- "**/build*/build_log.txt"
reports:
junit: XUNIT_RESULT.xml
script:
- run_cmd idf-ci build run
--build-system cmake
-p components -p examples -p tools/test_apps
--target linux
--only-test-related
--modified-files ${MR_MODIFIED_FILES}
- run_cmd idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- run_cmd pytest
--target linux
--embedded-services idf
--junitxml=XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
test_pytest_macos:
extends:
- .host_test_template
- .brew-macos-settings
artifacts:
paths:
- XUNIT_RESULT.xml
- pytest-embedded/
- "**/build*/build_log.txt"
reports:
junit: XUNIT_RESULT.xml
script:
- run_cmd idf-ci build run
-p components -p examples -p tools/test_apps
--build-system cmake
--target linux
--only-test-related
-m macos
--modified-files ${MR_MODIFIED_FILES}
- run_cmd idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- run_cmd pytest
--target linux
-m macos
--junitxml=XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
######################
# Build System Tests #
######################
.test_build_system_template:
stage: host_test
extends:
- .build_template
- .rules:build:check
dependencies: # set dependencies to null to avoid missing artifacts issue
needs:
- job: fast_template_app
artifacts: false
optional: true
artifacts:
reports:
junit: XUNIT_RESULT.xml
paths:
- XUNIT_RESULT.xml
- test_build_system
expire_in: 1 week
when: always
script:
- ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
- cd ${IDF_PATH}/tools/test_build_system
- run_cmd idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- pytest
--cleanup-idf-copy
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--work-dir ${CI_PROJECT_DIR}/test_build_system
--junitxml ${CI_PROJECT_DIR}/XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
.test_build_system_minimal_cmake_template:
extends: .test_build_system_template
variables:
INSTALL_EXTRA_TOOLS: cmake@3.22.1
script:
- MINIMAL_SUPPORTED_CMAKE_VERSION=$(echo "${INSTALL_EXTRA_TOOLS}" | sed -n 's/.*cmake@\([0-9.]*\).*/\1/p')
- export PATH=$(echo "$PATH" | sed -E "s|/tools/cmake/[0-9.]+|/tools/cmake/${MINIMAL_SUPPORTED_CMAKE_VERSION}|")
- ACTUAL_CMAKE_VERSION=$(cmake --version | head -n1 | awk '{print $3}')
- |
if [ "${ACTUAL_CMAKE_VERSION}" != "${MINIMAL_SUPPORTED_CMAKE_VERSION}" ]; then
echo "ERROR: Wrong minimal CMake version! Detected: ${ACTUAL_CMAKE_VERSION}, but should be: ${MINIMAL_SUPPORTED_CMAKE_VERSION}"
exit 1
fi
- ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
- cd ${IDF_PATH}/tools/test_build_system
- run_cmd idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- pytest
-k cmake
--cleanup-idf-copy
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--work-dir ${CI_PROJECT_DIR}/test_build_system
--junitxml ${CI_PROJECT_DIR}/XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
pytest_build_system:
extends: .test_build_system_template
parallel: 3
pytest_buildv2_system:
extends:
- .test_build_system_template
- .rules:labels:buildv2
parallel: 3
script:
- ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
- cd ${IDF_PATH}/tools/test_build_system
- run_cmd idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- pytest
--buildv2
--cleanup-idf-copy
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--work-dir ${CI_PROJECT_DIR}/test_build_system
--junitxml ${CI_PROJECT_DIR}/XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
--
test_non_default_target.py
test_component_manager.py
test_build.py
test_bootloader.py
test_git.py
test_kconfig.py
test_partition.py
test_reproducible_build.py
test_sdkconfig.py
test_versions.py
test_common.py
test_components.py
test_cmake.py
test_idf_extension.py
test_rebuild.py
pytest_build_system_macos:
extends:
- .test_build_system_template
- .brew-macos-settings
- .rules:build:macos
parallel: 3
pytest_build_system_minimal_cmake:
extends: .test_build_system_minimal_cmake_template
pytest_build_system_macos_minimal_cmake:
extends:
- .test_build_system_minimal_cmake_template
- .brew-macos-settings
- .rules:build:macos
variables:
INSTALL_EXTRA_TOOLS: ninja cmake@3.22.1

View File

@@ -60,9 +60,6 @@ child_integration_test_pipeline:
stage: assign_test
needs:
- gen_integration_pipeline
variables:
IDF_S3_SERVER: $IDF_S3_NEW_SERVER
IDF_S3_ACCESS_KEY: $IDF_S3_NEW_ACCESS_KEY
trigger:
include:
- artifact: idf-integration-ci/child_pipeline/pipeline.yml

View File

@@ -1,34 +1,13 @@
.post_deploy_template:
stage: post_deploy
image: $ESP_ENV_IMAGE
generate_failed_jobs_report:
extends:
- .post_deploy_template
stage: post_deploy
tags: [build, shiny]
image: $ESP_ENV_IMAGE
when: always
dependencies: # Do not download artifacts from the previous stages
needs:
- pipeline_variables
dependencies: [] # Do not download artifacts from the previous stages
artifacts:
expire_in: 2 week
expire_in: 1 week
when: always
paths:
- job_report.html
script:
- python tools/ci/dynamic_pipelines/scripts/generate_report.py --report-type job
sync_support_status:
extends:
- .post_deploy_template
- .rules:master:push
tags: [ brew, github_sync ]
needs:
- push_to_github
cache: []
before_script: []
script:
- curl --fail --request POST --form token="$IDF_STATUS_TRIG_TOKEN" --form ref="$IDF_STATUS_BRANCH" --form "variables[UPLOAD_TO_S3]=true" "$IDF_STATUS_TRIG_URL"
environment:
name: sync_support_status_production
deployment_tier: production

View File

@@ -1,7 +1,8 @@
.pre_check_template:
stage: pre_check
image: $ESP_ENV_IMAGE
tags: [build, shiny]
tags:
- host_test
dependencies: # set dependencies to null to avoid missing artifacts issue
check_version:
@@ -9,7 +10,7 @@ check_version:
# esp_idf_version.h in a branch before tagging the next version.
extends:
- .pre_check_template
- .rules:protected:check
- .rules:protected
tags: [ brew, github_sync ]
variables:
# need a full clone to get the latest tag
@@ -71,7 +72,7 @@ check_chip_support_components:
expire_in: 1 week
script:
- python tools/ci/check_soc_headers_leak.py
- find ${IDF_PATH}/components/soc/**/include/soc/ ${IDF_PATH}/components/soc/**/register/soc/ -name "*_struct.h" -print0 | xargs -0 -n1 ./tools/ci/check_soc_struct_headers.py
- find ${IDF_PATH}/components/soc/**/include/soc/ -name "*_struct.h" -print0 | xargs -0 -n1 ./tools/ci/check_soc_struct_headers.py
- tools/ci/check_esp_memory_utils_headers.sh
check_esp_err_to_name:
@@ -116,10 +117,22 @@ check_test_scripts_build_test_rules:
extends:
- .pre_check_template
- .before_script:build
variables:
PYTEST_IGNORE_COLLECT_IMPORT_ERROR: "1"
script:
# requires basic pytest dependencies
- run_cmd bash install.sh --enable-pytest
- python tools/ci/check_build_test_rules.py check-test-scripts examples/ tools/test_apps components
check_configure_ci_environment_parsing:
extends:
- .pre_check_template
- .before_script:build
- .rules:build
script:
- cd tools/ci
- python -m unittest ci_build_apps.py
pipeline_variables:
extends:
- .pre_check_template
@@ -129,10 +142,11 @@ pipeline_variables:
# MODIFIED_FILES is a list of files that changed, could be used everywhere
- MODIFIED_FILES=$(echo "$GIT_DIFF_OUTPUT" | xargs)
- echo "MODIFIED_FILES=$MODIFIED_FILES" >> pipeline.env
- echo "REPORT_EXIT_CODE=0" >> pipeline.env
# MR_MODIFIED_FILES and MR_MODIFIED_COMPONENTS are semicolon separated lists that is used in MR only
# for non MR pipeline, these are empty lists
- |
if [ -z "$CI_MERGE_REQUEST_IID" ]; then
if [ $IS_MR_PIPELINE == "0" ]; then
echo "MR_MODIFIED_FILES=\"\"" >> pipeline.env
echo "MR_MODIFIED_COMPONENTS=\"\"" >> pipeline.env
else
@@ -143,14 +157,19 @@ pipeline_variables:
echo "MR_MODIFIED_COMPONENTS=\"$MR_MODIFIED_COMPONENTS\"" >> pipeline.env
fi
- |
if [ -n "$PIPELINE_COMMIT_SHA" ]; then
echo "PIPELINE_COMMIT_SHA=$PIPELINE_COMMIT_SHA" >> pipeline.env
if echo "$CI_MERGE_REQUEST_LABELS" | egrep "(^|,)BUILD_AND_TEST_ALL_APPS(,|$)"; then
echo "BUILD_AND_TEST_ALL_APPS=1" >> pipeline.env
fi
# run full pipeline if testing constraint branch
- |
if [ -n "$CI_PYTHON_CONSTRAINT_BRANCH" ]; then
echo "BUILD_AND_TEST_ALL_APPS=1" >> pipeline.env
fi
- echo "OOCD_DISTRO_URL_ARMHF=$OOCD_DISTRO_URL_ARMHF" >> pipeline.env
- echo "OOCD_DISTRO_URL_ARM64=$OOCD_DISTRO_URL_ARM64" >> pipeline.env
- run_cmd idf-ci gitlab pipeline-variables >> pipeline.env
- python tools/ci/ci_process_description.py
- cat pipeline.env
- run_cmd idf-ci gitlab upload-artifacts --type env
- python tools/ci/artifacts_handler.py upload --type modified_files_and_components_report
artifacts:
reports:
dotenv: pipeline.env
@@ -191,24 +210,14 @@ baseline_manifest_sha:
expire_in: 1 week
when: always
gcc_static_analyzer:
extends:
- .pre_check_template
- .rules:build
variables:
CI_CCACHE_DISABLE: 1
ANALYZING_APP: "examples/get-started/hello_world"
script:
- echo "CONFIG_COMPILER_STATIC_ANALYZER=y" >> ${ANALYZING_APP}/sdkconfig.defaults
- idf-build-apps build -p ${ANALYZING_APP}
retry_failed_jobs:
extends:
- .pre_check_template
- .rules:dev-push
redundant_pass_job:
stage: pre_check
tags: [shiny, fast_run]
allow_failure: true
image: $ESP_ENV_IMAGE
dependencies: null
before_script: []
cache: []
extends: []
script:
- echo "Retrieving and retrying all failed jobs for the pipeline..."
- python tools/ci/python_packages/gitlab_api.py retry_failed_jobs $CI_MERGE_REQUEST_PROJECT_ID --pipeline_id $CI_PIPELINE_ID
when: manual
- echo "This job is redundant to ensure the 'retry_failed_jobs' job can exist and not be skipped"
when: always

View File

@@ -2,20 +2,33 @@
extends:
- .before_script:minimal
stage: pre_check
image: "${CI_DOCKER_REGISTRY}/esp-idf-pre-commit:2"
tags: [pre-commit]
variables:
# Both shiny and brew runners can pick this job
GIT_STRATEGY: fetch
GIT_DEPTH: 1
SUBMODULES_TO_FETCH: "all"
image: $PRE_COMMIT_IMAGE
tags: [cache, shiny]
needs:
- pipeline_variables
variables:
# cache pre_commit
PRE_COMMIT_HOME: "$CI_PROJECT_DIR/.cache/pre-commit"
script:
- fetch_submodules
- pre-commit run --files $MODIFIED_FILES
- pre-commit run --hook-stage post-commit validate-sbom-manifest
check_pre_commit_upload_cache:
extends:
- .check_pre_commit_template
rules:
- if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/) && $CI_PIPELINE_SOURCE == "push"'
cache:
- key: pre_commit-cache-${LATEST_GIT_TAG}
paths:
- .cache/pre-commit
policy: pull-push
- key: submodule-cache-${LATEST_GIT_TAG}
paths:
- .cache/submodule_archives
policy: pull
check_pre_commit:
extends:
- .check_pre_commit_template
@@ -24,6 +37,10 @@ check_pre_commit:
when: never
- when: on_success
cache:
- key: pre_commit-cache-${LATEST_GIT_TAG}
paths:
- .cache/pre-commit
policy: pull
- key: submodule-cache-${LATEST_GIT_TAG}
paths:
- .cache/submodule_archives
@@ -39,20 +56,25 @@ check_powershell:
tags:
- dind
- amd64
- brew # faster "apk add"
needs:
- pipeline_variables
variables:
# brew runners always use fetch
GIT_STRATEGY: fetch
GIT_DEPTH: 1
SUBMODULES_TO_FETCH: "none"
# cache pre_commit
PRE_COMMIT_HOME: "$CI_PROJECT_DIR/.cache/pre-commit"
rules:
- changes:
- "*.ps1"
- ".gitlab/ci/pre_commit.yml"
script:
- apk add python3
- apk add py3-pip
- pip install pre-commit --break-system-packages
- pre-commit run --hook-stage manual check-powershell-scripts --files $MODIFIED_FILES
cache:
- key: pre_commit-cache-${LATEST_GIT_TAG}
paths:
- .cache/pre-commit
policy: pull
- key: submodule-cache-${LATEST_GIT_TAG}
paths:
- .cache/submodule_archives
policy: pull

View File

@@ -0,0 +1,15 @@
retry_failed_jobs:
stage: retry_failed_jobs
tags: [shiny, fast_run]
allow_failure: true
image: $ESP_ENV_IMAGE
dependencies: null
before_script: []
cache: []
extends: []
script:
- echo "Retrieving and retrying all failed jobs for the pipeline..."
- python tools/ci/python_packages/gitlab_api.py retry_failed_jobs $CI_MERGE_REQUEST_PROJECT_ID --pipeline_id $CI_PIPELINE_ID
when: manual
needs:
- redundant_pass_job

View File

@@ -10,7 +10,7 @@
- "**/*.{c,C,cpp}"
- "**/*.{h,H,hpp}"
- "components/**/Kconfig"
- "components/**/CMakeLists.txt"
- "components/**/CMakeList.txt"
.patterns-python-cache: &patterns-python-cache
- "tools/requirements.json"
@@ -35,15 +35,16 @@
# Add folders excluded by "???[!t]" and "??[!s]?"
# pre-commit: tools/ci/check_rules_components_patterns.py
- "components/bt/host/**/*"
- "components/esp_psram/system_layer/*"
.patterns-downloadable-tools: &patterns-downloadable-tools
- "tools/idf_tools.py"
- "tools/tools.json"
.patterns-build_template-app: &patterns-build_template-app
- "tools/ci/build_template_app.sh"
.patterns-build_system: &patterns-build_system
- "tools/cmake/**/*"
- "tools/cmakev2/**/*"
- "tools/kconfig_new/**/*"
- "tools/idf.py"
- "tools/idf_py_actions/**/*"
@@ -51,11 +52,11 @@
- "tools/ci/ignore_build_warnings.txt"
- "tools/ci/test_build_system*.sh"
- "tools/ci/test_build_system*.py"
- "tools/ci/build_template_app.sh"
- "tools/ci/ci_build_apps.py"
- "tools/test_build_system/**/*"
.patterns-build_system_win: &patterns-build_system_win
- "tools/test_build_system/**/*"
.patterns-build_macos: &patterns-build_macos
- "tools/ci/test_configure_ci_environment.sh"
.patterns-build_check: &patterns-build_check
- "tools/test_build_system/**/*"
@@ -67,7 +68,6 @@
- "tools/ci/check_public_headers.py"
- "tools/ci/check_register_rw_half_word.cmake"
- "tools/ci/check_register_rw_half_word.py"
- "examples/build_system/**/*"
.patterns-host_test: &patterns-host_test
- ".gitlab/ci/host-test.yml"
@@ -92,8 +92,6 @@
- "tools/idf_size.py"
- "tools/test_idf_size/**/*"
- "tools/test_idf_diag/**/*"
- "tools/tools.json"
- "tools/tools_schema.json"
- "tools/idf_tools.py"
@@ -126,11 +124,6 @@
- "tools/check_python_dependencies.py"
- "tools/bsasm.py"
- "tools/test_bsasm/**/*"
- "tools/ci/test_soc_headers_load_in_idf_build_apps.py"
.patterns-docker: &patterns-docker
- "tools/docker/**/*"
@@ -145,8 +138,10 @@
- "components/esp_phy/lib"
- "components/esp_wifi/lib"
- "components/esp_coex/lib"
- "components/json/cJSON"
- "components/lwip/lwip"
- "components/mbedtls/mbedtls"
- "components/mqtt/esp-mqtt"
- "components/openthread/lib"
- "components/openthread/openthread"
- "components/protobuf-c/protobuf-c"
@@ -158,22 +153,26 @@
- "components/bt/esp_ble_mesh/lib/lib"
- ".gitmodules"
.patterns-idf-pytest-plugin: &patterns-idf-pytest-plugin
- "tools/ci/idf_pytest/**/*"
- "tools/ci/dynamic_pipelines/tests/**/*"
##############
# if anchors #
##############
.if-master-push: &if-master-push
if: '$CI_COMMIT_REF_NAME == "master" && $CI_PIPELINE_SOURCE == "push"'
.if-ref-master: &if-ref-master
if: '$CI_COMMIT_REF_NAME == "master"'
.if-release-tag: &if-release-tag
.if-tag-release: &if-tag-release
if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/'
.if-protected-check: &if-protected-check
.if-protected: &if-protected
if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/ || $CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/) || $CI_COMMIT_TAG =~ /^qa-test/'
.if-protected-deploy: &if-protected-deploy
if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/ || $CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/) && ($CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "api")'
.if-protected-no_label: &if-protected-no_label
if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/ || $CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/) && $BOT_TRIGGER_WITH_LABEL == null'
.if-protected-branch-push: &if-protected-branch-push
.if-protected-ref-push: &if-protected-ref-push
# rules:changes always evaluates to true for new branch pipelines or when there is no Git push event
if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/) && $CI_PIPELINE_SOURCE == "push"'
@@ -183,6 +182,9 @@
.if-dev-push: &if-dev-push
if: '$CI_COMMIT_REF_NAME != "master" && $CI_COMMIT_BRANCH !~ /^release\/v/ && $CI_COMMIT_TAG !~ /^v\d+\.\d+(\.\d+)?($|-)/ && $CI_COMMIT_TAG !~ /^qa-test/ && ($CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "merge_request_event")'
.if-schedule: &if-schedule
if: '$CI_PIPELINE_SOURCE == "schedule"'
.if-schedule-nightly: &if-schedule-nightly
if: '$CI_PIPELINE_SOURCE == "schedule" && $INCLUDE_NIGHTLY_RUN == "1"'
@@ -202,41 +204,46 @@
# Rules #
#########
### Branches ###
.rules:protected:check:
.rules:protected:
rules:
- <<: *if-protected-check
- <<: *if-protected
.rules:protected:deploy:
.rules:push_to_github:
rules:
- <<: *if-qa-test-tag
when: never
- <<: *if-protected-deploy
- <<: *if-protected-no_label
.rules:master:push:
.rules:protected-no_label-always:
rules:
- <<: *if-master-push
- <<: *if-qa-test-tag
when: never
- <<: *if-protected-no_label
when: always
.rules:tag:release:
rules:
- <<: *if-release-tag
- <<: *if-tag-release
.rules:dev-push:
rules:
- <<: *if-dev-push
# Do not upload caches on dev branches by default
.rules:upload-python-cache:
rules:
- <<: *if-release-tag
- <<: *if-tag-release
- <<: *if-schedule-nightly
- <<: *if-protected-branch-push
- <<: *if-protected-ref-push
changes: *patterns-python-cache
- <<: *if-label-upload_cache
when: manual
.rules:upload-submodule-cache:
rules:
- <<: *if-release-tag
- <<: *if-protected-branch-push
# Needn't upload submodule cache in schedule pipeline
- <<: *if-tag-release
- <<: *if-protected-ref-push
changes: *patterns-submodule
- <<: *if-label-upload_cache
when: manual
@@ -244,10 +251,16 @@
### Patterns ###
.rules:patterns:clang_tidy:
rules:
- <<: *if-protected-check
- <<: *if-protected
- <<: *if-dev-push
changes: *patterns-c-files
.rules:patterns:python-files:
rules:
- <<: *if-protected
- <<: *if-dev-push
changes: *patterns-python-files
#.rules:patterns:static-code-analysis-preview:
# rules:
# - <<: *if-dev-push
@@ -257,6 +270,12 @@
# - <<: *if-dev-push
# changes: *patterns-sonarqube-files
.rules:patterns:idf-pytest-plugin:
rules:
- <<: *if-protected
- <<: *if-dev-push
changes: *patterns-idf-pytest-plugin
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# DO NOT place comments or maintain any code from this line
#
@@ -272,9 +291,6 @@
.if-label-build: &if-label-build
if: '$BOT_LABEL_BUILD || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*build(?:,[^,\n\r]+)*$/i'
.if-label-buildv2: &if-label-buildv2
if: '$BOT_LABEL_BUILDV2 || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*buildv2(?:,[^,\n\r]+)*$/i'
.if-label-docker: &if-label-docker
if: '$BOT_LABEL_DOCKER || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*docker(?:,[^,\n\r]+)*$/i'
@@ -300,7 +316,7 @@
rules:
- <<: *if-revert-branch
when: never
- <<: *if-protected-check
- <<: *if-protected
- <<: *if-label-build
- <<: *if-dev-push
changes: *patterns-build_components
@@ -313,7 +329,7 @@
rules:
- <<: *if-revert-branch
when: never
- <<: *if-protected-check
- <<: *if-protected
- <<: *if-label-build
- <<: *if-dev-push
changes: *patterns-build_check
@@ -328,7 +344,7 @@
rules:
- <<: *if-revert-branch
when: never
- <<: *if-protected-check
- <<: *if-protected
- <<: *if-label-build
- <<: *if-label-docker
- <<: *if-dev-push
@@ -344,15 +360,31 @@
rules:
- <<: *if-revert-branch
when: never
- <<: *if-protected-check
- <<: *if-protected
- <<: *if-label-build
- <<: *if-label-macos
- <<: *if-label-macos_test
- <<: *if-dev-push
changes: *patterns-build_macos
- <<: *if-dev-push
changes: *patterns-build_system
- <<: *if-dev-push
changes: *patterns-downloadable-tools
.rules:labels:buildv2:
.rules:build:target_test:
rules:
- <<: *if-revert-branch
when: never
- <<: *if-label-buildv2
- <<: *if-protected
- <<: *if-label-build
- <<: *if-dev-push
changes: *patterns-build_components
- <<: *if-dev-push
changes: *patterns-build_system
- <<: *if-dev-push
changes: *patterns-build_template-app
- <<: *if-dev-push
changes: *patterns-downloadable-tools
.rules:labels:nvs_coverage:
rules:
@@ -366,14 +398,12 @@
when: never
- <<: *if-schedule-test-build-system-windows
- <<: *if-label-windows
- <<: *if-dev-push
changes: *patterns-build_system_win
.rules:test:host_test:
rules:
- <<: *if-revert-branch
when: never
- <<: *if-protected-check
- <<: *if-protected
- <<: *if-label-build-only
when: never
- <<: *if-label-host_test
@@ -384,7 +414,7 @@
rules:
- <<: *if-revert-branch
when: never
- <<: *if-protected-check
- <<: *if-protected
- <<: *if-label-build-only
when: never
- <<: *if-label-submodule

View File

@@ -16,6 +16,28 @@ clang_tidy_check:
--limit-file tools/ci/static-analysis-rules.yml
--xtensa-include-dir
check_pylint:
extends:
- .pre_check_template
- .rules:patterns:python-files
needs:
- pipeline_variables
artifacts:
reports:
codequality: pylint.json
paths:
- pylint.json
expire_in: 1 week
when: always
script:
- |
if [ -n "$CI_MERGE_REQUEST_IID" ]; then
export files=$(echo "$GIT_DIFF_OUTPUT" | grep ".py$" | xargs);
else
export files=$(git ls-files "*.py" | xargs);
fi
- if [ -z "$files" ]; then echo "No python files found"; exit 0; fi
- run_cmd pylint --exit-zero --load-plugins=pylint_gitlab --output-format=gitlab-codeclimate:pylint.json $files
#
## build stage
## Sonarqube related jobs put here for this reason:
@@ -85,7 +107,7 @@ clang_tidy_check:
#code_quality_report:
# extends:
# - .sonar_scan_template
# - .rules:protected:check
# - .rules:protected
# allow_failure: true # it's using exit code to indicate the code analysis result,
# # we don't want to block ci when critical issues founded
# script:

View File

@@ -3,7 +3,8 @@
extends: .rules:test:host_test
stage: host_test
image: $ESP_ENV_IMAGE
tags: [windows-build, brew]
tags:
- windows-build
dependencies: # set dependencies to null to avoid missing artifacts issue
# run host_test jobs immediately, only after upload cache
needs:
@@ -13,21 +14,13 @@
- job: upload-submodules-cache
optional: true
artifacts: false
variables:
GIT_STRATEGY: fetch # use brew local mirror first
before_script:
- if ($env:IDF_DONT_USE_MIRRORS) {
$env:IDF_MIRROR_PREFIX_MAP = ""
}
before_script: []
after_script: []
test_cli_installer_win:
rules:
- when: never
extends:
- .host_test_win_template
- .rules:labels:windows_pytest_build_system
allow_failure: true
artifacts:
when: on_failure
paths:
@@ -36,11 +29,9 @@ test_cli_installer_win:
expire_in: 1 week
variables:
IDF_PATH: "$CI_PROJECT_DIR"
timeout: 3h
script:
# Tools must be downloaded for testing
# cmake@version that is supported
- python ${IDF_PATH}\tools\idf_tools.py download required qemu-riscv32 qemu-xtensa cmake cmake@3.22.1
- python ${IDF_PATH}\tools\idf_tools.py download required qemu-riscv32 qemu-xtensa cmake
- cd ${IDF_PATH}\tools\test_idf_tools
- python -m pip install jsonschema
- python .\test_idf_tools.py
@@ -50,7 +41,6 @@ test_tools_win:
extends:
- .host_test_win_template
- .rules:labels:windows_pytest_build_system
parallel: 4
artifacts:
paths:
- ${IDF_PATH}/*.out
@@ -64,12 +54,12 @@ test_tools_win:
PYTHONPATH: "$PYTHONPATH;$IDF_PATH\\tools;$IDF_PATH\\tools\\esp_app_trace;$IDF_PATH\\components\\partition_table;$IDF_PATH\\tools\\ci\\python_packages"
script:
- python -m pip install jsonschema
- .\install.ps1 --enable-ci
- .\install.ps1 --enable-ci --enable-pytest
- .\export.ps1
- python "${SUBMODULE_FETCH_TOOL}" -s "all"
- cd ${IDF_PATH}/tools/test_idf_py
- idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- pytest --parallel-count ${CI_NODE_TOTAL} --parallel-index ${CI_NODE_INDEX} --junitxml=${IDF_PATH}/XUNIT_RESULT.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
- pytest --noconftest test_idf_py.py --junitxml=${IDF_PATH}/XUNIT_IDF_PY.xml
- pytest --noconftest test_hints.py --junitxml=${IDF_PATH}/XUNIT_HINTS.xml
# Build tests
.test_build_system_template_win:
@@ -82,68 +72,20 @@ test_tools_win:
after_script: []
timeout: 4 hours
script:
- .\install.ps1 --enable-ci
- .\install.ps1 --enable-ci --enable-pytest
- . .\export.ps1
- python "${SUBMODULE_FETCH_TOOL}" -s "all"
- cd ${IDF_PATH}\tools\test_build_system
- idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- pytest --parallel-count ${CI_NODE_TOTAL} --parallel-index ${CI_NODE_INDEX} --junitxml=${CI_PROJECT_DIR}\XUNIT_RESULT.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
- pytest --parallel-count ${CI_NODE_TOTAL} --parallel-index ${CI_NODE_INDEX} --junitxml=${CI_PROJECT_DIR}\XUNIT_RESULT.xml
pytest_build_system_win:
extends:
- .test_build_system_template_win
- .rules:labels:windows_pytest_build_system
parallel: 6
needs: []
tags: [windows-build, brew]
artifacts:
paths:
- XUNIT_RESULT.xml
- test_build_system
expire_in: 2 days
reports:
junit: XUNIT_RESULT.xml
when: always
pytest_build_system_win_minimal_cmake:
extends:
- .test_build_system_template_win
- .rules:labels:windows_pytest_build_system
needs: []
tags: [windows-build, brew]
artifacts:
paths:
- XUNIT_RESULT.xml
- test_build_system
expire_in: 2 days
reports:
junit: XUNIT_RESULT.xml
when: always
variables:
MINIMAL_CMAKE_VERSION: "3.22.1"
script:
- .\install.ps1 --enable-ci
- . .\export.ps1
- python ${IDF_PATH}\tools\idf_tools.py install cmake@${MINIMAL_CMAKE_VERSION}
- $Env:PATH = "$Env:USERPROFILE\.espressif\tools\cmake\${MINIMAL_CMAKE_VERSION}\bin;$Env:PATH"
- |
$actualVersion = (& cmake --version).Split()[2]
if ($actualVersion -ne $Env:MINIMAL_CMAKE_VERSION) {
Write-Error "ERROR: Wrong CMake version! Detected: $actualVersion, but expected: $Env:MINIMAL_CMAKE_VERSION"
exit 1
}
- python "${SUBMODULE_FETCH_TOOL}" -s "all"
- cd ${IDF_PATH}\tools\test_build_system
- idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- pytest -k cmake --junitxml=${CI_PROJECT_DIR}\XUNIT_RESULT.xml --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
pytest_buildv2_system_win:
extends:
- .test_build_system_template_win
- .rules:labels:buildv2
parallel: 2
needs: []
tags: [windows-build, brew]
tags:
- windows-build
artifacts:
paths:
- XUNIT_RESULT.xml
@@ -152,31 +94,3 @@ pytest_buildv2_system_win:
reports:
junit: XUNIT_RESULT.xml
when: always
script:
- .\install.ps1 --enable-ci
- . .\export.ps1
- python "${SUBMODULE_FETCH_TOOL}" -s "all"
- cd ${IDF_PATH}\tools\test_build_system
- idf-ci gitlab download-known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME}
- pytest
--buildv2
--parallel-count ${CI_NODE_TOTAL}
--parallel-index ${CI_NODE_INDEX}
--junitxml=${CI_PROJECT_DIR}\XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
--
test_non_default_target.py
test_component_manager.py
test_build.py
test_bootloader.py
test_git.py
test_kconfig.py
test_partition.py
test_reproducible_build.py
test_sdkconfig.py
test_versions.py
test_common.py
test_components.py
test_cmake.py
test_idf_extension.py
test_rebuild.py

View File

@@ -21,7 +21,7 @@ upload-pip-cache:
policy: push
script:
- rm -rf .cache/pip # clear old packages
- bash install.sh --enable-ci --enable-test-specific
- bash install.sh --enable-ci --enable-pytest
parallel:
matrix:
- GEO: [ 'shiny', 'brew' ]

View File

@@ -9,6 +9,11 @@
## Related <!-- Optional -->
<!-- Related Jira issues and Github issues or write "No related issues"-->
## Release notes <!-- Mandatory -->
<!-- Either state release notes or write "No release notes" -->
<!-- ## Breaking change notes --><!-- Optional -->
<!-- ## Dynamic Pipeline Configuration
```yaml
Test Case Filters:
@@ -22,6 +27,3 @@ Test Case Filters:
# This example will include all tests containing 'test_hello_world' in the name,
# and include all tests containing 'test_sdm' but not 'sdmmc' in the name.
``` --><!-- Optional -->
<!-- Don't remove the next line - assigns the MR author as the assignee -->
/assign me

View File

@@ -39,5 +39,24 @@ _For other small/non-public changes, which are not expected to be in the release
* Mention submodule MR, if there is
* Mention backport(ed) MR, if there is
<!-- Don't remove the next line - assigns the MR author as the assignee -->
/assign me
_Don't touch the subsection titles below, they will be parsed by scripts._
## Release notes <!-- Mandatory -->
_Changes made in this MR that should go into the **Release Notes** should be listed here. Please use **past tense** and *specify the area (see maintainers page of IDF internal wiki)*. If there is a subscope, include it and separate with slash (`/`). Minor changes can go to the descriptions above without a release notes entry._
_Write all the changes in a **list** (Start at the beginning of the line with `-` or `*`). If multiple changes are made, each of them should take a single line. If there is only one change to list, it should still be the only line of a list. If this MR does not need any release notes, write "No release notes" here without the `-` or `*`. e.g._
* [WiFi] Changed/fixed/updated xxx
* [WiFi] Added support of xxx
* [Peripheral Drivers/I2S] Fixed xxx (https://github.com/espressif/esp-idf/issues/xxxx)
## Breaking change notes
_Remove this subsection if not used._
_If there are any breaking changes, please mention it here. Talking about (1) what is not accepted any more, (2) the alternative solution and (3) the benefits/reason. e.g._
_Please strictly follow the breaking change restriction, which means, if there is a breaking change but you are merging to non-major versions, you have to separate the breaking part out to another MR for a major version. The breaking change subsection is only accepted in MRs merging to major versions._
* [VFS/UART] Now vfs_uart_set_rts_cts accept one more instance argument, to support configuration to different ports.

17
.gitmodules vendored
View File

@@ -46,6 +46,19 @@
sbom-description = Wear-leveled SPI flash file system for embedded devices
sbom-hash = 0dbb3f71c5f6fae3747a9d935372773762baf852
[submodule "components/json/cJSON"]
path = components/json/cJSON
url = ../../DaveGamble/cJSON.git
sbom-version = 1.7.18
sbom-cpe = cpe:2.3:a:cjson_project:cjson:{}:*:*:*:*:*:*:*
sbom-supplier = Person: Dave Gamble
sbom-url = https://github.com/DaveGamble/cJSON
sbom-description = Ultralightweight JSON parser in ANSI C
sbom-hash = 8f2beb57ddad1f94bed899790b00f46df893ccac
sbom-cve-exclude-list = CVE-2024-31755 Resolved in v1.7.18
sbom-cve-exclude-list = CVE-2023-26819 Resolved in commit a328d65ad490b64da8c87523cbbfe16050ba5bf6
sbom-cve-exclude-list = CVE-2023-53154 Resolved in v1.7.18
[submodule "components/mbedtls/mbedtls"]
path = components/mbedtls/mbedtls
url = ../../espressif/mbedtls.git
@@ -54,6 +67,10 @@
path = components/lwip/lwip
url = ../../espressif/esp-lwip.git
[submodule "components/mqtt/esp-mqtt"]
path = components/mqtt/esp-mqtt
url = ../../espressif/esp-mqtt.git
[submodule "components/protobuf-c/protobuf-c"]
path = components/protobuf-c/protobuf-c
url = ../../protobuf-c/protobuf-c.git

View File

@@ -1,68 +0,0 @@
config_rules = [
'sdkconfig.ci=default',
'sdkconfig.ci.*=',
'=default',
]
extra_pythonpaths = [
'$IDF_PATH/tools/ci/python_packages',
'$IDF_PATH/tools/ci',
'$IDF_PATH/tools',
]
build_system = "idf_ci_local.app:IdfCMakeApp"
recursive = true
check_warnings = true
keep_going = true
copy_sdkconfig = true
ignore_warning_files = [
'$IDF_PATH/tools/ci/ignore_build_warnings.txt',
]
build_dir = "build_@t_@w"
build_log_filename = "build_log.txt"
size_json_filename = "size_${CI_JOB_ID}.json"
verbose = 1 # INFO
additional_build_targets = [
'esp32h21',
'esp32h4',
]
# collect
collect_app_info_filename = "app_info_${CI_JOB_NAME_SLUG}.txt"
junitxml = "build_summary_${CI_JOB_NAME_SLUG}.xml"
# manifest
check_manifest_rules = true
manifest_rootpath = "$IDF_PATH"
manifest_filepatterns = [
'**/.build-test-rules.yml',
]
# dependency-driven build
deactivate_dependency_driven_build_by_components = [
'cxx',
'esp_common',
'esp_hw_support',
'esp_rom',
'esp_system',
'esp_timer',
'freertos',
'hal',
'heap',
'log',
'esp_libc',
'riscv',
'soc',
'xtensa',
]
deactivate_dependency_driven_build_by_filepatterns = [
# tools
'tools/cmake/**/*',
'tools/tools.json',
# ci
'tools/ci/ignore_build_warnings.txt',
]

View File

@@ -1,106 +0,0 @@
preserve_non_test_related_apps = false
exclude_dirs = [
'tools/test_mkdfu',
'tools/test_idf_size',
'tools/test_idf_py',
'tools/test_idf_diag',
'tools/test_bsasm',
'tools/ci/test_autocomplete',
'tools/test_build_system',
]
[local_runtime_envs]
EXTRA_CFLAGS = "-Werror -Werror=deprecated-declarations -Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function -Wstrict-prototypes"
EXTRA_CXXFLAGS = "-Werror -Werror=deprecated-declarations -Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function"
LDGEN_CHECK_MAPPING = "1"
IDF_CI_BUILD = "1"
[gitlab]
[gitlab.build_pipeline]
workflow_name = "build_child_pipeline"
presigned_json_job_name = 'generate_pytest_build_report'
job_tags = ['build', 'shiny']
job_template_name = '.dynamic_build_template'
job_template_jinja = '' # write in tools/ci/dynamic_pipelines/templates/.dynamic_jobs.yml
pre_yaml_jinja = """
include:
- .gitlab/ci/common.yml
- tools/ci/dynamic_pipelines/templates/.dynamic_jobs.yml
- tools/ci/dynamic_pipelines/templates/test_child_pipeline.yml
"""
yaml_jinja = """
{{ settings.gitlab.build_pipeline.pre_yaml_jinja }}
workflow:
name: {{ settings.gitlab.build_pipeline.workflow_name }}
rules:
- when: always
{{ jobs }}
""" # simplified since we included the tools/ci/dynamic_pipelines/templates/test_child_pipeline.yml
[gitlab.test_pipeline]
job_template_name = '.dynamic_target_test_template'
job_template_jinja = '' # write in tools/ci/dynamic_pipelines/templates/.dynamic_jobs.yml
pre_yaml_jinja = """
include:
- .gitlab/ci/common.yml
- tools/ci/dynamic_pipelines/templates/.dynamic_jobs.yml
"""
[gitlab.artifacts.s3.debug]
bucket = "idf-artifacts"
patterns = [
'**/build*/bootloader/*.map',
'**/build*/bootloader/*.elf',
'**/build*/*.map',
'**/build*/*.elf',
# customized
'**/build*/esp_tee/*.map',
'**/build*/esp_tee/*.elf',
'**/build*/gdbinit/*',
]
[gitlab.artifacts.s3.flash]
bucket = "idf-artifacts"
patterns = [
'**/build*/bootloader/*.bin',
'**/build*/*.bin',
'**/build*/partition_table/*.bin',
'**/build*/flasher_args.json',
'**/build*/flash_project_args',
'**/build*/config/sdkconfig.json',
'**/build*/sdkconfig',
'**/build*/project_description.json',
# customized
'**/build*/esp_tee/*.bin',
]
[gitlab.artifacts.s3.log]
bucket = "idf-artifacts"
patterns = [
'**/build*/build_log.txt',
'**/build*/size*.json',
]
[gitlab.artifacts.s3.junit]
bucket = "idf-artifacts"
patterns = [
'**/XUNIT_RESULT_*.xml',
'**/build_summary_*.xml',
]
[gitlab.artifacts.s3.env]
bucket = "idf-artifacts"
patterns = [
'**/pipeline.env',
]
[gitlab.artifacts.s3.longterm]
bucket = "longterm"
if_clause = '"$CI_COMMIT_REF_NAME" == "master"'
patterns = [
'**/build*/size*.json',
]

View File

@@ -1,7 +1,7 @@
[mypy]
# Specifies the Python version used to parse and check the target program
python_version = 3.10
python_version = 3.9
# Disallows defining functions without type annotations or with incomplete type annotations
# True => enforce type annotation in all function definitions

View File

@@ -1,15 +1,9 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
default_stages: [pre-commit]
default_stages: [commit]
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.9.7"
hooks:
- id: ruff-format
- id: ruff
args: [ "--fix", "--show-fixes" ]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
@@ -20,7 +14,6 @@ repos:
# 2 - any file matching *test*/*expected* (for host tests, if possible use this naming pattern always)
# 3 - any directory named 'testdata'
# 4 - protobuf auto-generated files
# 5 - COPYING files
exclude: &whitespace_excludes |
(?x)^(
.+\.(md|rst|map|bin)|
@@ -31,8 +24,6 @@ repos:
.*.pb-c.c|
.*.yuv|
.*.rgb|
.*.gray|
.*COPYING.*|
docs/sphinx-known-warnings\.txt
)$
- id: end-of-file-fixer
@@ -47,10 +38,26 @@ repos:
- id: no-commit-to-branch
name: Do not use uppercase letters in the branch name
args: ['--pattern', '^[^A-Z]*[A-Z]']
- repo: https://github.com/PyCQA/flake8
rev: 5.0.4
hooks:
- id: flake8
args: ['--config=.flake8', '--tee', '--benchmark']
- repo: https://github.com/asottile/reorder-python-imports
rev: v3.12.0
hooks:
- id: reorder-python-imports
name: Reorder Python imports
args: [--py38-plus]
exclude: >
(?x)^(
.*_pb2.py
)$
- repo: https://github.com/codespell-project/codespell
rev: v2.3.0
hooks:
- id: codespell
exclude: ^docs/sphinx-known-warnings\.txt$
- repo: local
hooks:
- id: check-executables
@@ -144,7 +151,7 @@ repos:
require_serial: true
additional_dependencies:
- PyYAML == 5.3.1
- idf-build-apps~=2.13
- idf-build-apps~=2.5
- id: sort-yaml-files
name: sort yaml files
entry: tools/ci/sort_yaml.py
@@ -159,6 +166,15 @@ repos:
files: 'tools/ci/sort_yaml\.py$'
additional_dependencies:
- ruamel.yaml
- id: check-build-test-rules-path-exists
name: check path in .build-test-rules.yml exists
entry: tools/ci/check_build_test_rules.py check-exist
language: python
additional_dependencies:
- PyYAML == 5.3.1
always_run: true
pass_filenames: false
require_serial: true
- id: cleanup-ignore-lists
name: Remove non-existing patterns from ignore lists
entry: tools/ci/cleanup_ignore_lists.py
@@ -177,19 +193,14 @@ repos:
rev: v4.0.1
hooks:
- id: file-contents-sorter
files: "tools/ci/(\
executable-list\\.txt\
|mypy_ignore_list\\.txt\
|check_copyright_ignore\\.txt\
|exclude_check_tools_files\\.txt\
)"
files: 'tools\/ci\/(executable-list\.txt|mypy_ignore_list\.txt|check_copyright_ignore\.txt)'
- repo: https://github.com/espressif/check-copyright/
rev: v1.1.1
rev: v1.0.3
hooks:
- id: check-copyright
args: ['--ignore', 'tools/ci/check_copyright_ignore.txt', '--config', 'tools/ci/check_copyright_config.yaml']
- repo: https://github.com/espressif/conventional-precommit-linter
rev: v1.10.0
rev: v1.7.0
hooks:
- id: conventional-precommit-linter
stages: [commit-msg]
@@ -227,7 +238,7 @@ repos:
name: Lint rST files in docs folder using Sphinx Lint
files: ^(docs/en|docs/zh_CN)/.*\.(rst|inc)$
- repo: https://github.com/espressif/esp-idf-kconfig.git
rev: v3.2.0
rev: v2.5.0
hooks:
- id: check-kconfig-files
- id: check-deprecated-kconfig-options

641
.pylintrc Normal file
View File

@@ -0,0 +1,641 @@
[MAIN]
# Analyse import fallback blocks. This can be used to support both Python 2 and
# 3 compatible code, which means that the block might have code that exists
# only in one or another interpreter, leading to false positives when analysed.
analyse-fallback-blocks=no
# Clear in-memory caches upon conclusion of linting. Useful if running pylint
# in a server-like mode.
clear-cache-post-run=no
# Load and enable all available extensions. Use --list-extensions to see a list
# all available extensions.
#enable-all-extensions=
# In error mode, messages with a category besides ERROR or FATAL are
# suppressed, and no reports are done by default. Error mode is compatible with
# disabling specific errors.
#errors-only=
# Always return a 0 (non-error) status code, even if lint errors are found.
# This is primarily useful in continuous integration scripts.
#exit-zero=
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code.
extension-pkg-allow-list=
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code. (This is an alternative name to extension-pkg-allow-list
# for backward compatibility.)
extension-pkg-whitelist=
# Return non-zero exit code if any of these messages/categories are detected,
# even if score is above --fail-under value. Syntax same as enable. Messages
# specified are enabled, while categories only check already-enabled messages.
fail-on=
# Specify a score threshold under which the program will exit with error.
fail-under=10
# Interpret the stdin as a python script, whose filename needs to be passed as
# the module_or_package argument.
#from-stdin=
# Files or directories to be skipped. They should be base names, not paths.
ignore=CVS
# Add files or directories matching the regular expressions patterns to the
# ignore-list. The regex matches against paths and can be in Posix or Windows
# format. Because '\\' represents the directory delimiter on Windows systems,
# it can't be used as an escape character.
ignore-paths=
# Files or directories matching the regular expression patterns are skipped.
# The regex matches against base names, not paths. The default value ignores
# Emacs file locks
ignore-patterns=^\.#
# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis). It
# supports qualified module names, as well as Unix pattern matching.
ignored-modules=
# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
#init-hook=
# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
# number of processors available to use, and will cap the count on Windows to
# avoid hangs.
jobs=1
# Control the amount of potential inferred values when inferring a single
# object. This can help the performance when dealing with large functions or
# complex, nested conditions.
limit-inference-results=100
# List of plugins (as comma separated values of python module names) to load,
# usually to register additional checkers.
load-plugins=
# Pickle collected data for later comparisons.
persistent=yes
# Minimum Python version to use for version dependent checks. Will default to
# the version used to run pylint.
py-version=3.8
# Discover python modules and packages in the file system subtree.
recursive=no
# Add paths to the list of the source roots. Supports globbing patterns. The
# source root is an absolute path or a path relative to the current working
# directory used to determine a package namespace for modules located under the
# source root.
source-roots=
# When enabled, pylint would attempt to guess common misconfiguration and emit
# user-friendly hints instead of false-positive error messages.
suggestion-mode=yes
# Allow loading of arbitrary C extensions. Extensions are imported into the
# active Python interpreter and may run arbitrary code.
unsafe-load-any-extension=no
# In verbose mode, extra non-checker-related info will be displayed.
#verbose=
[BASIC]
# Naming style matching correct argument names.
argument-naming-style=snake_case
# Regular expression matching correct argument names. Overrides argument-
# naming-style. If left empty, argument names will be checked with the set
# naming style.
#argument-rgx=
# Naming style matching correct attribute names.
attr-naming-style=snake_case
# Regular expression matching correct attribute names. Overrides attr-naming-
# style. If left empty, attribute names will be checked with the set naming
# style.
#attr-rgx=
# Bad variable names which should always be refused, separated by a comma.
bad-names=foo,
bar,
baz,
toto,
tutu,
tata
# Bad variable names regexes, separated by a comma. If names match any regex,
# they will always be refused
bad-names-rgxs=
# Naming style matching correct class attribute names.
class-attribute-naming-style=any
# Regular expression matching correct class attribute names. Overrides class-
# attribute-naming-style. If left empty, class attribute names will be checked
# with the set naming style.
#class-attribute-rgx=
# Naming style matching correct class constant names.
class-const-naming-style=UPPER_CASE
# Regular expression matching correct class constant names. Overrides class-
# const-naming-style. If left empty, class constant names will be checked with
# the set naming style.
#class-const-rgx=
# Naming style matching correct class names.
class-naming-style=PascalCase
# Regular expression matching correct class names. Overrides class-naming-
# style. If left empty, class names will be checked with the set naming style.
#class-rgx=
# Naming style matching correct constant names.
const-naming-style=UPPER_CASE
# Regular expression matching correct constant names. Overrides const-naming-
# style. If left empty, constant names will be checked with the set naming
# style.
#const-rgx=
# Minimum line length for functions/classes that require docstrings, shorter
# ones are exempt.
docstring-min-length=-1
# Naming style matching correct function names.
function-naming-style=snake_case
# Regular expression matching correct function names. Overrides function-
# naming-style. If left empty, function names will be checked with the set
# naming style.
#function-rgx=
# Good variable names which should always be accepted, separated by a comma.
good-names=i,
j,
k,
ex,
Run,
_
# Good variable names regexes, separated by a comma. If names match any regex,
# they will always be accepted
good-names-rgxs=
# Include a hint for the correct naming format with invalid-name.
include-naming-hint=no
# Naming style matching correct inline iteration names.
inlinevar-naming-style=any
# Regular expression matching correct inline iteration names. Overrides
# inlinevar-naming-style. If left empty, inline iteration names will be checked
# with the set naming style.
#inlinevar-rgx=
# Naming style matching correct method names.
method-naming-style=snake_case
# Regular expression matching correct method names. Overrides method-naming-
# style. If left empty, method names will be checked with the set naming style.
#method-rgx=
# Naming style matching correct module names.
module-naming-style=snake_case
# Regular expression matching correct module names. Overrides module-naming-
# style. If left empty, module names will be checked with the set naming style.
#module-rgx=
# Colon-delimited sets of names that determine each other's naming style when
# the name regexes allow several styles.
name-group=
# Regular expression which should only match function or class names that do
# not require a docstring.
no-docstring-rgx=^_
# List of decorators that produce properties, such as abc.abstractproperty. Add
# to this list to register other decorators that produce valid properties.
# These decorators are taken in consideration only for invalid-name.
property-classes=abc.abstractproperty
# Regular expression matching correct type alias names. If left empty, type
# alias names will be checked with the set naming style.
#typealias-rgx=
# Regular expression matching correct type variable names. If left empty, type
# variable names will be checked with the set naming style.
#typevar-rgx=
# Naming style matching correct variable names.
variable-naming-style=snake_case
# Regular expression matching correct variable names. Overrides variable-
# naming-style. If left empty, variable names will be checked with the set
# naming style.
#variable-rgx=
[CLASSES]
# Warn about protected attribute access inside special methods
check-protected-access-in-special-methods=no
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods=__init__,
__new__,
setUp,
asyncSetUp,
__post_init__
# List of member names, which should be excluded from the protected access
# warning.
exclude-protected=_asdict,_fields,_replace,_source,_make,os._exit
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg=cls
# List of valid names for the first argument in a metaclass class method.
valid-metaclass-classmethod-first-arg=mcs
[DESIGN]
# List of regular expressions of class ancestor names to ignore when counting
# public methods (see R0903)
exclude-too-few-public-methods=
# List of qualified class names to ignore when counting class parents (see
# R0901)
ignored-parents=
# Maximum number of arguments for function / method.
max-args=5
# Maximum number of attributes for a class (see R0902).
max-attributes=7
# Maximum number of boolean expressions in an if statement (see R0916).
max-bool-expr=5
# Maximum number of branch for function / method body.
max-branches=12
# Maximum number of locals for function / method body.
max-locals=15
# Maximum number of parents for a class (see R0901).
max-parents=7
# Maximum number of public methods for a class (see R0904).
max-public-methods=20
# Maximum number of return / yield for function / method body.
max-returns=6
# Maximum number of statements in function / method body.
max-statements=50
# Minimum number of public methods for a class (see R0903).
min-public-methods=2
[EXCEPTIONS]
# Exceptions that will emit a warning when caught.
overgeneral-exceptions=builtins.BaseException,builtins.Exception
[FORMAT]
# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
expected-line-ending-format=
# Regexp for a line that is allowed to be longer than the limit.
ignore-long-lines=^\s*(# )?<?https?://\S+>?$
# Number of spaces of indent required inside a hanging or continued line.
indent-after-paren=4
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string=' '
# Maximum number of characters on a single line.
max-line-length=160
# Maximum number of lines in a module.
max-module-lines=1000
# Allow the body of a class to be on the same line as the declaration if body
# contains single statement.
single-line-class-stmt=no
# Allow the body of an if to be on the same line as the test if there is no
# else.
single-line-if-stmt=no
[IMPORTS]
# List of modules that can be imported at any level, not just the top level
# one.
allow-any-import-level=
# Allow explicit reexports by alias from a package __init__.
allow-reexport-from-package=no
# Allow wildcard imports from modules that define __all__.
allow-wildcard-with-all=no
# Deprecated modules which should not be used, separated by a comma.
deprecated-modules=
# Output a graph (.gv or any supported image format) of external dependencies
# to the given file (report RP0402 must not be disabled).
ext-import-graph=
# Output a graph (.gv or any supported image format) of all (i.e. internal and
# external) dependencies to the given file (report RP0402 must not be
# disabled).
import-graph=
# Output a graph (.gv or any supported image format) of internal dependencies
# to the given file (report RP0402 must not be disabled).
int-import-graph=
# Force import order to recognize a module as part of the standard
# compatibility libraries.
known-standard-library=
# Force import order to recognize a module as part of a third party library.
known-third-party=enchant
# Couples of modules and preferred modules, separated by a comma.
preferred-modules=
[LOGGING]
# The type of string formatting that logging methods do. `old` means using %
# formatting, `new` is for `{}` formatting.
logging-format-style=old
# Logging modules to check that the string format arguments are in logging
# function parameter format.
logging-modules=logging
[MESSAGES CONTROL]
# Only show warnings with the listed confidence levels. Leave empty to show
# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE,
# UNDEFINED.
confidence=HIGH,
CONTROL_FLOW,
INFERENCE,
INFERENCE_FAILURE,
UNDEFINED
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
# file where it should appear only once). You can also use "--disable=all" to
# disable everything first and then re-enable specific checks. For example, if
# you want to run only the similarities checker, you can use "--disable=all
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use "--disable=all --enable=classes
# --disable=W".
disable=raw-checker-failed,
bad-inline-option,
locally-disabled,
file-ignored,
suppressed-message,
useless-suppression,
deprecated-pragma,
use-symbolic-message-instead,
missing-function-docstring, # Modified since here, include this line
missing-class-docstring,
missing-module-docstring,
wrong-import-order,
invalid-name,
too-few-public-methods,
too-many-locals,
ungrouped-imports, # since we have isort in pre-commit
no-name-in-module, # since we have flake8 to check this
too-many-instance-attributes,
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once). See also the "--disable" option for examples.
enable=c-extension-no-member
[METHOD_ARGS]
# List of qualified names (i.e., library.method) which require a timeout
# parameter e.g. 'requests.api.get,requests.api.post'
timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,
XXX,
TODO
# Regular expression of note tags to take in consideration.
notes-rgx=
[REFACTORING]
# Maximum number of nested blocks for function / method body
max-nested-blocks=5
# Complete name of functions that never returns. When checking for
# inconsistent-return-statements if a never returning function is called then
# it will be considered as an explicit return statement and no message will be
# printed.
never-returning-functions=sys.exit,argparse.parse_error
[REPORTS]
# Python expression which should return a score less than or equal to 10. You
# have access to the variables 'fatal', 'error', 'warning', 'refactor',
# 'convention', and 'info' which contain the number of messages in each
# category, as well as 'statement' which is the total number of statements
# analyzed. This score is used by the global evaluation report (RP0004).
evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10))
# Template used to display messages. This is a python new-style format string
# used to format the message information. See doc for all details.
msg-template=
# Set the output format. Available formats are text, parseable, colorized, json
# and msvs (visual studio). You can also give a reporter class, e.g.
# mypackage.mymodule.MyReporterClass.
#output-format=
# Tells whether to display a full report or only the messages.
reports=no
# Activate the evaluation score.
score=yes
[SIMILARITIES]
# Comments are removed from the similarity computation
ignore-comments=yes
# Docstrings are removed from the similarity computation
ignore-docstrings=yes
# Imports are removed from the similarity computation
ignore-imports=yes
# Signatures are removed from the similarity computation
ignore-signatures=yes
# Minimum lines number of a similarity.
min-similarity-lines=4
[SPELLING]
# Limits count of emitted suggestions for spelling mistakes.
max-spelling-suggestions=4
# Spelling dictionary name. No available dictionaries : You need to install
# both the python package and the system dependency for enchant to work..
spelling-dict=
# List of comma separated words that should be considered directives if they
# appear at the beginning of a comment and should not be checked.
spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:
# List of comma separated words that should not be checked.
spelling-ignore-words=
# A path to a file that contains the private dictionary; one word per line.
spelling-private-dict-file=
# Tells whether to store unknown words to the private dictionary (see the
# --spelling-private-dict-file option) instead of raising a message.
spelling-store-unknown-words=no
[STRING]
# This flag controls whether inconsistent-quotes generates a warning when the
# character used as a quote delimiter is used inconsistently within a module.
check-quote-consistency=no
# This flag controls whether the implicit-str-concat should generate a warning
# on implicit string concatenation in sequences defined over several lines.
check-str-concat-over-line-jumps=no
[TYPECHECK]
# List of decorators that produce context managers, such as
# contextlib.contextmanager. Add to this list to register other decorators that
# produce valid context managers.
contextmanager-decorators=contextlib.contextmanager
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=
# Tells whether to warn about missing members when the owner of the attribute
# is inferred to be None.
ignore-none=yes
# This flag controls whether pylint should warn about no-member and similar
# checks whenever an opaque object is returned when inferring. The inference
# can return multiple potential results while evaluating a Python object, but
# some branches might not be evaluated, which results in partial inference. In
# that case, it might be useful to still emit no-member and other checks for
# the rest of the inferred objects.
ignore-on-opaque-inference=yes
# List of symbolic message names to ignore for Mixin members.
ignored-checks-for-mixins=no-member,
not-async-context-manager,
not-context-manager,
attribute-defined-outside-init
# List of class names for which member attributes should not be checked (useful
# for classes with dynamically set attributes). This supports the use of
# qualified names.
ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace
# Show a hint with possible names when a member name was not found. The aspect
# of finding the hint is based on edit distance.
missing-member-hint=yes
# The minimum edit distance a name should have in order to be considered a
# similar match for a missing member name.
missing-member-hint-distance=1
# The total number of similar names that should be taken in consideration when
# showing a hint for a missing member.
missing-member-max-choices=1
# Regex pattern to define which classes are considered mixins.
mixin-class-rgx=.*[Mm]ixin
# List of decorators that change the signature of a decorated function.
signature-mutators=
[VARIABLES]
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid defining new builtins when possible.
additional-builtins=
# Tells whether unused global variables should be treated as a violation.
allow-global-unused-variables=yes
# List of names allowed to shadow builtins
allowed-redefined-builtins=
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
callbacks=cb_,
_cb
# A regular expression matching the name of dummy variables (i.e. expected to
# not be used).
dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
# Argument names that match this expression will be ignored.
ignored-argument-names=_.*|^ignored_|^unused_
# Tells whether we should check for unused import in __init__ files.
init-import=no
# List of qualified module names which can have objects that can redefine
# builtins.
redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io

21
.readthedocs.yml Normal file
View File

@@ -0,0 +1,21 @@
# .readthedocs.yml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Optionally build your docs in additional formats such as PDF and ePub
formats:
- pdf
# Optionally set the version of Python and requirements required to build your docs
python:
version: 2.7
install:
- requirements: docs/requirements.txt
# We need to list all the submodules included in documenation build by Doxygen
submodules:
include:
- components/mqtt/esp-mqtt

View File

@@ -1,51 +1,19 @@
cmake_minimum_required(VERSION 3.22)
cmake_minimum_required(VERSION 3.16)
project(esp-idf C CXX ASM)
if(CMAKE_CURRENT_LIST_DIR STREQUAL CMAKE_SOURCE_DIR)
message(FATAL_ERROR "Current directory '${CMAKE_CURRENT_LIST_DIR}' is not buildable. "
"Change directories to one of the example projects in '${CMAKE_CURRENT_LIST_DIR}/examples' and try again.")
"Change directories to one of the example projects in '${CMAKE_CURRENT_LIST_DIR}/examples' and try "
"again.")
endif()
project(esp-idf C CXX ASM)
# Variables compile_options, c_compile_options, cxx_compile_options, compile_definitions, link_options shall
# not be unset as they may already contain flags, set by toolchain-TARGET.cmake files.
# Add the following build specifications here, since these seem to be dependent
# on config values on the root Kconfig.
if(BOOTLOADER_BUILD)
if(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE)
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
list(APPEND compile_options "-Oz")
else()
list(APPEND compile_options "-Os")
endif()
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
list(APPEND compile_options "-freorder-blocks")
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
list(APPEND compile_options "-mno-target-align")
endif()
endif()
elseif(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG)
list(APPEND compile_options "-Og")
if(CMAKE_C_COMPILER_ID MATCHES "GNU" AND NOT CONFIG_IDF_TARGET_LINUX)
list(APPEND compile_options "-fno-shrink-wrap") # Disable shrink-wrapping to reduce binary size
endif()
elseif(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF)
list(APPEND compile_options "-O2")
endif()
elseif(ESP_TEE_BUILD)
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
list(APPEND compile_options "-Oz")
else()
list(APPEND compile_options "-Os")
list(APPEND compile_options "-freorder-blocks")
endif()
else()
if(NOT BOOTLOADER_BUILD)
if(CONFIG_COMPILER_OPTIMIZATION_SIZE)
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
@@ -55,9 +23,6 @@ else()
endif()
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
list(APPEND compile_options "-freorder-blocks")
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
list(APPEND compile_options "-mno-target-align")
endif()
endif()
elseif(CONFIG_COMPILER_OPTIMIZATION_DEBUG)
list(APPEND compile_options "-Og")
@@ -70,6 +35,28 @@ else()
list(APPEND compile_options "-O2")
endif()
else() # BOOTLOADER_BUILD
if(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE)
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
list(APPEND compile_options "-Oz")
else()
list(APPEND compile_options "-Os")
endif()
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
list(APPEND compile_options "-freorder-blocks")
endif()
elseif(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG)
list(APPEND compile_options "-Og")
if(CMAKE_C_COMPILER_ID MATCHES "GNU" AND NOT CONFIG_IDF_TARGET_LINUX)
list(APPEND compile_options "-fno-shrink-wrap") # Disable shrink-wrapping to reduce binary size
endif()
elseif(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE)
list(APPEND compile_options "-O0")
elseif(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF)
list(APPEND compile_options "-O2")
endif()
endif()
if(CONFIG_COMPILER_CXX_EXCEPTIONS)
@@ -109,6 +96,8 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
list(APPEND compile_options "-Wno-char-subscripts")
# Clang seems to notice format string issues which GCC doesn't.
list(APPEND compile_options "-Wno-format-security")
# Logic bug in essl component
list(APPEND compile_options "-Wno-tautological-overlap-compare")
# Some pointer checks in mDNS component check addresses which can't be NULL
list(APPEND compile_options "-Wno-tautological-pointer-compare")
# Similar to the above, in tcp_transport
@@ -159,10 +148,6 @@ if(CONFIG_COMPILER_NO_MERGE_CONSTANTS)
list(APPEND compile_options "-fno-merge-constants")
endif()
if(CONFIG_COMPILER_ENABLE_TEXT_SECTION_LITERALS)
list(APPEND compile_options "-mtext-section-literals")
endif()
if(CONFIG_COMPILER_STACK_CHECK_MODE_NORM)
list(APPEND compile_options "-fstack-protector")
elseif(CONFIG_COMPILER_STACK_CHECK_MODE_STRONG)
@@ -175,18 +160,6 @@ if(CONFIG_COMPILER_DUMP_RTL_FILES)
list(APPEND compile_options "-fdump-rtl-expand")
endif()
if(CMAKE_C_COMPILER_ID MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 15.0)
list(APPEND c_compile_options "-fzero-init-padding-bits=all" "-fno-malloc-dce")
endif()
if(CONFIG_COMPILER_CXX_GLIBCXX_CONSTEXPR_COLD_CONSTEXPR)
list(APPEND cxx_compile_options "-D_GLIBCXX20_CONSTEXPR=__attribute__((cold)) constexpr")
list(APPEND cxx_compile_options "-D_GLIBCXX23_CONSTEXPR=__attribute__((cold)) constexpr")
elseif(CONFIG_COMPILER_CXX_GLIBCXX_CONSTEXPR_COLD)
list(APPEND cxx_compile_options "-D_GLIBCXX20_CONSTEXPR=__attribute__((cold))")
list(APPEND cxx_compile_options "-D_GLIBCXX23_CONSTEXPR=__attribute__((cold))")
endif()
__generate_prefix_map(prefix_map_compile_options)
list(APPEND compile_options ${prefix_map_compile_options})
@@ -206,15 +179,6 @@ if(CONFIG_COMPILER_DISABLE_GCC14_WARNINGS)
list(APPEND compile_options "-Wno-calloc-transposed-args")
endif()
if(CONFIG_COMPILER_DISABLE_GCC15_WARNINGS)
list(APPEND c_compile_options "-Wno-unterminated-string-initialization")
list(APPEND c_compile_options "-Wno-header-guard")
list(APPEND cxx_compile_options "-Wno-self-move")
list(APPEND cxx_compile_options "-Wno-template-body")
list(APPEND cxx_compile_options "-Wno-dangling-reference")
list(APPEND cxx_compile_options "-Wno-defaulted-function-deleted")
endif()
if(CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS)
if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
idf_build_replace_option_from_property(COMPILE_OPTIONS "-Werror" "-Werror=all")
@@ -234,13 +198,6 @@ if(CONFIG_ESP_SYSTEM_USE_EH_FRAME)
list(APPEND link_options "-Wl,--eh-frame-hdr")
endif()
if(CONFIG_ESP_SYSTEM_USE_FRAME_POINTER)
list(APPEND compile_options "-fno-omit-frame-pointer")
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
list(APPEND compile_options "-mno-omit-leaf-frame-pointer")
endif()
endif()
list(APPEND link_options "-fno-lto")
if(CONFIG_IDF_TARGET_LINUX AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
@@ -332,12 +289,3 @@ foreach(component_target ${build_component_targets})
endif()
set(__idf_component_context 0)
endforeach()
# Run component validation checks after all components have been processed
# Only run validation for the main project, not subprojects like bootloader
idf_build_get_property(bootloader_build BOOTLOADER_BUILD)
idf_build_get_property(esp_tee_build ESP_TEE_BUILD)
if(NOT bootloader_build AND NOT esp_tee_build)
include("${CMAKE_CURRENT_LIST_DIR}/tools/cmake/component_validation.cmake")
__component_validation_run_checks()
endif()

View File

@@ -8,9 +8,9 @@ This document describes the compatibility between ESP-IDF releases and Espressif
NOTE: This document on release branches may be out-of-date. Check the [Compatibility file on master](https://github.com/espressif/esp-idf/blob/master/COMPATIBILITY.md) for the most accurate information.
See [Compatibility Advisory for Chip Revision Numbering Scheme](https://www.espressif.com/sites/default/files/advisory_downloads/AR2022-005%20Compatibility%20Advisory%20for%20Chip%20Revision%20Numbering%20%20Scheme.pdf) on the versioning of Espressif SoC revisions.
See [Compatibility Advisory for Chip Revision Numbering Scheme](https://www.espressif.com.cn/sites/default/files/advisory_downloads/AR2022-005%20Compatibility%20Advisory%20for%20Chip%20Revision%20Numbering%20%20Scheme.pdf) on the versioning of Espressif SoC revisions.
You can run `esptool chip-id` to detect the series and revision of an SoC. See [SoC Errata](https://www.espressif.com/en/support/documents/technical-documents?keys=errata) for more on how to distinguish between chip revisions, and the improvements provided by chip revisions. And run `idf.py --version` to know the version of current ESP-IDF.
You can run `esptool chip_id` to detect the series and revision of an SoC. See [SoC Errata](https://www.espressif.com.cn/en/support/documents/technical-documents?keys=errata) for more on how to distinguish between chip revisions, and the improvements provided by chip revisions. And run `idf.py --version` to know the version of current ESP-IDF.
## ESP-IDF Support for Different Chip Revisions
@@ -97,55 +97,18 @@ Supported since ESP-IDF v5.0.
| release/v5.2 | v5.2.2+ | v5.2 |
| release/v5.3 and above | v5.3+ | v5.3 |
#### v2.0
| Release branch | Recommended | Required |
|------------------------|-------------|----------|
| release/v5.0 | v5.0.8+ | v5.0.8 |
| release/v5.1 | v5.1.5+ | v5.1.5* |
| release/v5.2 | v5.2.4+ | v5.2.4 |
| release/v5.3 | v5.3.2+ | v5.3.2* |
| release/v5.4 and above | v5.4+ | v5.4 |
Note: IDF v5.1.5 and v5.3.2 are compatible with C2 v2.0. However the chip revision check hasn't been updated on these releases. Enable `ESP32C2_REV2_DEVELOPMENT` config to bypass the outdated check.
### ESP32-C6
#### v0.0, v0.1
Supported since ESP-IDF v5.1.
#### v0.2
| Release branch | Recommended | Required |
|------------------------|-------------|----------|
| release/v5.1 | v5.1.5+ | v5.1 |
| release/v5.2 | v5.2.4+ | v5.2 |
| release/v5.3 | v5.3.2+ | v5.3 |
| release/v5.4 and above | v5.4+ | v5.4 |
### ESP32-H2
#### v0.1, v0.2
Supported since ESP-IDF v5.1.
#### v1.2
| Release branch | Recommended | Required |
|------------------------|-------------|----------|
| release/v5.1 | v5.1.6+ | v5.1.6 |
| release/v5.2 | v5.2.5+ | v5.2.5 |
| release/v5.3 | v5.3.3+ | v5.3.3 |
| release/v5.4 | v5.4.1+ | v5.4.1 |
| release/v5.5 and above | v5.5+ | v5.5 |
### ESP32-P4
#### v1.0, v1.3
Supported since ESP-IDF v5.3.
## What If the ESP-IDF Version Is Lower than the `Required` Version?
Latest ESP-IDF versions can prevent from downloading to, or even execute binaries on unsupported chips. ESP-IDF of versions v4.4.5+, v5.0.1+, v5.1 and above have both esptool download check and bootloader loading check against the chip revision. While ESP-IDF v4.3.5 has only esptool downloading check.

View File

@@ -10,7 +10,7 @@
有关乐鑫芯片版本的编码方式,请参考 [关于芯片版本 (Chip Revision) 编码方式的兼容性公告](https://www.espressif.com/sites/default/files/advisory_downloads/AR2022-005%20%E5%85%B3%E4%BA%8E%E8%8A%AF%E7%89%87%E7%89%88%E6%9C%AC%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F%20%28Chip%20Revision%29%20%E7%9A%84%E5%85%BC%E5%AE%B9%E6%80%A7%E5%85%AC%E5%91%8A.pdf)。
运行 `esptool chip-id` 可查看芯片系列及其版本。有关区分芯片版本及版本改进内容的更多信息,请参考 [芯片勘误表](https://www.espressif.com.cn/zh-hans/support/documents/technical-documents?keys=%E5%8B%98%E8%AF%AF%E8%A1%A8)。运行 `idf.py --version` 可查看当前的 ESP-IDF 版本。
运行 `esptool chip_id` 可查看芯片系列及其版本。有关区分芯片版本及版本改进内容的更多信息,请参考 [芯片勘误表](https://www.espressif.com.cn/zh-hans/support/documents/technical-documents?keys=%E5%8B%98%E8%AF%AF%E8%A1%A8)。运行 `idf.py --version` 可查看当前的 ESP-IDF 版本。
## ESP-IDF 对各芯片版本的支持
@@ -97,54 +97,18 @@
| release/v5.2 | v5.2.2+ | v5.1 |
| release/v5.3 及以上 | v5.3+ | v5.3 |
#### v2.0
| 发布分支 | 推荐版本 | 需求版本 |
|------------------------|-------------|----------|
| release/v5.0 | v5.0.8+ | v5.0.8 |
| release/v5.1 | v5.1.5+ | v5.1.5* |
| release/v5.2 | v5.2.4+ | v5.2.4 |
| release/v5.3 | v5.3.2+ | v5.3.2* |
| release/v5.4 及以上 | v5.4+ | v5.4 |
提示: IDF v5.1.5 及 v5.3.2 与 C2 v2.0 兼容,但芯片版本检查尚未在这些发布版本更新。使能 `ESP32C2_REV2_DEVELOPMENT` 选项来跳过这些过时的检查。
### ESP32-C6
#### v0.0, v0.1
从 ESP-IDF v5.1 开始支持。
#### v0.2
| 发布分支 | 推荐版本 | 需求版本 |
|------------------------|-------------|----------|
| release/v5.1 | v5.1.5+ | v5.1 |
| release/v5.2 | v5.2.4+ | v5.2 |
| release/v5.3 | v5.3.2+ | v5.3 |
| release/v5.4 及以上 | v5.4+ | v5.4 |
### ESP32-H2
#### v0.1, v0.2
从 ESP-IDF v5.1 开始支持。
#### v1.2
| 发布分支 | 推荐版本 | 需求版本 |
|------------------------|-------------|----------|
| release/v5.1 | v5.1.6+ | v5.1.6 |
| release/v5.2 | v5.2.5+ | v5.2.5 |
| release/v5.3 | v5.3.3+ | v5.3.3 |
| release/v5.4 | v5.4.1+ | v5.4.1 |
| release/v5.5 及以上 | v5.5+ | v5.5 |
### ESP32-P4
#### v1.0, v1.3
从 ESP-IDF v5.3 开始支持。
## 如果 ESP-IDF 版本低于 `需求版本` 会出现什么情况?

138
Kconfig
View File

@@ -136,28 +136,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
select FREERTOS_UNICORE
select IDF_TARGET_ARCH_RISCV
config IDF_TARGET_ESP32H21
bool
default "y" if IDF_TARGET="esp32h21"
select FREERTOS_UNICORE
select IDF_TARGET_ARCH_RISCV
select IDF_ENV_BRINGUP
select IDF_ENV_FPGA if ESP32H21_SELECTS_REV_MP
config IDF_TARGET_ESP32H4
bool
default "y" if IDF_TARGET="esp32h4"
select IDF_TARGET_ARCH_RISCV
select IDF_ENV_BRINGUP
select IDF_ENV_FPGA if ESP32H4_SELECTS_REV_MP
config IDF_TARGET_ESP32S31
bool
default "y" if IDF_TARGET="esp32s31"
select IDF_TARGET_ARCH_RISCV
select IDF_ENV_FPGA
select IDF_ENV_BRINGUP
config IDF_TARGET_LINUX
bool
default "y" if IDF_TARGET="linux"
@@ -174,9 +152,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
default 0x0012 if IDF_TARGET_ESP32P4
default 0x0017 if IDF_TARGET_ESP32C5
default 0x0014 if IDF_TARGET_ESP32C61
default 0x0019 if IDF_TARGET_ESP32H21
default 0x001C if IDF_TARGET_ESP32H4
default 0x0020 if IDF_TARGET_ESP32S31
default 0xFFFF
@@ -227,10 +202,10 @@ mainmenu "Espressif IoT Development Framework Configuration"
When loading the BIN with UART, the ROM will jump to ram and run the app after finishing the ROM
startup code, so there's no additional startup initialization required. You can use the
`load-ram` in esptool to load the generated .bin file into ram and execute.
`load_ram` in esptool.py to load the generated .bin file into ram and execute.
Example:
esptool --chip {chip} -p {port} -b {baud} --no-stub load-ram {app.bin}
esptool.py --chip {chip} -p {port} -b {baud} --no-stub load_ram {app.bin}
Recommended sdkconfig.defaults for building loadable ELF files is as follows.
CONFIG_APP_BUILD_TYPE_RAM is required, other options help reduce application
@@ -238,7 +213,7 @@ mainmenu "Espressif IoT Development Framework Configuration"
CONFIG_APP_BUILD_TYPE_RAM=y
CONFIG_VFS_SUPPORT_TERMIOS=
CONFIG_LIBC_NEWLIB_NANO_FORMAT=y
CONFIG_NEWLIB_NANO_FORMAT=y
CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=y
CONFIG_ESP_DEBUG_STUBS_ENABLE=
CONFIG_ESP_ERR_TO_NAME_LOOKUP=
@@ -378,27 +353,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
endchoice
config COMPILER_ENABLE_RISCV_ZCMP
bool "Enable RISCV ZCMP extension"
depends on SOC_CPU_ZCMP_WORKAROUND
default n
help
Enable the RISC-V ZCMP (Compressed Macro) extension to reduce binary size
by optimizing function prologue and epilogue sequences.
Note: Due to a hardware issue on some ESP32 chips (e.g., ESP32C5, ESP32C61,
ESP32H4), executing "cm.push" may re-enable interrupts even when global
interrupts are disabled (mstatus.mie = 0). This can cause unexpected interrupts
during CPU retention or within critical sections.
Workarounds are implemented in the IDF codebase. However, if user code
directly disables interrupts, additional actions may be required. Refer
to code examples under the SOC_CPU_ZCMP_WORKAROUND macro, or disable
the ZCMP extension for source files that contain functions which may
execute while mstatus.mie = 0.
Even with these workarounds, the issue may still affect dual-core variants.
choice COMPILER_OPTIMIZATION_ASSERTION_LEVEL
prompt "Assertion level"
default COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE
@@ -436,7 +390,7 @@ mainmenu "Espressif IoT Development Framework Configuration"
config COMPILER_ASSERT_NDEBUG_EVALUATE
bool "Enable the evaluation of the expression inside assert(X) when NDEBUG is set"
default n
default y
help
When NDEBUG is set, assert(X) will not cause code to trigger an assertion.
With this option set, assert(X) will still evaluate the expression X, though
@@ -446,6 +400,9 @@ mainmenu "Espressif IoT Development Framework Configuration"
This is not according to the standard, which states that the assert(X) should
be replaced with ((void)0) if NDEBUG is defined.
In ESP-IDF v6.0 the default behavior will change to "no" to be in line with the
standard.
choice COMPILER_FLOAT_LIB_FROM
prompt "Compiler float lib source"
default COMPILER_FLOAT_LIB_FROM_RVFPLIB if ESP_ROM_HAS_RVFPLIB
@@ -576,20 +533,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
distribution is more uniform across libraries. On downside, it may increase
the binary size and hence should be used during development phase only.
config COMPILER_ENABLE_TEXT_SECTION_LITERALS
bool
depends on IDF_TOOLCHAIN_GCC
depends on IDF_TARGET_ARCH_XTENSA
default y if ESPTOOLPY_FAST_REFLASHING
help
Intersperse Xtensa literals within the text section to keep
them as close as possible to their references. This prevents
literals from being placed into a separate section in the
output file and prevents the linker from combining literal
pools from different object files. Enabling this is necessary
for fast reflashing to prevent mixing code from mutable and
immutable libraries.
config COMPILER_WARN_WRITE_STRINGS
bool "Enable -Wwrite-strings warning flag"
default "n"
@@ -618,7 +561,7 @@ mainmenu "Espressif IoT Development Framework Configuration"
config COMPILER_DISABLE_DEFAULT_ERRORS
bool "Disable errors for default warnings"
default "n"
default "y"
help
Enable this option if you do not want default warnings to be considered as errors,
especially when updating IDF.
@@ -651,13 +594,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
Enable this option if use GCC 14 or newer, and want to disable warnings which don't appear with
GCC 13.
config COMPILER_DISABLE_GCC15_WARNINGS
bool "Disable new warnings introduced in GCC 15"
default "n"
help
Enable this option if use GCC 15 or newer, and want to disable warnings which don't appear with
GCC 14.
config COMPILER_DUMP_RTL_FILES
bool "Dump RTL files during compilation"
help
@@ -694,7 +630,7 @@ mainmenu "Espressif IoT Development Framework Configuration"
choice COMPILER_ORPHAN_SECTIONS
prompt "Orphan sections handling"
default COMPILER_ORPHAN_SECTIONS_ERROR
default COMPILER_ORPHAN_SECTIONS_WARNING
depends on !IDF_TARGET_LINUX
help
If the linker finds orphan sections, it attempts to place orphan sections after sections of the same
@@ -702,11 +638,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
That means that orphan sections could placed between sections defined in IDF linker scripts.
This could lead to corruption of the binary image. Configure the linker action here.
config COMPILER_ORPHAN_SECTIONS_ERROR
bool "Fail if orphan sections found"
help
Fails the link step with an error if orphan sections are detected.
config COMPILER_ORPHAN_SECTIONS_WARNING
bool "Place with warning"
help
@@ -725,56 +656,10 @@ mainmenu "Espressif IoT Development Framework Configuration"
help
Enable compiler static analyzer. This may produce false-positive results and increases compile time.
choice COMPILER_CXX_GLIBCXX_CONSTEXPR
prompt "Define _GLIBCXX_CONSTEXPR"
default COMPILER_CXX_GLIBCXX_CONSTEXPR_NO_CHANGE
depends on IDF_TOOLCHAIN_GCC && !IDF_TARGET_LINUX
help
Modify libstdc++ _GLIBCXX20_CONSTEXPR and _GLIBCXX23_CONSTEXPR definitions to provide size
optimizations. The total size optimization depends on the application's structure.
There is no robust way to determine which option would be better in a particular case.
Please try all available options to find the best size optimization.
config COMPILER_CXX_GLIBCXX_CONSTEXPR_NO_CHANGE
bool "No change"
help
Use default _GLIBCXX20_CONSTEXPR and _GLIBCXX23_CONSTEXPR defined in libstdc++
config COMPILER_CXX_GLIBCXX_CONSTEXPR_COLD_CONSTEXPR
bool "_GLIBCXX2X_CONSTEXPR=__attribute__((cold)) constexpr"
help
Define _GLIBCXX20_CONSTEXPR=__attribute__((cold)) constexpr
Define _GLIBCXX23_CONSTEXPR=__attribute__((cold)) constexpr
config COMPILER_CXX_GLIBCXX_CONSTEXPR_COLD
bool "_GLIBCXX2X_CONSTEXPR=__attribute__((cold))"
help
Define _GLIBCXX20_CONSTEXPR=__attribute__((cold)).
Define _GLIBCXX23_CONSTEXPR=__attribute__((cold)).
endchoice
endmenu # Compiler Options
menu "Component config"
comment "!!! MINIMAL_BUILD is enabled !!!"
depends on "${IDF_MINIMAL_BUILD}"
comment "Only common components and those transitively required by the main component are listed"
depends on "${IDF_MINIMAL_BUILD}"
comment "If a component configuration is missing, please add it to the main component's requirements"
depends on "${IDF_MINIMAL_BUILD}"
source "$COMPONENT_KCONFIGS_SOURCE_FILE"
menu "Configuration for components not included in the build"
depends on "${IDF_BUILD_V2}"
osource "$COMPONENT_KCONFIGS_EXCLUDED_SOURCE_FILE"
endmenu
endmenu
menu "Project configuration for components not included in the build"
depends on "${IDF_BUILD_V2}"
osource "$COMPONENT_KCONFIGS_PROJBUILD_EXCLUDED_SOURCE_FILE"
endmenu
config IDF_EXPERIMENTAL_FEATURES
@@ -794,8 +679,3 @@ mainmenu "Espressif IoT Development Framework Configuration"
- CONFIG_ESP_WIFI_EAP_TLS1_3
- CONFIG_ESP_WIFI_ENABLE_ROAMING_APP
- CONFIG_USB_HOST_EXT_PORT_RESET_ATTEMPTS
- CONFIG_LIBC_PICOLIBC
- CONFIG_GDMA_ENABLE_WEIGHTED_ARBITRATION
- CONFIG_I3C_MASTER_ENABLED
- CONFIG_MBEDTLS_ESP_IDF_USE_PSA_CRYPTO
- CONFIG_ESPTOOLPY_FAST_REFLASHING

View File

@@ -15,19 +15,18 @@ ESP-IDF is the development framework for Espressif SoCs supported on Windows, Li
The following table shows ESP-IDF support of Espressif SoCs where ![alt text][preview] and ![alt text][supported] denote preview status and support, respectively. The preview support is usually limited in time and intended for beta versions of chips. Please use an ESP-IDF release where the desired SoC is already supported.
|Chip | v5.1 | v5.2 | v5.3 | v5.4 | v5.5 | v6.0 | |
|:----------- |:---------------------: |:---------------------: |:---------------------: | :---------------------: | :-------------------: | :--------------------: |:------------------------------------------------------------------- |
|ESP32 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-C3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32_S3) |
|ESP32-C2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32-C2) |
|ESP32-C6 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32_C6) |
|ESP32-H2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32_H2) |
|ESP32-P4 | | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32-P4) |
|ESP32-C5 | | | | | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32-C5) |
|ESP32-C61 | | | | | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/products/socs/esp32-c61) |
|ESP32-H4 | | | | | | ![alt text][preview] |[Announcement](https://www.espressif.com/en/news/ESP32-H4) |
|Chip | v5.0 | v5.1 | v5.2 | v5.3 | v5.4 | |
|:----------- | :---------------------:| :--------------------: | :--------------------: | :--------------------: | :--------------------: |:------------------------------------------------------------------- |
|ESP32 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-C3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32_S3) |
|ESP32-C2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32-C2) |
|ESP32-C6 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32_C6) |
|ESP32-H2 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32_H2) |
|ESP32-P4 | | | | ![alt text][supported] | ![alt text][supported] |[Announcement](https://www.espressif.com/en/news/ESP32-P4) |
|ESP32-C5 | | | | | ![alt text][preview] |[Announcement](https://www.espressif.com/en/news/ESP32-C5) |
|ESP32-C61 | | | | | ![alt text][preview] |[Announcement](https://www.espressif.com/en/products/socs/esp32-c61) |
[supported]: https://img.shields.io/badge/-supported-green "supported"
[preview]: https://img.shields.io/badge/-preview-orange "preview"
@@ -83,7 +82,7 @@ See the Getting Started guide links above for a detailed setup guide. This is a
## Flashing the Project
When the build finishes, it will print a command line to use `esptool` to flash the chip. However you can also do this automatically by running:
When the build finishes, it will print a command line to use esptool.py to flash the chip. However you can also do this automatically by running:
`idf.py -p PORT flash`

View File

@@ -15,19 +15,18 @@ ESP-IDF 是乐鑫官方推出的物联网开发框架,支持 Windows、Linux
下表总结了乐鑫芯片在 ESP-IDF 各版本中的支持状态,其中 ![alt text][supported] 代表已支持,![alt text][preview] 代表目前处于预览支持状态。预览支持状态通常有时间限制,而且仅适用于测试版芯片。请确保使用与芯片相匹配的 ESP-IDF 版本。
|芯片 | v5.1 | v5.2 | v5.3 | v5.4 | v5.5 | v6.0 | |
|:----------- | :-------------------: | :--------------------: | :--------------------: | :--------------------: | :-------------------: | :-------------------: |:------------------------------------------------------------------------- |
|ESP32 |![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |![alt text][supported] | |
|ESP32-S2 |![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |![alt text][supported] | |
|ESP32-C3 |![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |![alt text][supported] | |
|ESP32-S3 |![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_S3) |
|ESP32-C2 |![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C2) |
|ESP32-C6 |![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_C6) |
|ESP32-H2 |![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_H2) |
|ESP32-P4 | | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] |![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-P4) |
|ESP32-C5 | | | | | ![alt text][supported] |![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C5) |
|ESP32-C61 | | | | | ![alt text][supported] |![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/products/socs/esp32-c61) |
|ESP32-H4 | | | | | |![alt text][preview] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-H4) |
|芯片 | v5.0 | v5.1 | v5.2 | v5.3 | v5.4 | |
|:----------- | :---------------------:| :--------------------: | :--------------------: | :--------------------: | :--------------------: | :------------------------------------------------------------------------ |
|ESP32 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-C3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_S3) |
|ESP32-C2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C2) |
|ESP32-C6 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_C6) |
|ESP32-H2 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_H2) |
|ESP32-P4 | | | | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-P4) |
|ESP32-C5 | | | | | ![alt text][preview] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C5) |
|ESP32-C61 | | | | | ![alt text][preview] | [芯片发布公告](https://www.espressif.com/zh-hans/products/socs/esp32-c61) |
[supported]: https://img.shields.io/badge/-%E6%94%AF%E6%8C%81-green "supported"
[preview]: https://img.shields.io/badge/-%E9%A2%84%E8%A7%88-orange "preview"
@@ -83,7 +82,7 @@ ESP-IDF 中的子模块采用相对路径([详见 .gitmodules 文件](.gitmodu
## 烧写项目
当构建结束,终端会打印出一条命令行,告知如何使用 `esptool` 工具烧写项目到芯片中。但你也可以运行下面这条命令来自动烧写:
当构建结束,终端会打印出一条命令行,告知如何使用 esptool.py 工具烧写项目到芯片中。但你也可以运行下面这条命令来自动烧写:
`idf.py -p PORT flash`

View File

@@ -1,6 +1,4 @@
# ESP-IDF Project Roadmap2025
* [中文版](./ROADMAP_CN.md)
# ESP-IDF Project Roadmap2024
This document outlines the goals of ESP-IDF project and is shared for the convenience of our customers. It is important to clarify that this document is not a binding commitment to our customers. Instead, its primary purpose is to offer a clear roadmap and direction for the project's development. By openly sharing this information, we aim to enhance our customers' understanding, promote transparency and ensure alignment with the overarching objectives of the ESP-IDF project.
@@ -12,28 +10,32 @@ In both minor and major releases, we integrate new chip support to enhance our p
Furthermore, we prioritize bugfix releases for active branches, focusing on improving the stability and performance of products already in production. By addressing bugs promptly, we aim to enhance the overall user experience and provide tangible benefits to customers relying on our solutions. This proactive maintenance strategy reflects our commitment to delivering reliable, high-quality products to our valued customer base.
Below are the main objectives that ESP-IDF project/teams would like to implement in 2025.
Below are the main objectives that ESP-IDF project/teams would like to implement in 2024.
- New Chip Support
- Add support for ESP32-P4
- Add support for ESP32-C5
- Add support for ESP32-C61
- More Minor/Major Releases
- More Minor Releases
- Release IDF v5.5 in the middle of 2025
- Release IDF v6.0 at the end of 2025
- Release IDF v5.3 in 2024
- Release IDF v5.4 at the start of 2025
- More Bugfix Releases
- Release v5.0.8 and v5.0.9 before ESP-IDF v5.0 goes End of Life in May 2025
- Release v5.1.6 and v5.1.7 before ESP-IDF v5.1 goes End of Life in December 2025
- Do more bugfix releases for IDF v5.2 and IDF v5.3 before release/5.2 and release/5.3 enter maintenance period
- Do more bug fixes releases for release/5.4 and release/5.5, and push the two releases to be more stable and production-ready
- Release v4.4.8 for IDF v4.4 before ESP-IDF v4.4 goes End of Life in July 2024
- Do more bugfix releases for IDF v5.1 before release/5.1 enters maintenance period in June 2024
- Do more bug fixes releases for release/5.2 and release/5.3, and push the two releases to be more stable and production-ready
- Major Changes
- Updates of Libraries
- We plan to upgrade MbedTLS to v4.x series in IDF v6.0. In addition, we will also be migrating to newer PSA crypto API as part of this upgrade. Please note that this may involve some breaking changes on the application side for the crypto API usage.
- Update GDB to 14.2
- Update LLVM to 18.1.2
- Update MbedTLS to 3.6 (LTS)
- Update LWIP to 2.2.0
- Change minimal Python requirement to 3.9
Please note that support status of previous silicones could be found on [ESP-IDF Release and SoC Compatibility](https://github.com/espressif/esp-idf#esp-idf-release-and-soc-compatibility).
@@ -47,84 +49,75 @@ Below are the main roadmap details for functional areas inside ESP-IDF.
- New Chip Support
- Add the initial support for the mass production version of ESP32-C5 in ESP-IDF v5.5, refer to [ESP32-C5 Support Status](https://github.com/espressif/esp-idf/issues/14021)
- Add the initial support for the mass production version of ESP32-C61 in ESP-IDF v5.5, refer to [ESP32-C61 Support Status](https://developer.espressif.com/pages/chip-support-status/esp32c61/#esp-idf)
- Add full support for ESP32-P4 in ESP-IDF v5.3, refer to [ESP32-P4 Support Status](https://github.com/espressif/esp-idf/issues/12996)
- Add preview support for ESP32-C5 in ESP-IDF v5.3 and full support for ESP32-C5 in ESP-IDF v5.4, refer to [ESP32-C5 Support Status](https://github.com/espressif/esp-idf/issues/14021)
- Add preview support for the early samples of ESP32-C61 in ESP-IDF v5.4 and full support for mass production version in ESP-IDF v5.4.x. Refer to [ESP32-C61 Support Status](https://developer.espressif.com/pages/chip-support-status/esp32c61/#esp-idf)
- Bugfix releases
- Do bugfix releases v5.0.8 and v5.0.9 and stop maintaining ESP-IDF v5.0 in May 2025
- Do bugfix releases v5.1.6 and v5.1.7 and stop maintaining ESP-IDF v5.1 in December 2025
- Release bugfix IDF v5.2.4, IDF v5.2.5 and IDF v5.2.6 in 2025, and push release/5.2 to maintenance period from February 2025
- Release bugfix IDF v5.3.3 and IDF v5.3.4 in 2025, and push release/5.3 to maintenance period from July 2025
- Do more bug fixes releases for release/5.4 (IDF v5.4.1, IDF v5.4.2, IDF v5.4.3) and release/5.5 (IDF v5.5.1, IDF v5.5.2), and push releases to be more stable and more production-ready
- Do bugfix release IDF v4.4.8 and stop maintaining ESP-IDF v4.4 in July 2024
- Release bugfix IDF v5.0.6 and IDF v5.0.7 in 2024 (maintenance period)
- Release bugfix IDF v5.1.3 and IDF v5.1.4 in H1 of 2024, and release IDF v5.1.5 in H2 of 2024
- Push release/5.1 to maintenance period from June 2024
- Do more bug fixes releases for release/5.2 (IDF v5.2.1, IDF v5.2.2, IDF v5.2.3) and release/5.3 (IDF v5.3.1, IDF v5.3.2), and push releases to be more stable and more production-ready
## ESP-IDF Planning information
For the full list of ESP-IDF releases, please visit https://github.com/espressif/esp-idf/releases
All the information provided here is subject to change without notice, due to business reasons and other factors.
### ESP-IDF Major Releases
```mermaid
timeline
No Major Releases planned
title ESP-IDF Major Releases
section 2025 Q1 <br> Major Release Planning
No version planned : N/A
section 2025 Q2 <br> Major Release Planning
No version planned : N/A
section 2025 Q3 <br> Major Release Planning
No version planned : N/A
section 2025 Q4 <br> Major Release Planning
v6.0-beta1 : 2025/11/13
v6.0-beta2 : 2025/12/05
v6.0-RC1 : 2026/01/14
v6.0-RC2 : 2026/02/06
v6.0 : 2026/02/13
```
### ESP-IDF Minor Releases
```mermaid
timeline
#### Quarter One
title ESP-IDF Minor Releases
section 2025 Q1 <br> Minor Release Planning
No version planned : N/A
section 2025 Q2 <br> Minor Release Planning
v5.5-beta1 : 2025/05/14
v5.5-beta2 : 2025/06/04
section 2025 Q3 <br> Minor Release Planning
v5.5-RC1 : 2025/07/07
v5.5-RC2 : 2025/07/28
v5.5 : 2025/08/04
section 2025 Q4 <br> Minor Release Planning
No version planned : N/A
```
- v5.2-RC1, estimate release date: 2024/02/02
- v5.2 final release, estimate release date: 2024/02/08
#### Quarter Two
- v5.3-beta1, estimate release date:: 2024/05/13
- v5.3-beta2, estimate release date:: 2024/05/31
- v5.3-RC1, estimate release date:: 2024/07/08
#### Quarter Three
- v5.3-RC2, estimate release date:: 2024/07/26
- v5.3 final release, estimate release date:: 2024/08/02
#### Quarter Four
- v5.4-beta1, estimate release date:: 2024/11/08
- v5.4-beta2, estimate release date:: 2024/11/29
- v5.4-RC1, estimate release date:: 2025/01/09
- v5.4-RC2, estimate release date:: 2025/01/29
- v5.4 final release, estimate release date: 2025/02/05
### ESP-IDF Bugfix Releases
```mermaid
timeline
#### Quarter One
title ESP-IDF Bugfix Releases
section 2025 Q1 <br> Bugfix Release Planning
v5.0.8 : 2025/01/14
v5.1.6 : 2025/02/18
v5.2.4 : 2025/02/23
v5.2.5 : 2025/02/28
v5.4.1 : 2025/03/27
v5.3.3 : 2025/04/04
section 2025 Q2 <br> Bugfix Release Planning
v5.0.9 : 2025/05/16
v5.4.2 : 2025/06/30
section 2025 Q3 <br> Bugfix Release Planning
v5.3.4 : 2025/08/03
v5.2.6 : 2025/09/04
v5.5.1 : 2025/09/11
v5.4.3 : 2025/10/08
section 2025 Q4 <br> Bugfix Release Planning
v5.5.2 : 2025/11/12
v5.1.7 : 2026/01/06
```
- v5.1.3, estimate release date: 2024/02/08
- v5.0.6, estimate release date: 2024/02/18
- v4.4.7, estimate release date:: 2024/03/19
- v5.2.1, estimate release date:: 2024/03/31
#### Quarter Two
- v5.1.4, estimate release date:: 2024/05/06
- v5.2.2, estimate release date:: 2024/06/17
- v4.4.8, estimate release date:: 2024/07/19
#### Quarter Three
- v5.0.7, estimate release date: 2024/08/22
- v5.3.1, estimate release date: 2024/09/16
- v5.2.3, estimate release date: 2024/10/10
#### Quarter Four
- v5.1.5, estimate release date: 2024/11/04 (Maintenance period since June 2024)
- v5.3.2, estimate release date: 2024/12/31
- v5.2.4, estimate release date: 2025/02/20 (Service period ends Feb. 2025)

View File

@@ -1,6 +1,4 @@
# ESP-IDF 项目路线图 2025
* [English Version](./ROADMAP.md)
# ESP-IDF 项目路线图 2024 (v1.0)
本文档概述了 ESP-IDF 项目的年度计划,方便客户据此规划自己的项目周期。需要说明的是该文档并不是我们对客户的约束性承诺。相反,其主要目的是为客户提供 ESP-IDF 项目开发的路线图和方向。通过公开这些信息,我们希望增进客户对 ESP-IDF 项目的理解,提高透明度,并确保与 ESP-IDF 项目的总体目标保持一致。
@@ -12,28 +10,32 @@
此外ESP-IDF 各活跃分支的 Bugfix 版本发布也是我们项目的重中之重,着力提升已量产产品的稳定性和性能。通过及时解决问题,我们期待提升用户的整体体验,切实惠及使用乐鑫解决方案的客户。通过积极维护 ESP-IDF 的各活跃分支,我们践行了对宝贵的客户群提供可靠、高质量产品的承诺。
以下是 ESP-IDF 项目在 2025 年计划实现的主要目标。
以下是 ESP-IDF 项目在 2024 年计划实现的主要目标。
* 新芯片支持
* 增加对 ESP32-P4 芯片的支持
* 增加对 ESP32-C5 芯片的支持
* 增加对 ESP32-C61 芯片的支持
* 发布更多的次要和主要版本
* 发布更多的次要版本
* 在 2025发布 IDF v5.5
* 在 2025 年发布 IDF v6.0
* 在 2024 年发布 IDF v5.3
* 在 2025 年发布 IDF v5.4
* 发布更多 bugfix 版本
* 发布更多 Bugfix 版本
* 在 20255 月底 IDF v5.0 停止维护之前,发布 IDF v5.0.8 和 IDF v5.0.9
* 在 202512 月底 IDF v5.1 停止维护之前,发布 IDF v5.1.6 和 IDF v5.1.7
* release/5.2 分支和 release/5.3 分支进入维护周期之前,发布更多 bugfix 版本
* release/5.4 分支和 release/5.5 分支发布更多 bugfix 版本,使这两个分支更加稳定和产品化
* 在 20247 月底 IDF v4.4 停止维护之前,发布 IDF v4.4.8
* 在 20246 月底release/5.1 分支进入维护周期之前,发布更多 Bugfix 版本
* release/5.2 分支和 release/5.3 分支发布更多 Bugfix 版本,使这两个分支更加稳定和产品化
* 重大变更
* 上游库与工具链的更新
* 我们计划在 IDF v6.0 中将 MbedTLS 版本升级到 v4.x。另外我们还会在升级中迁移到更新版的 PSA 加密 API但请注意这可能会导致应用程序端在使用加密 API 时出现一些非兼容性更新。
* 将 GDB 升级至 14.2
* 将 LLVM 升级至 18.1.2
* 更新 MbedTLS 至 3.6LTS
* 更新 LWIP 至 2.2.0
* 将最低 Python 要求更改为 3.9
请注意,获取之前芯片的支持状态,请参阅 [ESP-IDF 发布和 SoC 兼容性](https://github.com/espressif/esp-idf/blob/master/README_CN.md#esp-idf-与乐鑫芯片)。
@@ -47,84 +49,75 @@ ESP-IDF 项目重视持续维护和更新,确保我们的客户始终处于技
* 新芯片支持
* 在 ESP-IDF v5.4 中为 ESP32-C5 提供预览支持,并在 ESP-IDF v5.5 中为 ESP32-C5 提供完整支持,参考 [ESP32-C5 支持状态](https://github.com/espressif/esp-idf/issues/14021)
* 在 ESP-IDF v5.4增加对 ESP32-C61 早期样品的预览支持,并在 IDF v5.5增加对 ESP32-C61 量产版本的完整支持,参考 [ESP32-C61 支持状态](https://developer.espressif.com/pages/chip-support-status/esp32c61/#esp-idf)
* 在 ESP-IDF v5.3 中为 ESP32-P4 提供完整支持,参考 [ESP32-P4 支持状态](https://github.com/espressif/esp-idf/issues/12996)
* 在 ESP-IDF v5.3 ESP32-C5 提供预览支持,并在 ESP-IDF v5.4 ESP32-C5 提供完整支持,参考 [ESP32-C5 支持状态](https://github.com/espressif/esp-idf/issues/14021)
* 在 ESP-IDF v5.4 中增加对 ESP32-C61 早期样品的预览支持,并在 IDF v5.4.x 中增加对 ESP32-C61 量产版本的完整支持,参考 [ESP32-C61 支持状态](https://developer.espressif.com/pages/chip-support-status/esp32c61/#esp-idf)
* Bugfix 版本发布
* 发布 Bugfix 版本 IDF v5.0.8 和 IDF v5.0.9,并在 20255 月底停止维护 ESP-IDF v5.0
* 发布 Bugfix 版本 IDF v5.1.6 和 IDF v5.1.7,并在 2025 年 12 月底停止维护 ESP-IDF v5.1
* 发布 Bugfix 版本 IDF v5.2.4IDF v5.2.5 和 IDF v5.2.6release/5.2 分支自 2025 2 月进入维护周期
* 发布 Bugfix 版本 IDF v5.3.3 和 IDF v5.3.4release/5.3 分支自 2025 年 7 月进入维护周期
* release/5.4 分支发布更多 bugfix 版本,包括 IDF v5.4.1、IDF v5.4.2、IDF v5.4.3release/5.5 分支发布更多 bugfix 版本,包括 IDF v5.5.1、IDF v5.5.2。通过发布这些 Bugfix 版本,使 release/5.4 分支和 release/5.5 分支更加稳定和产品化。
* 发布 Bugfix 版本 IDF v4.4.8,并在 20247 月底停止维护 ESP-IDF v4.4
* 2024 年release/5.0 分支已处于维护周期,发布 IDF v5.0.6 和 IDF v5.0.7
* 2024 年上半年发布 Bugfix 版本 IDF v5.1.3 和 IDF v5.1.4,并在 2024下半年发布 IDF v5.1.5
* 自 2024 年 6 月起release/5.1 分支进入维护周期
* release/5.2 分支发布更多 Bugfix 版本,包括 IDF v5.2.1、IDF v5.2.2、IDF v5.2.3release/5.3 分支发布更多 Bugfix 版本,包括 IDF v5.3.1、IDF v5.3.2。通过发布这些 Bugfix 版本,使 release/5.2 分支和 release/5.3 分支更加稳定和产品化。
## ESP-IDF 发布计划
获取 ESP-IDF 的完整发布列表,请访问 https://github.com/espressif/esp-idf/releases
此处提供的所有信息均可因业务原因及其他因素而在没有通知的情况下进行更改。
### ESP-IDF 主要版本发布
```mermaid
timeline
2024 年,无主要版本发布计划
title ESP-IDF Major Releases
section 2025 Q1 <br> Major Release Planning
No version planned : N/A
section 2025 Q2 <br> Major Release Planning
No version planned : N/A
section 2025 Q3 <br> Major Release Planning
No version planned : N/A
section 2025 Q4 <br> Major Release Planning
v6.0-beta1 : 2025/11/13
v6.0-beta2 : 2025/12/05
v6.0-RC1 : 2026/01/14
v6.0-RC2 : 2026/02/06
v6.0 : 2026/02/13
```
### ESP-IDF 次要版本发布
```mermaid
timeline
#### 第一季度
title ESP-IDF Minor Releases
section 2025 Q1 <br> Minor Release Planning
No version planned : N/A
section 2025 Q2 <br> Minor Release Planning
v5.5-beta1 : 2025/05/14
v5.5-beta2 : 2025/06/04
section 2025 Q3 <br> Minor Release Planning
v5.5-RC1 : 2025/07/07
v5.5-RC2 : 2025/07/28
v5.5 : 2025/08/04
section 2025 Q4 <br> Minor Release Planning
No version planned : N/A
```
* v5.2-RC1预计发布日期2024/02/02
* v5.2 正式发布预计发布日期2024/02/08
#### 第二季度
* v5.3-beta1预计发布日期2024/05/13
* v5.3-beta2预计发布日期2024/05/31
* v5.3-RC1,预计发布日期:2024/07/08
#### 第三季度
* v5.3-RC2预计发布日期2024/07/26
* v5.3 正式发布预计发布日期2024/08/02
#### 第四季度
* v5.4-beta1预计发布日期2024/11/08
* v5.4-beta2预计发布日期2024/11/29
* v5.4-RC1预计发布日期2025/01/09
* v5.4-RC2预计发布日期2025/01/29
* v5.4 正式发布预计发布日期2025/02/05
### ESP-IDF Bugfix 版本发布
```mermaid
timeline
#### 第一季度
title ESP-IDF Bugfix Releases
section 2025 Q1 <br> Bugfix Release Planning
v5.0.8 : 2025/01/14
v5.1.6 : 2025/02/18
v5.2.4 : 2025/02/23
v5.2.5 : 2025/02/28
v5.4.1 : 2025/03/27
v5.3.3 : 2025/04/04
section 2025 Q2 <br> Bugfix Release Planning
v5.0.9 : 2025/05/16
v5.4.2 : 2025/06/30
section 2025 Q3 <br> Bugfix Release Planning
v5.3.4 : 2025/08/03
v5.2.6 : 2025/09/04
v5.5.1 : 2025/09/11
v5.4.3 : 2025/10/08
section 2025 Q4 <br> Bugfix Release Planning
v5.5.2 : 2025/11/12
v5.1.7 : 2026/01/06
```
* v5.1.3预计发布日期2024/02/08
* v5.0.6预计发布日期2024/02/18
* v4.4.7,预计发布日期:2024/03/19
* v5.2.1,预计发布日期:2024/03/31
#### 第二季度
* v5.1.4,预计发布日期:2024/05/06
* v5.2.2预计发布日期2024/06/17
* v4.4.8,预计发布日期:2024/07/19
#### 第三季度
* v5.0.7,预计发布日期:2024/08/22
* v5.3.1,预计发布日期:2024/09/16
* v5.2.3,预计发布日期:2024/10/10
#### 第四季度
* v5.1.5预计发布日期2024/11/04自 2024 年 6 月进入维护周期)
* v5.3.2预计发布日期2024/12/31
* v5.2.4预计发布日期2025/02/20服务周期截止至 2025 年 2 月)

View File

@@ -10,7 +10,7 @@ The core components are organized into two groups.
The first group (referred to as `G0`) includes `hal`, `arch` (where `arch` is either `riscv` or `xtensa` depending on the chip), `esp_rom`, `esp_common`, and `soc`. This group contains information about and provides low-level access to the underlying hardware. In the case of `esp_common`, it contains hardware-agnostic code and utilities. These components may have dependencies on each other within the group, but outside dependencies should be minimized. The reason for this approach is that these components are fundamental, and many other components may require them. Ideally, the dependency relationship only goes one way, making it easier for this group to be usable in other projects.
The second group (referred to as `G1`) operates at a higher level than the first group. `G1` includes the components `esp_hw_support`, `esp_system`, `esp_libc`, `spi_flash`, `freertos`, `log`, and `heap`. Like the first group, circular dependencies within this group are allowed, and these components can have dependencies on the first group. G1 components represent essential software mechanisms for building other components.
The second group (referred to as `G1`) operates at a higher level than the first group. `G1` includes the components `esp_hw_support`, `esp_system`, `newlib`, `spi_flash`, `freertos`, `log`, and `heap`. Like the first group, circular dependencies within this group are allowed, and these components can have dependencies on the first group. G1 components represent essential software mechanisms for building other components.
## Descriptions
@@ -40,7 +40,7 @@ Example:
#### `esp_common`
Contains hardware-agnostic definitions, constants, macros, utilities, 'pure' and/or algorithmic functions that is usable by all other components (that is, barring there being a more appropriate component to put them in).
Contains hardware-agnostic definitions, constants, macros, utilities, 'pure' and/or algorithmic functions that is useable by all other components (that is, barring there being a more appropriate component to put them in).
Example:
@@ -85,7 +85,7 @@ Logging library.
Heap implementation.
#### `esp_libc`
#### `newlib`
Some functions n the standard library are implemented here, especially those needing other `G1` components.

View File

@@ -4,38 +4,133 @@ if(${target} STREQUAL "linux")
return() # This component is not supported by the POSIX/Linux simulator
endif()
if(CONFIG_ESP_TRACE_TRANSPORT_APPTRACE)
set(srcs
"app_trace.c"
"app_trace_util.c"
"host_file_io.c"
)
if(NOT CONFIG_APPTRACE_DEST_UART) # JTAG or None
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
list(APPEND srcs "port/xtensa/port_jtag.c")
elseif(CONFIG_IDF_TARGET_ARCH_RISCV)
list(APPEND srcs "port/riscv/port_jtag.c")
endif()
list(APPEND srcs "app_trace_membufs_proto.c")
endif()
if(NOT CONFIG_APPTRACE_DEST_JTAG) # UART or None
list(APPEND srcs "port/port_uart.c")
endif()
endif()
set(srcs
"app_trace.c"
"app_trace_util.c"
"host_file_io.c")
if(CONFIG_ESP_DEBUG_STUBS_ENABLE)
list(APPEND srcs "debug_stubs.c")
list(APPEND srcs
"debug_stubs.c")
endif()
if(CONFIG_APPTRACE_GCOV_ENABLE)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
list(APPEND srcs
"gcov/gcov_rtio.c")
else()
fail_at_build_time(app_trace "Only GNU compiler can link with Gcov library")
endif()
endif()
set(include_dirs "include")
set(priv_include_dirs "private_include" "port/include")
if(CONFIG_APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE)
list(APPEND srcs
"app_trace_membufs_proto.c")
if(CONFIG_IDF_TARGET_ARCH_XTENSA)
list(APPEND srcs
"port/xtensa/port.c")
endif()
if(CONFIG_IDF_TARGET_ARCH_RISCV)
list(APPEND srcs
"port/riscv/port.c")
endif()
endif()
list(APPEND srcs
"port/port_uart.c")
if(CONFIG_APPTRACE_SV_ENABLE)
list(APPEND include_dirs
sys_view/Config
sys_view/SEGGER
sys_view/Sample/FreeRTOSV10.4)
list(APPEND srcs
"sys_view/SEGGER/SEGGER_SYSVIEW.c"
"sys_view/Sample/FreeRTOSV10.4/Config/esp/SEGGER_SYSVIEW_Config_FreeRTOS.c"
"sys_view/Sample/FreeRTOSV10.4/SEGGER_SYSVIEW_FreeRTOS.c"
"sys_view/esp/SEGGER_RTT_esp.c"
"sys_view/ext/heap_trace_module.c"
"sys_view/ext/logging.c")
endif()
if(CONFIG_HEAP_TRACING_TOHOST)
list(APPEND srcs "heap_trace_tohost.c")
set_source_files_properties(heap_trace_tohost.c
PROPERTIES COMPILE_FLAGS
-Wno-frame-address)
endif()
idf_component_register(SRCS "${srcs}"
INCLUDE_DIRS "${include_dirs}"
PRIV_INCLUDE_DIRS "${priv_include_dirs}"
PRIV_REQUIRES esp_driver_gptimer
REQUIRES esp_timer esp_driver_uart
PRIV_REQUIRES esp_driver_gptimer esp_driver_gpio esp_driver_uart
REQUIRES esp_timer
LDFRAGMENTS linker.lf)
# Force app_trace to also appear later than gcov in link line
idf_component_get_property(app_trace app_trace COMPONENT_LIB)
if(CONFIG_APPTRACE_GCOV_ENABLE)
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
# Coverage info is not supported when clang is used
# TODO: LLVM-214
message(FATAL_ERROR "Coverage info is not supported when building with Clang!")
endif()
# The original Gcov library from toolchain will be objcopy with symbols redefinitions (see file gcov/io_sym.map).
# This needs because ESP has no file-system onboard, and redefined functions solves this problem and transmits
# output file to host PC.
# Set a name for Gcov library
set(GCOV_LIB libgcov_rtio)
# Set include direcrory of Gcov internal headers
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-file-name=plugin
OUTPUT_VARIABLE gcc_plugin_dir
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
set_source_files_properties(gcov/gcov_rtio.c
PROPERTIES COMPILE_FLAGS "-I${gcc_plugin_dir}/include")
# Copy libgcov.a with symbols redefinition
find_library(GCOV_LIBRARY_PATH gcov ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
add_custom_command(OUTPUT ${GCOV_LIB}.a
COMMAND ${_CMAKE_TOOLCHAIN_PREFIX}objcopy
--redefine-syms ${CMAKE_CURRENT_LIST_DIR}/gcov/io_sym.map
${GCOV_LIBRARY_PATH} ${GCOV_LIB}.a
MAIN_DEPENDENCY ${GCOV_LIBRARY_PATH}
VERBATIM)
add_custom_target(${GCOV_LIB}_target DEPENDS ${GCOV_LIB}.a)
add_library(${GCOV_LIB} STATIC IMPORTED)
set_target_properties(${GCOV_LIB}
PROPERTIES
IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${GCOV_LIB}.a)
add_dependencies(${GCOV_LIB} ${GCOV_LIB}_target)
add_dependencies(${COMPONENT_LIB} ${GCOV_LIB})
# disable --coverage for this component, as it is used as transport for gcov
target_compile_options(${COMPONENT_LIB} PRIVATE "-fno-profile-arcs" "-fno-test-coverage")
target_link_options(${COMPONENT_LIB} INTERFACE "-Wl,--wrap=__gcov_init")
target_link_libraries(${COMPONENT_LIB} INTERFACE ${GCOV_LIB} $<TARGET_FILE:${app_trace}> c)
else()
target_link_libraries(${COMPONENT_LIB} INTERFACE $<TARGET_FILE:${app_trace}> c)
endif()
# This function adds a dependency on the given component if the component is included into the build.
function(maybe_add_component component_name)
idf_build_get_property(components BUILD_COMPONENTS)
if(${component_name} IN_LIST components)
idf_component_get_property(lib_name ${component_name} COMPONENT_LIB)
target_link_libraries(${COMPONENT_LIB} PUBLIC ${lib_name})
endif()
endfunction()
if(CONFIG_APPTRACE_DEST_UART0 OR CONFIG_APPTRACE_DEST_UART1 OR CONFIG_APPTRACE_DEST_UART2)
maybe_add_component(driver)
endif()

View File

@@ -0,0 +1,400 @@
menu "Application Level Tracing"
choice APPTRACE_DESTINATION1
prompt "Data Destination 1"
default APPTRACE_DEST_NONE
help
Select destination for application trace: JTAG or none (to disable).
config APPTRACE_DEST_JTAG
bool "JTAG"
select APPTRACE_DEST_TRAX if IDF_TARGET_ARCH_XTENSA
select APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE
select APPTRACE_ENABLE
config APPTRACE_DEST_NONE
bool "None"
endchoice
config APPTRACE_DEST_UART
bool
config APPTRACE_DEST_UART_NOUSB
bool
choice APPTRACE_DESTINATION2
prompt "Data Destination 2"
default APPTRACE_DEST_UART_NONE
help
Select destination for application trace: UART(XX) or none (to disable).
config APPTRACE_DEST_UART0
bool "UART0"
select APPTRACE_ENABLE
select APPTRACE_DEST_UART
select APPTRACE_DEST_UART_NOUSB
depends on (ESP_CONSOLE_UART_NUM !=0)
config APPTRACE_DEST_UART1
bool "UART1"
select APPTRACE_ENABLE
select APPTRACE_DEST_UART
select APPTRACE_DEST_UART_NOUSB
depends on (ESP_CONSOLE_UART_NUM !=1)
config APPTRACE_DEST_UART2
bool "UART2"
select APPTRACE_ENABLE
select APPTRACE_DEST_UART
select APPTRACE_DEST_UART_NOUSB
depends on (ESP_CONSOLE_UART_NUM !=2) && (SOC_UART_NUM > 2)
config APPTRACE_DEST_USB_CDC
bool "USB_CDC"
select APPTRACE_ENABLE
select APPTRACE_DEST_UART
depends on !ESP_CONSOLE_USB_CDC && (IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3) && !USB_ENABLED
config APPTRACE_DEST_UART_NONE
bool "None"
endchoice
config APPTRACE_UART_TX_GPIO
int "UART TX on GPIO<num>"
depends on APPTRACE_DEST_UART_NOUSB
range 0 46
default 12 if IDF_TARGET_ESP32
default 12 if IDF_TARGET_ESP32C3
default 12
help
This GPIO is used for UART TX pin.
config APPTRACE_UART_RX_GPIO
int "UART RX on GPIO<num>"
depends on APPTRACE_DEST_UART_NOUSB
range 0 46
default 13 if IDF_TARGET_ESP32
default 13 if IDF_TARGET_ESP32C3
default 13
help
This GPIO is used for UART RX pin.
config APPTRACE_UART_BAUDRATE
int
prompt "UART baud rate" if APPTRACE_DEST_UART
depends on APPTRACE_DEST_UART
default 1000000
range 1200 8000000
range 1200 1000000
help
This baud rate is used for UART.
The app's maximum baud rate depends on the UART clock source. If Power Management is disabled,
the UART clock source is the APB clock and all baud rates in the available range will be sufficiently
accurate. If Power Management is enabled, REF_TICK clock source is used so the baud rate is divided
from 1MHz. Baud rates above 1Mbps are not possible and values between 500Kbps and 1Mbps may not be
accurate.
config APPTRACE_UART_RX_BUFF_SIZE
int
prompt "UART RX ring buffer size" if APPTRACE_DEST_UART
depends on APPTRACE_DEST_UART
default 128
range 64 32768
help
Size of the UART input ring buffer.
This size related to the baudrate, system tick frequency and amount of data to transfer.
The data placed to this buffer before sent out to the interface.
config APPTRACE_UART_TX_BUFF_SIZE
int
prompt "UART TX ring buffer size" if APPTRACE_DEST_UART
depends on APPTRACE_DEST_UART
default 4096
range 2048 32768
help
Size of the UART output ring buffer.
This size related to the baudrate, system tick frequency and amount of data to transfer.
config APPTRACE_UART_TX_MSG_SIZE
int
prompt "UART TX message size" if APPTRACE_DEST_UART
depends on APPTRACE_DEST_UART
default 128
range 64 32768
help
Maximum size of the single message to transfer.
config APPTRACE_UART_TASK_PRIO
int
prompt "UART Task Priority" if APPTRACE_DEST_UART
default 1
range 1 32
help
UART task priority. In case of high events rate,
this parameter could be changed up to (configMAX_PRIORITIES-1).
config APPTRACE_DEST_TRAX
bool
depends on IDF_TARGET_ARCH_XTENSA && !ESP32_TRAX && !ESP32S2_TRAX && !ESP32S3_TRAX
select ESP32_MEMMAP_TRACEMEM
select ESP32S2_MEMMAP_TRACEMEM
select ESP32S3_MEMMAP_TRACEMEM
select ESP32_MEMMAP_TRACEMEM_TWOBANKS
select ESP32S2_MEMMAP_TRACEMEM_TWOBANKS
select ESP32S3_MEMMAP_TRACEMEM_TWOBANKS
default n
help
Enables/disable TRAX tracing HW.
config APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE
bool
default n
help
Enables/disable swapping memory buffers tracing protocol.
config APPTRACE_ENABLE
bool
default n
help
Enables/disable application tracing module.
config APPTRACE_LOCK_ENABLE
bool
default !APPTRACE_SV_ENABLE
help
Enables/disable application tracing module internal sync lock.
config APPTRACE_ONPANIC_HOST_FLUSH_TMO
int "Timeout for flushing last trace data to host on panic"
depends on APPTRACE_ENABLE
range -1 5000
default -1
help
Timeout for flushing last trace data to host in case of panic. In ms.
Use -1 to disable timeout and wait forever.
config APPTRACE_POSTMORTEM_FLUSH_THRESH
int "Threshold for flushing last trace data to host on panic"
depends on APPTRACE_ENABLE
range 0 16384
default 0
help
Threshold for flushing last trace data to host on panic in post-mortem mode.
This is minimal amount of data needed to perform flush. In bytes.
config APPTRACE_BUF_SIZE
int "Size of the apptrace buffer"
depends on APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE && !APPTRACE_DEST_TRAX
default 16384
help
Size of the memory buffer for trace data in bytes.
config APPTRACE_PENDING_DATA_SIZE_MAX
int "Size of the pending data buffer"
depends on APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE
default 0
help
Size of the buffer for events in bytes. It is useful for buffering events from
the time critical code (scheduler, ISRs etc). If this parameter is 0 then
events will be discarded when main HW buffer is full.
menu "FreeRTOS SystemView Tracing"
depends on APPTRACE_ENABLE
config APPTRACE_SV_ENABLE
bool "SystemView Tracing Enable"
depends on APPTRACE_ENABLE
default n
help
Enables supporrt for SEGGER SystemView tracing functionality.
choice APPTRACE_SV_DEST
prompt "SystemView destination"
depends on APPTRACE_SV_ENABLE
default APPTRACE_SV_DEST_JTAG
help
SystemView will transfer data through the defined interface.
config APPTRACE_SV_DEST_JTAG
bool "Data destination JTAG"
depends on !PM_ENABLE && !APPTRACE_DEST_NONE
help
Send SEGGER SystemView events through JTAG interface.
config APPTRACE_SV_DEST_UART
bool "Data destination UART"
depends on APPTRACE_DEST_UART
help
Send SEGGER SystemView events through UART interface.
endchoice
choice APPTRACE_SV_CPU
prompt "CPU to trace"
depends on APPTRACE_SV_DEST_UART && !ESP_SYSTEM_SINGLE_CORE_MODE
default APPTRACE_SV_DEST_CPU_0
help
Define the CPU to trace by SystemView.
config APPTRACE_SV_DEST_CPU_0
bool "CPU0"
help
Send SEGGER SystemView events for Pro CPU.
config APPTRACE_SV_DEST_CPU_1
bool "CPU1"
help
Send SEGGER SystemView events for App CPU.
endchoice
choice APPTRACE_SV_TS_SOURCE
prompt "Timer to use as timestamp source"
depends on APPTRACE_SV_ENABLE
default APPTRACE_SV_TS_SOURCE_CCOUNT if ESP_SYSTEM_SINGLE_CORE_MODE && !PM_ENABLE && !IDF_TARGET_ESP32C3
default APPTRACE_SV_TS_SOURCE_GPTIMER if !ESP_SYSTEM_SINGLE_CORE_MODE && !PM_ENABLE && !IDF_TARGET_ESP32C3
default APPTRACE_SV_TS_SOURCE_ESP_TIMER if PM_ENABLE || IDF_TARGET_ESP32C3
help
SystemView needs to use a hardware timer as the source of timestamps
when tracing. This option selects the timer for it.
config APPTRACE_SV_TS_SOURCE_CCOUNT
bool "CPU cycle counter (CCOUNT)"
depends on ESP_SYSTEM_SINGLE_CORE_MODE && !PM_ENABLE && !IDF_TARGET_ESP32C3
config APPTRACE_SV_TS_SOURCE_GPTIMER
bool "General Purpose Timer (Timer Group)"
depends on !PM_ENABLE && !IDF_TARGET_ESP32C3
config APPTRACE_SV_TS_SOURCE_ESP_TIMER
bool "esp_timer high resolution timer"
endchoice
config APPTRACE_SV_MAX_TASKS
int "Maximum supported tasks"
depends on APPTRACE_SV_ENABLE
range 1 64
default 16
help
Configures maximum supported tasks in sysview debug
config APPTRACE_SV_BUF_WAIT_TMO
int "Trace buffer wait timeout"
depends on APPTRACE_SV_ENABLE
default 500
help
Configures timeout (in us) to wait for free space in trace buffer.
Set to -1 to wait forever and avoid lost events.
config APPTRACE_SV_EVT_OVERFLOW_ENABLE
bool "Trace Buffer Overflow Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "Trace Buffer Overflow" event.
config APPTRACE_SV_EVT_ISR_ENTER_ENABLE
bool "ISR Enter Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "ISR Enter" event.
config APPTRACE_SV_EVT_ISR_EXIT_ENABLE
bool "ISR Exit Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "ISR Exit" event.
config APPTRACE_SV_EVT_ISR_TO_SCHED_ENABLE
bool "ISR Exit to Scheduler Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "ISR to Scheduler" event.
config APPTRACE_SV_EVT_TASK_START_EXEC_ENABLE
bool "Task Start Execution Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "Task Start Execution" event.
config APPTRACE_SV_EVT_TASK_STOP_EXEC_ENABLE
bool "Task Stop Execution Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "Task Stop Execution" event.
config APPTRACE_SV_EVT_TASK_START_READY_ENABLE
bool "Task Start Ready State Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "Task Start Ready State" event.
config APPTRACE_SV_EVT_TASK_STOP_READY_ENABLE
bool "Task Stop Ready State Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "Task Stop Ready State" event.
config APPTRACE_SV_EVT_TASK_CREATE_ENABLE
bool "Task Create Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "Task Create" event.
config APPTRACE_SV_EVT_TASK_TERMINATE_ENABLE
bool "Task Terminate Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "Task Terminate" event.
config APPTRACE_SV_EVT_IDLE_ENABLE
bool "System Idle Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "System Idle" event.
config APPTRACE_SV_EVT_TIMER_ENTER_ENABLE
bool "Timer Enter Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "Timer Enter" event.
config APPTRACE_SV_EVT_TIMER_EXIT_ENABLE
bool "Timer Exit Event"
depends on APPTRACE_SV_ENABLE
default y
help
Enables "Timer Exit" event.
endmenu
config APPTRACE_GCOV_ENABLE
bool "GCOV to Host Enable"
depends on APPTRACE_ENABLE && !APPTRACE_SV_ENABLE
select ESP_DEBUG_STUBS_ENABLE
default n
help
Enables support for GCOV data transfer to host.
config APPTRACE_GCOV_DUMP_TASK_STACK_SIZE
int "Gcov dump task stack size"
depends on APPTRACE_GCOV_ENABLE
default 2048
help
Configures stack size of Gcov dump task
endmenu

View File

@@ -1,134 +0,0 @@
menu "Application Level Tracing"
depends on ESP_TRACE_TRANSPORT_APPTRACE
choice APPTRACE_DESTINATION
prompt "Data Destination"
default APPTRACE_DEST_JTAG if !PM_ENABLE
default APPTRACE_DEST_UART if PM_ENABLE
help
Select destination for application trace: JTAG, UART, or both.
config APPTRACE_DEST_JTAG
bool "JTAG"
select APPTRACE_TRAX_ENABLE if IDF_TARGET_ARCH_XTENSA
depends on !PM_ENABLE
config APPTRACE_DEST_UART
bool "UART"
config APPTRACE_DEST_ALL
bool "All (runtime selection)"
help
Compile both JTAG and UART interfaces in advance (higher IRAM usage).
Allows runtime switching between JTAG and UART via esp_apptrace_get_user_params().
If esp_apptrace_get_user_params() is not provided by the
application, JTAG is used by default with the default
configuration defined in components/app_trace/include/esp_app_trace_config.h.
endchoice
config APPTRACE_BUF_SIZE
int "Size of the apptrace buffer"
depends on APPTRACE_DEST_JTAG && !APPTRACE_TRAX_ENABLE
default 16384
help
Size of the memory buffer for trace data in bytes.
config APPTRACE_DEST_UART_NUM
int "UART port number"
depends on APPTRACE_DEST_UART
range 0 1 if (SOC_UART_HP_NUM <= 2)
range 0 2 if (SOC_UART_HP_NUM <= 3)
range 0 4 if (SOC_UART_HP_NUM <= 5)
default 1
help
UART communication port number for the apptrace destination.
See UART documentation for available port numbers.
config APPTRACE_UART_TX_GPIO
int "UART TX on GPIO<num>"
depends on APPTRACE_DEST_UART
range 0 46
default 12
help
This GPIO is used for UART TX pin.
config APPTRACE_UART_RX_GPIO
int "UART RX on GPIO<num>"
depends on APPTRACE_DEST_UART
range 0 46
default 13
help
This GPIO is used for UART RX pin.
config APPTRACE_UART_BAUDRATE
int
prompt "UART baud rate" if APPTRACE_DEST_UART
depends on APPTRACE_DEST_UART
default 1000000
range 1200 8000000
range 1200 1000000
help
This baud rate is used for UART.
The app's maximum baud rate depends on the UART clock source. If Power Management is disabled,
the UART clock source is the APB clock and all baud rates in the available range will be sufficiently
accurate. If Power Management is enabled, REF_TICK clock source is used so the baud rate is divided
from 1MHz. Baud rates above 1Mbps are not possible and values between 500Kbps and 1Mbps may not be
accurate.
config APPTRACE_UART_TX_BUFF_SIZE
int
prompt "UART TX ring buffer size" if APPTRACE_DEST_UART
depends on APPTRACE_DEST_UART
default 4096
range 2048 32768
help
Size of the UART output ring buffer. Must be power of two.
This size related to the baudrate, system tick frequency and amount of data to transfer.
config APPTRACE_UART_TX_MSG_SIZE
int
prompt "UART TX message size" if APPTRACE_DEST_UART
depends on APPTRACE_DEST_UART
default 128
range 64 32768
help
Maximum size of the single message to transfer.
config APPTRACE_TRAX_ENABLE
bool
depends on IDF_TARGET_ARCH_XTENSA && !ESP32_TRAX && !ESP32S2_TRAX && !ESP32S3_TRAX
select ESP32_MEMMAP_TRACEMEM
select ESP32S2_MEMMAP_TRACEMEM
select ESP32S3_MEMMAP_TRACEMEM
select ESP32_MEMMAP_TRACEMEM_TWOBANKS
select ESP32S2_MEMMAP_TRACEMEM_TWOBANKS
select ESP32S3_MEMMAP_TRACEMEM_TWOBANKS
default n
help
Enables/disable TRAX tracing HW.
config APPTRACE_LOCK_ENABLE
bool "Internal Sync Lock Enable"
default n
help
Enables/disable application tracing module internal sync lock to prevent data corruption
when multiple tasks are writing to the same trace buffer.
Keep in mind this will slow down the trace data transfer to the host.
config APPTRACE_ONPANIC_HOST_FLUSH_TMO
int "Timeout for flushing last trace data to host on panic"
range -1 5000
default -1
help
Timeout for flushing last trace data to host in case of panic. In ms.
Use -1 to disable timeout and wait forever.
config APPTRACE_POSTMORTEM_FLUSH_THRESH
int "Threshold for flushing last trace data to host on panic"
range 0 16384
default 0
help
Threshold for flushing last trace data to host on panic in post-mortem mode.
This is minimal amount of data needed to perform flush. In bytes.
endmenu

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2017-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*/
@@ -7,14 +7,20 @@
#include <string.h>
#include "esp_cpu.h"
#include "esp_log.h"
#include "esp_rom_sys.h"
#include "esp_app_trace.h"
#include "esp_app_trace_port.h"
#include "esp_app_trace_types.h"
#include "esp_private/startup_internal.h"
#if CONFIG_ESP_CONSOLE_UART && CONFIG_APPTRACE_DEST_UART && (CONFIG_APPTRACE_DEST_UART_NUM == CONFIG_ESP_CONSOLE_UART_NUM)
#error "Application trace UART and console UART cannot use the same port number"
#ifdef CONFIG_APPTRACE_DEST_UART0
#define ESP_APPTRACE_DEST_UART_NUM 0
#elif CONFIG_APPTRACE_DEST_UART1
#define ESP_APPTRACE_DEST_UART_NUM 1
#elif CONFIG_APPTRACE_DEST_UART2
#define ESP_APPTRACE_DEST_UART_NUM 2
#elif CONFIG_APPTRACE_DEST_USB_CDC
#define ESP_APPTRACE_DEST_UART_NUM 10
#else
#define ESP_APPTRACE_DEST_UART_NUM 0
#endif
#define ESP_APPTRACE_MAX_VPRINTF_ARGS 256
@@ -26,205 +32,263 @@ const static char *TAG = "esp_apptrace";
typedef struct {
esp_apptrace_hw_t *hw;
void *hw_data;
esp_apptrace_dest_t dest;
} esp_apptrace_channel_t;
static esp_apptrace_channel_t s_trace_ch;
static volatile int s_trace_ch_hw_initialized = 0;
static esp_apptrace_channel_t s_trace_channels[ESP_APPTRACE_DEST_MAX];
static bool s_inited;
esp_err_t esp_apptrace_init(const esp_apptrace_config_t *config)
esp_err_t esp_apptrace_init(void)
{
__attribute__((unused)) void *hw_data = NULL;
int res;
esp_apptrace_hw_t *hw = NULL;
void *hw_data = NULL;
// 'esp_apptrace_init()' is called on every core, so ensure to do main initialization only once
if (esp_cpu_get_core_id() == 0) {
#if CONFIG_APPTRACE_DEST_JTAG
s_trace_ch.hw = esp_apptrace_jtag_hw_get(&hw_data);
s_trace_ch.hw_data = hw_data;
#elif CONFIG_APPTRACE_DEST_UART
const esp_apptrace_uart_config_t *uart_config = &config->dest_cfg.uart;
s_trace_ch.hw = esp_apptrace_uart_hw_get(uart_config->uart_num, &hw_data);
s_trace_ch.hw_data = hw_data;
#else // CONFIG_APPTRACE_DEST_ALL allows runtime selection between destinations
if (config->dest == ESP_APPTRACE_DEST_JTAG) {
s_trace_ch.hw = esp_apptrace_jtag_hw_get(&hw_data);
s_trace_ch.hw_data = hw_data;
} else if (config->dest == ESP_APPTRACE_DEST_UART) {
const esp_apptrace_uart_config_t *uart_config = &config->dest_cfg.uart;
s_trace_ch.hw = esp_apptrace_uart_hw_get(uart_config->uart_num, &hw_data);
s_trace_ch.hw_data = hw_data;
} else {
s_trace_ch.hw = NULL;
s_trace_ch.hw_data = NULL;
ESP_APPTRACE_LOGE("Invalid destination type (%d)!", config->dest);
return ESP_ERR_INVALID_ARG;
memset(&s_trace_channels, 0, sizeof(s_trace_channels));
hw = esp_apptrace_jtag_hw_get(&hw_data);
ESP_APPTRACE_LOGD("HW interface %p", hw);
if (hw != NULL) {
s_trace_channels[ESP_APPTRACE_DEST_JTAG].hw = hw;
s_trace_channels[ESP_APPTRACE_DEST_JTAG].hw_data = hw_data;
}
hw = esp_apptrace_uart_hw_get(ESP_APPTRACE_DEST_UART_NUM, &hw_data);
if (hw != NULL) {
s_trace_channels[ESP_APPTRACE_DEST_UART].hw = hw;
s_trace_channels[ESP_APPTRACE_DEST_UART].hw_data = hw_data;
}
s_inited = true;
}
// esp_apptrace_init() is called on every core, so initialize trace channel on every core
for (int i = 0; i < sizeof(s_trace_channels) / sizeof(s_trace_channels[0]); i++) {
esp_apptrace_channel_t *ch = &s_trace_channels[i];
if (ch->hw) {
res = ch->hw->init(ch->hw_data);
if (res != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to init trace channel HW interface (%d)!", res);
return res;
}
}
}
return ESP_OK;
}
ESP_SYSTEM_INIT_FN(esp_apptrace_init, SECONDARY, ESP_SYSTEM_INIT_ALL_CORES, 115)
{
return esp_apptrace_init();
}
void esp_apptrace_down_buffer_config(uint8_t *buf, uint32_t size)
{
esp_apptrace_channel_t *ch;
if (!s_inited) {
return;
}
// currently down buffer is supported for JTAG interface only
// TODO: one more argument should be added to this function to specify HW interface: JTAG, UART0 etc
ch = &s_trace_channels[ESP_APPTRACE_DEST_JTAG];
if (ch->hw != NULL) {
if (ch->hw->down_buffer_config != NULL) {
ch->hw->down_buffer_config(ch->hw_data, buf, size);
}
#endif
s_trace_ch.dest = config->dest;
s_trace_ch_hw_initialized = 1;
} else {
// There is NO guarantee that system init functions will execute on core 0 first
// So we need to wait for core 0 to set up the hardware interface
while (!s_trace_ch_hw_initialized) {
esp_rom_delay_us(10);
}
ESP_APPTRACE_LOGD("Trace destination for JTAG not supported!");
}
if (s_trace_ch.hw) {
int res = s_trace_ch.hw->init(s_trace_ch.hw_data, config);
if (res != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to init trace channel HW interface (%d)!", res);
return res;
ch = &s_trace_channels[ESP_APPTRACE_DEST_UART];
if (ch->hw != NULL) {
if (ch->hw->down_buffer_config != NULL) {
ch->hw->down_buffer_config(ch->hw_data, buf, size);
}
} else {
ESP_APPTRACE_LOGD("Trace destination for UART not supported!");
}
return ESP_OK;
}
esp_err_t esp_apptrace_down_buffer_config(uint8_t *buf, uint32_t size)
uint8_t *esp_apptrace_down_buffer_get(esp_apptrace_dest_t dest, uint32_t *size, uint32_t user_tmo)
{
if (!buf || size == 0) {
return ESP_ERR_INVALID_ARG;
}
if (!s_trace_ch.hw) {
return ESP_ERR_INVALID_STATE;
}
if (s_trace_ch.hw->down_buffer_config) {
s_trace_ch.hw->down_buffer_config(s_trace_ch.hw_data, buf, size);
}
return ESP_OK;
}
uint8_t *esp_apptrace_down_buffer_get(uint32_t *size, uint32_t user_tmo)
{
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (!size || *size == 0) {
return NULL;
}
if (!s_trace_ch.hw) {
return NULL;
}
if (!s_trace_ch.hw->get_down_buffer) {
return NULL;
}
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, user_tmo);
esp_apptrace_channel_t *ch;
return s_trace_ch.hw->get_down_buffer(s_trace_ch.hw_data, size, &tmo);
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (dest >= ESP_APPTRACE_DEST_MAX) {
return NULL;
}
if (size == NULL || *size == 0) {
return NULL;
}
if (!s_inited) {
return NULL;
}
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return NULL;
}
if (ch->hw->get_down_buffer == NULL) {
return NULL;
}
esp_apptrace_tmo_init(&tmo, user_tmo);
return ch->hw->get_down_buffer(ch->hw_data, size, &tmo);
}
esp_err_t esp_apptrace_down_buffer_put(uint8_t *ptr, uint32_t user_tmo)
esp_err_t esp_apptrace_down_buffer_put(esp_apptrace_dest_t dest, uint8_t *ptr, uint32_t user_tmo)
{
ESP_APPTRACE_LOGV("%s(): enter", __func__);
esp_apptrace_tmo_t tmo;
esp_apptrace_channel_t *ch;
if (!ptr) {
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (dest >= ESP_APPTRACE_DEST_MAX) {
return ESP_ERR_INVALID_ARG;
}
if (!s_trace_ch.hw) {
if (ptr == NULL) {
return ESP_ERR_INVALID_ARG;
}
if (!s_inited) {
return ESP_ERR_INVALID_STATE;
}
if (!s_trace_ch.hw->get_down_buffer) {
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return ESP_ERR_NOT_SUPPORTED;
}
if (ch->hw->get_down_buffer == NULL) {
return ESP_ERR_NOT_SUPPORTED;
}
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, user_tmo);
return s_trace_ch.hw->put_down_buffer(s_trace_ch.hw_data, ptr, &tmo);
return ch->hw->put_down_buffer(ch->hw_data, ptr, &tmo);
}
esp_err_t esp_apptrace_read(void *buf, uint32_t *size, uint32_t user_tmo)
esp_err_t esp_apptrace_read(esp_apptrace_dest_t dest, void *buf, uint32_t *size, uint32_t user_tmo)
{
ESP_APPTRACE_LOGV("%s(): enter", __func__);
int res = ESP_OK;
esp_apptrace_tmo_t tmo;
esp_apptrace_channel_t *ch;
if (!buf || !size || *size == 0) {
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (dest >= ESP_APPTRACE_DEST_MAX) {
return ESP_ERR_INVALID_ARG;
}
if (!s_trace_ch.hw) {
if (buf == NULL || size == NULL || *size == 0) {
return ESP_ERR_INVALID_ARG;
}
if (!s_inited) {
return ESP_ERR_INVALID_STATE;
}
if (!s_trace_ch.hw->get_down_buffer || !s_trace_ch.hw->put_down_buffer) {
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return ESP_ERR_NOT_SUPPORTED;
}
if (ch->hw->get_down_buffer == NULL || ch->hw->put_down_buffer == NULL) {
return ESP_ERR_NOT_SUPPORTED;
}
//TODO: callback system
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, user_tmo);
uint32_t act_sz = *size;
*size = 0;
uint8_t *ptr = s_trace_ch.hw->get_down_buffer(s_trace_ch.hw_data, &act_sz, &tmo);
uint8_t *ptr = ch->hw->get_down_buffer(ch->hw_data, &act_sz, &tmo);
if (ptr && act_sz > 0) {
ESP_APPTRACE_LOGD("Read %" PRIu32 " bytes from host", act_sz);
memcpy(buf, ptr, act_sz);
res = ch->hw->put_down_buffer(ch->hw_data, ptr, &tmo);
*size = act_sz;
return s_trace_ch.hw->put_down_buffer(s_trace_ch.hw_data, ptr, &tmo);
} else {
res = ESP_ERR_TIMEOUT;
}
return ESP_ERR_TIMEOUT;
return res;
}
uint8_t *esp_apptrace_buffer_get(uint32_t size, uint32_t user_tmo)
uint8_t *esp_apptrace_buffer_get(esp_apptrace_dest_t dest, uint32_t size, uint32_t user_tmo)
{
ESP_APPTRACE_LOGV("%s(): enter", __func__);
esp_apptrace_tmo_t tmo;
esp_apptrace_channel_t *ch;
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (dest >= ESP_APPTRACE_DEST_MAX) {
return NULL;
}
if (size == 0) {
return NULL;
}
if (!s_trace_ch.hw) {
if (!s_inited) {
return NULL;
}
if (!s_trace_ch.hw->get_up_buffer) {
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return NULL;
}
if (ch->hw->get_up_buffer == NULL) {
return NULL;
}
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, user_tmo);
return s_trace_ch.hw->get_up_buffer(s_trace_ch.hw_data, size, &tmo);
return ch->hw->get_up_buffer(ch->hw_data, size, &tmo);
}
esp_err_t esp_apptrace_buffer_put(uint8_t *ptr, uint32_t user_tmo)
esp_err_t esp_apptrace_buffer_put(esp_apptrace_dest_t dest, uint8_t *ptr, uint32_t user_tmo)
{
ESP_APPTRACE_LOGV("%s(): enter", __func__);
esp_apptrace_tmo_t tmo;
esp_apptrace_channel_t *ch;
if (!ptr) {
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (dest >= ESP_APPTRACE_DEST_MAX) {
return ESP_ERR_INVALID_ARG;
}
if (!s_trace_ch.hw) {
if (ptr == NULL) {
return ESP_ERR_INVALID_ARG;
}
if (!s_inited) {
return ESP_ERR_INVALID_STATE;
}
if (!s_trace_ch.hw->put_up_buffer) {
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return ESP_ERR_NOT_SUPPORTED;
}
if (ch->hw->put_up_buffer == NULL) {
return ESP_ERR_NOT_SUPPORTED;
}
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, user_tmo);
return s_trace_ch.hw->put_up_buffer(s_trace_ch.hw_data, ptr, &tmo);
return ch->hw->put_up_buffer(ch->hw_data, ptr, &tmo);
}
esp_err_t esp_apptrace_write(const void *data, uint32_t size, uint32_t user_tmo)
esp_err_t esp_apptrace_write(esp_apptrace_dest_t dest, const void *data, uint32_t size, uint32_t user_tmo)
{
ESP_APPTRACE_LOGV("%s(): enter", __func__);
uint8_t *ptr = NULL;
esp_apptrace_tmo_t tmo;
esp_apptrace_channel_t *ch;
if (!data || size == 0) {
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (dest >= ESP_APPTRACE_DEST_MAX) {
return ESP_ERR_INVALID_ARG;
}
if (!s_trace_ch.hw) {
if (data == NULL || size == 0) {
return ESP_ERR_INVALID_ARG;
}
if (!s_inited) {
return ESP_ERR_INVALID_STATE;
}
if (!s_trace_ch.hw->get_up_buffer || !s_trace_ch.hw->put_up_buffer) {
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return ESP_ERR_NOT_SUPPORTED;
}
if (ch->hw->get_up_buffer == NULL || ch->hw->put_up_buffer == NULL) {
return ESP_ERR_NOT_SUPPORTED;
}
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, user_tmo);
uint8_t *ptr = s_trace_ch.hw->get_up_buffer(s_trace_ch.hw_data, size, &tmo);
if (!ptr) {
ptr = ch->hw->get_up_buffer(ch->hw_data, size, &tmo);
if (ptr == NULL) {
return ESP_ERR_NO_MEM;
}
@@ -233,29 +297,36 @@ esp_err_t esp_apptrace_write(const void *data, uint32_t size, uint32_t user_tmo)
memcpy(ptr, data, size);
// now indicate that this buffer is ready to be sent off to host
return s_trace_ch.hw->put_up_buffer(s_trace_ch.hw_data, ptr, &tmo);
return ch->hw->put_up_buffer(ch->hw_data, ptr, &tmo);
}
int esp_apptrace_vprintf_to(uint32_t user_tmo, const char *fmt, va_list ap)
int esp_apptrace_vprintf_to(esp_apptrace_dest_t dest, uint32_t user_tmo, const char *fmt, va_list ap)
{
uint16_t nargs = 0;
uint8_t *pout, *p = (uint8_t *)fmt;
esp_apptrace_tmo_t tmo;
esp_apptrace_channel_t *ch;
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (!fmt) {
if (dest >= ESP_APPTRACE_DEST_MAX) {
return -1;
}
if (!s_trace_ch.hw) {
if (fmt == NULL) {
return -1;
}
if (!s_trace_ch.hw->get_up_buffer || !s_trace_ch.hw->put_up_buffer) {
if (!s_inited) {
return -1;
}
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return -1;
}
if (ch->hw->get_up_buffer == NULL || ch->hw->put_up_buffer == NULL) {
return -1;
}
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, user_tmo);
ESP_APPTRACE_LOGD("fmt %p", fmt);
while ((p = (uint8_t *)strchr((char *)p, '%')) && nargs < ESP_APPTRACE_MAX_VPRINTF_ARGS) {
p++;
@@ -268,8 +339,8 @@ int esp_apptrace_vprintf_to(uint32_t user_tmo, const char *fmt, va_list ap)
ESP_APPTRACE_LOGE("Failed to store all printf args!");
}
pout = s_trace_ch.hw->get_up_buffer(s_trace_ch.hw_data, 1 + sizeof(char *) + nargs * sizeof(uint32_t), &tmo);
if (!pout) {
pout = ch->hw->get_up_buffer(ch->hw_data, 1 + sizeof(char *) + nargs * sizeof(uint32_t), &tmo);
if (pout == NULL) {
ESP_APPTRACE_LOGE("Failed to get buffer!");
return -1;
}
@@ -285,7 +356,7 @@ int esp_apptrace_vprintf_to(uint32_t user_tmo, const char *fmt, va_list ap)
ESP_APPTRACE_LOGD("arg %" PRIx32, arg);
}
int ret = s_trace_ch.hw->put_up_buffer(s_trace_ch.hw_data, p, &tmo);
int ret = ch->hw->put_up_buffer(ch->hw_data, p, &tmo);
if (ret != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to put printf buf (%d)!", ret);
return -1;
@@ -296,87 +367,85 @@ int esp_apptrace_vprintf_to(uint32_t user_tmo, const char *fmt, va_list ap)
int esp_apptrace_vprintf(const char *fmt, va_list ap)
{
return esp_apptrace_vprintf_to(0, fmt, ap);
return esp_apptrace_vprintf_to(ESP_APPTRACE_DEST_JTAG, 0, fmt, ap);
}
esp_err_t esp_apptrace_flush_nolock(uint32_t min_sz, uint32_t usr_tmo)
esp_err_t esp_apptrace_flush_nolock(esp_apptrace_dest_t dest, uint32_t min_sz, uint32_t usr_tmo)
{
ESP_APPTRACE_LOGV("%s(): enter", __func__);
esp_apptrace_tmo_t tmo;
esp_apptrace_channel_t *ch;
if (!s_trace_ch.hw) {
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (dest >= ESP_APPTRACE_DEST_MAX) {
return ESP_ERR_INVALID_ARG;
}
if (!s_inited) {
return ESP_ERR_INVALID_STATE;
}
if (!s_trace_ch.hw->flush_up_buffer_nolock) {
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return ESP_ERR_NOT_SUPPORTED;
}
if (ch->hw->flush_up_buffer_nolock == NULL) {
return ESP_ERR_NOT_SUPPORTED;
}
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, usr_tmo);
return s_trace_ch.hw->flush_up_buffer_nolock(s_trace_ch.hw_data, min_sz, &tmo);
return ch->hw->flush_up_buffer_nolock(ch->hw_data, min_sz, &tmo);
}
esp_err_t esp_apptrace_flush(uint32_t usr_tmo)
esp_err_t esp_apptrace_flush(esp_apptrace_dest_t dest, uint32_t usr_tmo)
{
ESP_APPTRACE_LOGV("%s(): enter", __func__);
esp_apptrace_tmo_t tmo;
esp_apptrace_channel_t *ch;
if (!s_trace_ch.hw) {
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (dest >= ESP_APPTRACE_DEST_MAX) {
return ESP_ERR_INVALID_ARG;
}
if (!s_inited) {
return ESP_ERR_INVALID_STATE;
}
if (!s_trace_ch.hw->flush_up_buffer) {
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return ESP_ERR_NOT_SUPPORTED;
}
if (ch->hw->flush_up_buffer == NULL) {
return ESP_ERR_NOT_SUPPORTED;
}
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, usr_tmo);
return s_trace_ch.hw->flush_up_buffer(s_trace_ch.hw_data, &tmo);
return ch->hw->flush_up_buffer(ch->hw_data, &tmo);
}
bool esp_apptrace_host_is_connected(void)
bool esp_apptrace_host_is_connected(esp_apptrace_dest_t dest)
{
esp_apptrace_channel_t *ch;
ESP_APPTRACE_LOGV("%s(): enter", __func__);
if (!s_trace_ch.hw) {
if (dest >= ESP_APPTRACE_DEST_MAX) {
return false;
}
if (!s_trace_ch.hw->host_is_connected) {
if (!s_inited) {
return false;
}
ch = &s_trace_channels[dest];
if (ch->hw == NULL) {
ESP_APPTRACE_LOGE("Trace destination %d not supported!", dest);
return false;
}
if (ch->hw->host_is_connected == NULL) {
return false;
}
return s_trace_ch.hw->host_is_connected(s_trace_ch.hw_data);
return ch->hw->host_is_connected(ch->hw_data);
}
esp_apptrace_dest_t esp_apptrace_get_destination(void)
#if !CONFIG_APPTRACE_DEST_JTAG
esp_apptrace_hw_t *esp_apptrace_jtag_hw_get(void **data)
{
return s_trace_ch.dest;
}
esp_err_t esp_apptrace_set_header_size(esp_apptrace_header_size_t header_size)
{
if (!s_trace_ch.hw) {
return ESP_ERR_INVALID_STATE;
}
if (s_trace_ch.hw->set_header_size) {
s_trace_ch.hw->set_header_size(s_trace_ch.hw_data, header_size);
}
return ESP_OK;
}
/* If any trace library (sysview or external) is selected with the apptrace transport,
* initialization will be handled by the esp_trace component
*/
#if CONFIG_ESP_TRACE_LIB_NONE && CONFIG_ESP_TRACE_TRANSPORT_APPTRACE
esp_apptrace_config_t __attribute__((weak)) esp_apptrace_get_user_params(void)
{
esp_apptrace_config_t default_config = APPTRACE_CONFIG_DEFAULT();
return default_config;
}
ESP_SYSTEM_INIT_FN(apptrace_early_init, SECONDARY, ESP_SYSTEM_INIT_ALL_CORES, 115)
{
esp_apptrace_config_t config = esp_apptrace_get_user_params();
return esp_apptrace_init(&config);
return NULL;
}
#endif

View File

@@ -18,16 +18,13 @@
* In this case host SW will see that wr_sz < block_sz and will report error.
*/
typedef struct {
union {
struct {
uint8_t block_sz_8;
uint8_t wr_sz_8;
};
struct {
uint16_t block_sz_16;
uint16_t wr_sz_16;
};
};
#if CONFIG_APPTRACE_SV_ENABLE
uint8_t block_sz; // size of allocated block for user data
uint8_t wr_sz; // size of actually written data
#else
uint16_t block_sz; // size of allocated block for user data
uint16_t wr_sz; // size of actually written data
#endif
} esp_tracedata_hdr_t;
/** TODO: docs
@@ -36,29 +33,41 @@ typedef struct {
uint16_t block_sz; // size of allocated block for user data
} esp_hostdata_hdr_t;
#define ESP_APPTRACE_INBLOCK_MARKER(_hw_data_) \
((_hw_data_)->state.markers[(_hw_data_)->state.in_block % 2])
#if CONFIG_APPTRACE_SV_ENABLE
#define ESP_APPTRACE_USR_BLOCK_CORE(_cid_) (0)
#define ESP_APPTRACE_USR_BLOCK_LEN(_v_) (_v_)
#define ESP_APPTRACE_USR_DATA_LEN_MAX(_hw_data_) 255UL
#else
#define ESP_APPTRACE_USR_BLOCK_CORE(_cid_) ((_cid_) << 15)
#define ESP_APPTRACE_USR_BLOCK_LEN(_v_) (~(1 << 15) & (_v_))
#define ESP_APPTRACE_USR_DATA_LEN_MAX(_hw_data_) (ESP_APPTRACE_INBLOCK(_hw_data_)->sz - sizeof(esp_tracedata_hdr_t))
#endif
#define ESP_APPTRACE_USR_BLOCK_RAW_SZ(_s_) ((_s_) + sizeof(esp_tracedata_hdr_t))
#define ESP_APPTRACE_INBLOCK(_hw_data_) \
(&(_hw_data_)->blocks[(_hw_data_)->state.in_block % 2])
#define ESP_APPTRACE_INBLOCK_MARKER(_hw_data_) ((_hw_data_)->state.markers[(_hw_data_)->state.in_block % 2])
#define ESP_APPTRACE_INBLOCK_MARKER_UPD(_hw_data_, _v_) do {(_hw_data_)->state.markers[(_hw_data_)->state.in_block % 2] += (_v_);}while(0)
#define ESP_APPTRACE_INBLOCK(_hw_data_) (&(_hw_data_)->blocks[(_hw_data_)->state.in_block % 2])
const static char *TAG = "esp_apptrace";
static uint32_t esp_apptrace_membufs_down_buffer_write_nolock(esp_apptrace_membufs_proto_data_t *proto,
uint8_t *data, uint32_t size);
static uint32_t esp_apptrace_membufs_down_buffer_write_nolock(esp_apptrace_membufs_proto_data_t *proto, uint8_t *data, uint32_t size);
esp_err_t esp_apptrace_membufs_init(esp_apptrace_membufs_proto_data_t *proto,
const esp_apptrace_mem_block_t blocks_cfg[2])
esp_err_t esp_apptrace_membufs_init(esp_apptrace_membufs_proto_data_t *proto, const esp_apptrace_mem_block_t blocks_cfg[2])
{
// disabled by default
esp_apptrace_rb_init(&proto->rb_down, NULL, 0);
// membufs proto init
for (unsigned int i = 0; i < 2; i++) {
for (unsigned i = 0; i < 2; i++) {
proto->blocks[i].start = blocks_cfg[i].start;
proto->blocks[i].sz = blocks_cfg[i].sz;
proto->state.markers[i] = 0;
}
proto->state.in_block = 0;
#if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
esp_apptrace_rb_init(&proto->rb_pend, proto->pending_data,
sizeof(proto->pending_data));
#endif
return ESP_OK;
}
@@ -72,10 +81,10 @@ static esp_err_t esp_apptrace_membufs_swap(esp_apptrace_membufs_proto_data_t *pr
{
int prev_block_num = proto->state.in_block % 2;
int new_block_num = prev_block_num ? (0) : (1);
esp_err_t res = ESP_OK;
esp_err_t res = proto->hw->swap_start(proto->state.in_block);
res = proto->hw->swap_start(proto->state.in_block);
if (res != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to swap to new block: %d", res);
return res;
}
@@ -83,7 +92,7 @@ static esp_err_t esp_apptrace_membufs_swap(esp_apptrace_membufs_proto_data_t *pr
// switch to new block
proto->state.in_block++;
proto->hw->swap(new_block_num, proto->state.markers[prev_block_num]);
proto->hw->swap(new_block_num);
// handle data from host
esp_hostdata_hdr_t *hdr = (esp_hostdata_hdr_t *)proto->blocks[new_block_num].start;
@@ -92,19 +101,40 @@ static esp_err_t esp_apptrace_membufs_swap(esp_apptrace_membufs_proto_data_t *pr
// TODO: add support for multiple blocks from host, currently there is no need for that
uint8_t *p = proto->blocks[new_block_num].start + proto->blocks[new_block_num].sz;
ESP_APPTRACE_LOGD("Recvd %" PRIu16 " bytes from host (@ %p) [%x %x %x %x %x %x %x %x .. %x %x %x %x %x %x %x %x]",
hdr->block_sz, proto->blocks[new_block_num].start,
*(proto->blocks[new_block_num].start + 0), *(proto->blocks[new_block_num].start + 1),
*(proto->blocks[new_block_num].start + 2), *(proto->blocks[new_block_num].start + 3),
*(proto->blocks[new_block_num].start + 4), *(proto->blocks[new_block_num].start + 5),
*(proto->blocks[new_block_num].start + 6), *(proto->blocks[new_block_num].start + 7),
*(p - 8), *(p - 7), *(p - 6), *(p - 5), *(p - 4), *(p - 3), *(p - 2), *(p - 1));
uint32_t sz = esp_apptrace_membufs_down_buffer_write_nolock(proto, (uint8_t *)(hdr + 1), hdr->block_sz);
hdr->block_sz, proto->blocks[new_block_num].start,
*(proto->blocks[new_block_num].start+0), *(proto->blocks[new_block_num].start+1),
*(proto->blocks[new_block_num].start+2), *(proto->blocks[new_block_num].start+3),
*(proto->blocks[new_block_num].start+4), *(proto->blocks[new_block_num].start+5),
*(proto->blocks[new_block_num].start+6), *(proto->blocks[new_block_num].start+7),
*(p-8), *(p-7), *(p-6), *(p-5), *(p-4), *(p-3), *(p-2), *(p-1));
uint32_t sz = esp_apptrace_membufs_down_buffer_write_nolock(proto, (uint8_t *)(hdr+1), hdr->block_sz);
if (sz != hdr->block_sz) {
ESP_APPTRACE_LOGE("Failed to write %" PRIu32 " bytes to down buffer (%" PRIu16 " %" PRIu32 ")!",
hdr->block_sz - sz, hdr->block_sz, sz);
ESP_APPTRACE_LOGE("Failed to write %" PRIu32 " bytes to down buffer (%" PRIu16 " %" PRIu32 ")!", hdr->block_sz - sz, hdr->block_sz, sz);
}
hdr->block_sz = 0;
}
#if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
// copy pending data to block if any
while (proto->state.markers[new_block_num] < proto->blocks[new_block_num].sz) {
uint32_t read_sz = esp_apptrace_rb_read_size_get(&proto->rb_pend);
if (read_sz == 0) {
break; // no more data in pending buffer
}
if (read_sz > proto->blocks[new_block_num].sz - proto->state.markers[new_block_num]) {
read_sz = proto->blocks[new_block_num].sz - proto->state.markers[new_block_num];
}
uint8_t *ptr = esp_apptrace_rb_consume(&proto->rb_pend, read_sz);
if (!ptr) {
assert(false && "Failed to consume pended bytes!!");
break;
}
ESP_APPTRACE_LOGD("Pump %d pend bytes [%x %x %x %x : %x %x %x %x : %x %x %x %x : %x %x...%x %x]",
read_sz, *(ptr+0), *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4),
*(ptr+5), *(ptr+6), *(ptr+7), *(ptr+8), *(ptr+9), *(ptr+10), *(ptr+11), *(ptr+12), *(ptr+13), *(ptr+read_sz-2), *(ptr+read_sz-1));
memcpy(proto->blocks[new_block_num].start + proto->state.markers[new_block_num], ptr, read_sz);
proto->state.markers[new_block_num] += read_sz;
}
#endif
proto->hw->swap_end(proto->state.in_block, proto->state.markers[prev_block_num]);
return res;
}
@@ -134,8 +164,7 @@ static esp_err_t esp_apptrace_membufs_swap_waitus(esp_apptrace_membufs_proto_dat
return res;
}
uint8_t *esp_apptrace_membufs_down_buffer_get(esp_apptrace_membufs_proto_data_t *proto,
uint32_t *size, esp_apptrace_tmo_t *tmo)
uint8_t *esp_apptrace_membufs_down_buffer_get(esp_apptrace_membufs_proto_data_t *proto, uint32_t *size, esp_apptrace_tmo_t *tmo)
{
uint8_t *ptr = NULL;
@@ -168,21 +197,19 @@ uint8_t *esp_apptrace_membufs_down_buffer_get(esp_apptrace_membufs_proto_data_t
return ptr;
}
esp_err_t esp_apptrace_membufs_down_buffer_put(esp_apptrace_membufs_proto_data_t *proto,
uint8_t *ptr, esp_apptrace_tmo_t *tmo)
esp_err_t esp_apptrace_membufs_down_buffer_put(esp_apptrace_membufs_proto_data_t *proto, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
/* nothing todo */
return ESP_OK;
}
static uint32_t esp_apptrace_membufs_down_buffer_write_nolock(esp_apptrace_membufs_proto_data_t *proto,
uint8_t *data, uint32_t size)
static uint32_t esp_apptrace_membufs_down_buffer_write_nolock(esp_apptrace_membufs_proto_data_t *proto, uint8_t *data, uint32_t size)
{
uint32_t total_sz = 0;
while (total_sz < size) {
ESP_APPTRACE_LOGD("esp_apptrace_trax_down_buffer_write_nolock WRS %" PRIu32 "-%" PRIu32 "-%" PRIu32 " %" PRIu32, proto->rb_down.wr, proto->rb_down.rd,
proto->rb_down.cur_size, size);
proto->rb_down.cur_size, size);
uint32_t wr_sz = esp_apptrace_rb_write_size_get(&proto->rb_down);
if (wr_sz == 0) {
break;
@@ -204,55 +231,126 @@ static uint32_t esp_apptrace_membufs_down_buffer_write_nolock(esp_apptrace_membu
return total_sz;
}
static inline uint32_t esp_apptrace_membufs_usr_data_len_max(esp_apptrace_membufs_proto_data_t *proto)
static inline uint8_t *esp_apptrace_membufs_wait4buf(esp_apptrace_membufs_proto_data_t *proto, uint16_t size, esp_apptrace_tmo_t *tmo, int *pended)
{
return proto->header_size == ESP_APPTRACE_HEADER_SIZE_32 ?
ESP_APPTRACE_INBLOCK(proto)->sz - ESP_APPTRACE_HEADER_SIZE_32 : 255;
uint8_t *ptr = NULL;
int res = esp_apptrace_membufs_swap_waitus(proto, tmo);
if (res != ESP_OK) {
return NULL;
}
#if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
// check if we still have pending data
if (esp_apptrace_rb_read_size_get(&proto->rb_pend) > 0) {
// if after block switch we still have pending data (not all pending data have been pumped to block)
// alloc new pending buffer
*pended = 1;
ptr = esp_apptrace_rb_produce(&proto->rb_pend, size);
if (!ptr) {
ESP_APPTRACE_LOGE("Failed to alloc pend buf 1: w-r-s %d-%d-%d!", proto->rb_pend.wr, proto->rb_pend.rd, proto->rb_pend.cur_size);
}
} else
#endif
{
// update block pointers
if (ESP_APPTRACE_INBLOCK_MARKER(proto) + size > ESP_APPTRACE_INBLOCK(proto)->sz) {
#if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
*pended = 1;
ptr = esp_apptrace_rb_produce(&proto->rb_pend, size);
if (ptr == NULL) {
ESP_APPTRACE_LOGE("Failed to alloc pend buf 2: w-r-s %d-%d-%d!", proto->rb_pend.wr, proto->rb_pend.rd, proto->rb_pend.cur_size);
}
#endif
} else {
*pended = 0;
ptr = ESP_APPTRACE_INBLOCK(proto)->start + ESP_APPTRACE_INBLOCK_MARKER(proto);
}
}
return ptr;
}
uint8_t *esp_apptrace_membufs_up_buffer_get(esp_apptrace_membufs_proto_data_t *proto,
uint32_t size, esp_apptrace_tmo_t *tmo)
static inline uint8_t *esp_apptrace_membufs_pkt_start(uint8_t *ptr, uint16_t size)
{
if (size > esp_apptrace_membufs_usr_data_len_max(proto)) {
// it is safe to use esp_cpu_get_core_id() in macro call because arg is used only once inside it
((esp_tracedata_hdr_t *)ptr)->block_sz = ESP_APPTRACE_USR_BLOCK_CORE(esp_cpu_get_core_id()) | size;
((esp_tracedata_hdr_t *)ptr)->wr_sz = 0;
return ptr + sizeof(esp_tracedata_hdr_t);
}
static inline void esp_apptrace_membufs_pkt_end(uint8_t *ptr)
{
esp_tracedata_hdr_t *hdr = (esp_tracedata_hdr_t *)(ptr - sizeof(esp_tracedata_hdr_t));
// update written size
hdr->wr_sz = hdr->block_sz;
}
uint8_t *esp_apptrace_membufs_up_buffer_get(esp_apptrace_membufs_proto_data_t *proto, uint32_t size, esp_apptrace_tmo_t *tmo)
{
uint8_t *buf_ptr = NULL;
if (size > ESP_APPTRACE_USR_DATA_LEN_MAX(proto)) {
ESP_APPTRACE_LOGE("Too large user data size %" PRIu32 "!", size);
return NULL;
}
if (ESP_APPTRACE_INBLOCK_MARKER(proto) + size + proto->header_size > ESP_APPTRACE_INBLOCK(proto)->sz) {
int res = esp_apptrace_membufs_swap_waitus(proto, tmo);
if (res != ESP_OK) {
return NULL;
// check for data in the pending buffer
#if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
if (esp_apptrace_rb_read_size_get(&proto->rb_pend) > 0) {
// if we have buffered data try to switch block
esp_apptrace_membufs_swap(proto);
// if switch was successful, part or all pended data have been copied to block
}
if (esp_apptrace_rb_read_size_get(&proto->rb_pend) > 0) {
// if we have buffered data alloc new pending buffer
ESP_APPTRACE_LOGD("Get %d bytes from PEND buffer", size);
buf_ptr = esp_apptrace_rb_produce(&proto->rb_pend, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size));
if (buf_ptr == NULL) {
int pended_buf;
buf_ptr = esp_apptrace_membufs_wait4buf(proto, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size), tmo, &pended_buf);
if (buf_ptr && !pended_buf) {
ESP_APPTRACE_LOGD("Get %d bytes from block", size);
// update cur block marker
ESP_APPTRACE_INBLOCK_MARKER_UPD(proto, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size));
}
}
} else {
#else
if (1) {
#endif
if (ESP_APPTRACE_INBLOCK_MARKER(proto) + ESP_APPTRACE_USR_BLOCK_RAW_SZ(size) > ESP_APPTRACE_INBLOCK(proto)->sz) {
#if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
ESP_APPTRACE_LOGD("Block full. Get %" PRIu32 " bytes from PEND buffer", size);
buf_ptr = esp_apptrace_rb_produce(&proto->rb_pend, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size));
#endif
if (buf_ptr == NULL) {
int pended_buf;
ESP_APPTRACE_LOGD(" full. Get %" PRIu32 " bytes from pend buffer", size);
buf_ptr = esp_apptrace_membufs_wait4buf(proto, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size), tmo, &pended_buf);
if (buf_ptr && !pended_buf) {
ESP_APPTRACE_LOGD("Got %" PRIu32 " bytes from block", size);
// update cur block marker
ESP_APPTRACE_INBLOCK_MARKER_UPD(proto, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size));
}
}
} else {
ESP_APPTRACE_LOGD("Get %" PRIu32 " bytes from buffer", size);
// fit to curr nlock
buf_ptr = ESP_APPTRACE_INBLOCK(proto)->start + ESP_APPTRACE_INBLOCK_MARKER(proto);
// update cur block marker
ESP_APPTRACE_INBLOCK_MARKER_UPD(proto, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size));
}
}
uint8_t *buf_ptr = ESP_APPTRACE_INBLOCK(proto)->start + ESP_APPTRACE_INBLOCK_MARKER(proto);
// update cur block marker
proto->state.markers[proto->state.in_block % 2] += size + proto->header_size;
// update header
esp_tracedata_hdr_t *hdr = (esp_tracedata_hdr_t *)buf_ptr;
if (proto->header_size == ESP_APPTRACE_HEADER_SIZE_32) {
hdr->block_sz_16 = (esp_cpu_get_core_id() << 15) | size;
hdr->wr_sz_16 = 0;
} else {
hdr->block_sz_8 = size;
hdr->wr_sz_8 = 0;
if (buf_ptr) {
buf_ptr = esp_apptrace_membufs_pkt_start(buf_ptr, size);
}
ESP_APPTRACE_LOGD("Got %" PRIu32 " bytes from block", size);
return buf_ptr + proto->header_size;
return buf_ptr;
}
esp_err_t esp_apptrace_membufs_up_buffer_put(esp_apptrace_membufs_proto_data_t *proto,
uint8_t *ptr, esp_apptrace_tmo_t *tmo)
esp_err_t esp_apptrace_membufs_up_buffer_put(esp_apptrace_membufs_proto_data_t *proto, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
// update header
esp_tracedata_hdr_t *hdr = (esp_tracedata_hdr_t *)(ptr - proto->header_size);
if (proto->header_size == ESP_APPTRACE_HEADER_SIZE_32) {
hdr->wr_sz_16 = hdr->block_sz_16;
} else {
hdr->wr_sz_8 = hdr->block_sz_8;
}
esp_apptrace_membufs_pkt_end(ptr);
// TODO: mark block as busy in order not to reuse it for other tracing calls until it is completely written
// TODO: avoid potential situation when all memory is consumed by low prio tasks which can not complete writing due to
// higher prio tasks and the latter can not allocate buffers at all
@@ -261,8 +359,7 @@ esp_err_t esp_apptrace_membufs_up_buffer_put(esp_apptrace_membufs_proto_data_t *
return ESP_OK;
}
esp_err_t esp_apptrace_membufs_flush_nolock(esp_apptrace_membufs_proto_data_t *proto,
uint32_t min_sz, esp_apptrace_tmo_t *tmo)
esp_err_t esp_apptrace_membufs_flush_nolock(esp_apptrace_membufs_proto_data_t *proto, uint32_t min_sz, esp_apptrace_tmo_t *tmo)
{
int res = ESP_OK;
@@ -270,16 +367,15 @@ esp_err_t esp_apptrace_membufs_flush_nolock(esp_apptrace_membufs_proto_data_t *p
ESP_APPTRACE_LOGI("Ignore flush request for min %" PRIu32 " bytes. Bytes in block: %" PRIu32, min_sz, ESP_APPTRACE_INBLOCK_MARKER(proto));
return ESP_OK;
}
// switch block while size of data is more than min size
// switch block while size of data (including that in pending buffer) is more than min size
while (ESP_APPTRACE_INBLOCK_MARKER(proto) > min_sz) {
ESP_APPTRACE_LOGD("Try to flush %" PRIu32 " bytes", ESP_APPTRACE_INBLOCK_MARKER(proto));
ESP_APPTRACE_LOGD("Try to flush %" PRIu32 " bytes. Wait until block switch for %" PRIi64 " us", ESP_APPTRACE_INBLOCK_MARKER(proto), tmo->tmo);
res = esp_apptrace_membufs_swap_waitus(proto, tmo);
if (res != ESP_OK) {
if (res == ESP_ERR_TIMEOUT) {
ESP_APPTRACE_LOGW("Failed to switch to another block in %" PRId32 " us!", (int32_t)tmo->elapsed);
} else {
ESP_APPTRACE_LOGE("Failed to switch to another block, res: %d", res);
}
if (tmo->tmo != ESP_APPTRACE_TMO_INFINITE)
ESP_APPTRACE_LOGW("Failed to switch to another block in %lld us!", tmo->tmo);
else
ESP_APPTRACE_LOGE("Failed to switch to another block in %lld us!", tmo->tmo);
return res;
}
}

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2017-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*/
@@ -44,7 +44,7 @@ void esp_apptrace_log_unlock(void)
esp_err_t esp_apptrace_tmo_check(esp_apptrace_tmo_t *tmo)
{
if (tmo->tmo != (int64_t) -1) {
if (tmo->tmo != (int64_t)-1) {
tmo->elapsed = esp_timer_get_time() - tmo->start;
if (tmo->elapsed >= tmo->tmo) {
return ESP_ERR_TIMEOUT;
@@ -57,12 +57,6 @@ esp_err_t esp_apptrace_tmo_check(esp_apptrace_tmo_t *tmo)
///////////////////////////////// LOCK ////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void esp_apptrace_lock_init(esp_apptrace_lock_t *lock)
{
portMUX_INITIALIZE(&lock->mux);
lock->int_state = 0;
}
esp_err_t esp_apptrace_lock_take(esp_apptrace_lock_t *lock, esp_apptrace_tmo_t *tmo)
{
esp_err_t ret;

View File

@@ -9,11 +9,11 @@
//
#include "esp_private/startup_internal.h"
#include "esp_dbg_stubs.h"
#include "dbg_stubs.h"
#include "esp_attr.h"
/*
Debug stubs is actually a table of 4-byte entries. Every entry is equal to zero or must contain meaningful data.
Debug stubs is actually a table of 4-byte entries. Every entry is equal to zero or must contain meaningfull data.
The first entry is a service one and has the followinf format:
- tramp_addr, 4 bytes; Address of buffer for trampoline/code. Max size is ESP_DBG_STUBS_CODE_BUF_SIZE.
- min_stack_addr, 4 bytes; Start of the buffer for minimal onboard stack or data. Max size is ESP_DBG_STUBS_STACK_MIN_SIZE.

View File

@@ -0,0 +1,197 @@
/*
* SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
// This module implements runtime file I/O API for GCOV.
#include <string.h>
#include "esp_task_wdt.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "soc/timer_periph.h"
#include "esp_app_trace.h"
#include "esp_freertos_hooks.h"
#include "dbg_stubs.h"
#include "esp_private/esp_ipc.h"
#include "esp_attr.h"
#include "hal/wdt_hal.h"
#if CONFIG_APPTRACE_GCOV_ENABLE
#define ESP_GCOV_DOWN_BUF_SIZE 4200
#include "esp_log.h"
const static char *TAG = "esp_gcov_rtio";
static volatile bool s_create_gcov_task = false;
static volatile bool s_gcov_task_running = false;
extern void __gcov_dump(void);
extern void __gcov_reset(void);
void gcov_dump_task(void *pvParameter)
{
int dump_result = 0;
bool *running = (bool *)pvParameter;
ESP_EARLY_LOGV(TAG, "%s stack use in %d", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL));
ESP_EARLY_LOGV(TAG, "Alloc apptrace down buf %d bytes", ESP_GCOV_DOWN_BUF_SIZE);
void *down_buf = malloc(ESP_GCOV_DOWN_BUF_SIZE);
if (down_buf == NULL) {
ESP_EARLY_LOGE(TAG, "Could not allocate memory for the buffer");
dump_result = ESP_ERR_NO_MEM;
goto gcov_exit;
}
ESP_EARLY_LOGV(TAG, "Config apptrace down buf");
esp_apptrace_down_buffer_config(down_buf, ESP_GCOV_DOWN_BUF_SIZE);
ESP_EARLY_LOGV(TAG, "Dump data...");
__gcov_dump();
// reset dump status to allow incremental data accumulation
__gcov_reset();
free(down_buf);
ESP_EARLY_LOGV(TAG, "Finish file transfer session");
dump_result = esp_apptrace_fstop(ESP_APPTRACE_DEST_TRAX);
if (dump_result != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to send files transfer stop cmd (%d)!", dump_result);
}
gcov_exit:
ESP_EARLY_LOGV(TAG, "dump_result %d", dump_result);
if (running) {
*running = false;
}
ESP_EARLY_LOGV(TAG, "%s stack use out %d", __FUNCTION__, uxTaskGetStackHighWaterMark(NULL));
vTaskDelete(NULL);
}
void gcov_create_task(void *arg)
{
ESP_EARLY_LOGV(TAG, "%s", __FUNCTION__);
xTaskCreatePinnedToCore(&gcov_dump_task, "gcov_dump_task", CONFIG_APPTRACE_GCOV_DUMP_TASK_STACK_SIZE,
(void *)&s_gcov_task_running, configMAX_PRIORITIES - 1, NULL, 0);
}
static IRAM_ATTR
void gcov_create_task_tick_hook(void)
{
if (s_create_gcov_task) {
if (esp_ipc_call_nonblocking(xPortGetCoreID(), &gcov_create_task, NULL) == ESP_OK) {
s_create_gcov_task = false;
}
}
}
/**
* @brief Triggers gcov info dump task
* This function is to be called by OpenOCD, not by normal user code.
* TODO: what about interrupted flash access (when cache disabled)
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
static int esp_dbg_stub_gcov_entry(void)
{
/* we are in isr context here */
s_create_gcov_task = true;
return ESP_OK;
}
void gcov_rtio_init(void)
{
uint32_t stub_entry = 0;
ESP_EARLY_LOGV(TAG, "%s", __FUNCTION__);
assert(esp_dbg_stub_entry_get(ESP_DBG_STUB_ENTRY_GCOV, &stub_entry) == ESP_OK);
if (stub_entry != 0) {
/* "__gcov_init()" can be called several times. We must avoid multiple tick hook registration */
return;
}
esp_dbg_stub_entry_set(ESP_DBG_STUB_ENTRY_GCOV, (uint32_t)&esp_dbg_stub_gcov_entry);
assert(esp_dbg_stub_entry_get(ESP_DBG_STUB_ENTRY_CAPABILITIES, &stub_entry) == ESP_OK);
esp_dbg_stub_entry_set(ESP_DBG_STUB_ENTRY_CAPABILITIES, stub_entry | ESP_DBG_STUB_CAP_GCOV_TASK);
esp_register_freertos_tick_hook(gcov_create_task_tick_hook);
}
void esp_gcov_dump(void)
{
ESP_EARLY_LOGV(TAG, "%s", __FUNCTION__);
while (!esp_apptrace_host_is_connected(ESP_APPTRACE_DEST_TRAX)) {
vTaskDelay(pdMS_TO_TICKS(10));
}
/* We are not in isr context here. Waiting for the completion is safe */
s_gcov_task_running = true;
s_create_gcov_task = true;
while (s_gcov_task_running) {
vTaskDelay(pdMS_TO_TICKS(10));
}
}
void *gcov_rtio_fopen(const char *path, const char *mode)
{
ESP_EARLY_LOGV(TAG, "%s '%s' '%s'", __FUNCTION__, path, mode);
void *f = esp_apptrace_fopen(ESP_APPTRACE_DEST_TRAX, path, mode);
ESP_EARLY_LOGV(TAG, "%s ret %p", __FUNCTION__, f);
return f;
}
int gcov_rtio_fclose(void *stream)
{
ESP_EARLY_LOGV(TAG, "%s", __FUNCTION__);
return esp_apptrace_fclose(ESP_APPTRACE_DEST_TRAX, stream);
}
size_t gcov_rtio_fread(void *ptr, size_t size, size_t nmemb, void *stream)
{
ESP_EARLY_LOGV(TAG, "%s read %u", __FUNCTION__, size * nmemb);
size_t sz = esp_apptrace_fread(ESP_APPTRACE_DEST_TRAX, ptr, size, nmemb, stream);
ESP_EARLY_LOGV(TAG, "%s actually read %u", __FUNCTION__, sz);
return sz;
}
size_t gcov_rtio_fwrite(const void *ptr, size_t size, size_t nmemb, void *stream)
{
ESP_EARLY_LOGV(TAG, "%s", __FUNCTION__);
return esp_apptrace_fwrite(ESP_APPTRACE_DEST_TRAX, ptr, size, nmemb, stream);
}
int gcov_rtio_fseek(void *stream, long offset, int whence)
{
int ret = esp_apptrace_fseek(ESP_APPTRACE_DEST_TRAX, stream, offset, whence);
ESP_EARLY_LOGV(TAG, "%s(%p %ld %d) = %d", __FUNCTION__, stream, offset, whence, ret);
return ret;
}
long gcov_rtio_ftell(void *stream)
{
long ret = esp_apptrace_ftell(ESP_APPTRACE_DEST_TRAX, stream);
ESP_EARLY_LOGV(TAG, "%s(%p) = %ld", __FUNCTION__, stream, ret);
return ret;
}
int gcov_rtio_feof(void *stream)
{
int ret = esp_apptrace_feof(ESP_APPTRACE_DEST_TRAX, stream);
ESP_EARLY_LOGV(TAG, "%s(%p) = %d", __FUNCTION__, stream, ret);
return ret;
}
void gcov_rtio_setbuf(void *arg1 __attribute__ ((unused)), void *arg2 __attribute__ ((unused)))
{
return;
}
/* Wrappers for Gcov functions */
extern void __real___gcov_init(void *info);
void __wrap___gcov_init(void *info)
{
__real___gcov_init(info);
gcov_rtio_init();
}
#endif

View File

@@ -0,0 +1,8 @@
fopen gcov_rtio_fopen
fclose gcov_rtio_fclose
fwrite gcov_rtio_fwrite
fread gcov_rtio_fread
fseek gcov_rtio_fseek
ftell gcov_rtio_ftell
setbuf gcov_rtio_setbuf
feof gcov_rtio_feof

View File

@@ -0,0 +1,115 @@
/*
* SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <sdkconfig.h>
#define HEAP_TRACE_SRCFILE /* don't warn on inclusion here */
#include "esp_heap_trace.h"
#undef HEAP_TRACE_SRCFILE
#include "esp_heap_caps.h"
#if CONFIG_APPTRACE_SV_ENABLE
#include "esp_app_trace.h"
#include "esp_sysview_trace.h"
#endif
#define STACK_DEPTH CONFIG_HEAP_TRACING_STACK_DEPTH
#ifdef CONFIG_HEAP_TRACING_TOHOST
#if !CONFIG_APPTRACE_SV_ENABLE
#error None of the heap tracing backends is enabled! You must enable SystemView compatible tracing to use this feature.
#endif
static bool s_tracing;
esp_err_t heap_trace_init_tohost(void)
{
if (s_tracing) {
return ESP_ERR_INVALID_STATE;
}
return ESP_OK;
}
esp_err_t heap_trace_start(heap_trace_mode_t mode_param)
{
#if CONFIG_APPTRACE_SV_ENABLE
esp_err_t ret = esp_sysview_heap_trace_start((uint32_t)-1);
if (ret != ESP_OK) {
return ret;
}
#endif
s_tracing = true;
return ESP_OK;
}
esp_err_t heap_trace_stop(void)
{
esp_err_t ret = ESP_ERR_NOT_SUPPORTED;
#if CONFIG_APPTRACE_SV_ENABLE
ret = esp_sysview_heap_trace_stop();
#endif
s_tracing = false;
return ret;
}
esp_err_t heap_trace_resume(void)
{
return heap_trace_start(HEAP_TRACE_ALL);
}
size_t heap_trace_get_count(void)
{
return 0;
}
esp_err_t heap_trace_get(size_t index, heap_trace_record_t *record)
{
return ESP_ERR_NOT_SUPPORTED;
}
esp_err_t heap_trace_summary(heap_trace_summary_t *summary)
{
return ESP_ERR_NOT_SUPPORTED;
}
void heap_trace_dump(void)
{
return;
}
void heap_trace_dump_caps(__attribute__((unused)) const uint32_t caps)
{
return;
}
/* Add a new allocation to the heap trace records */
static HEAP_IRAM_ATTR void record_allocation(const heap_trace_record_t *record)
{
if (!s_tracing) {
return;
}
#if CONFIG_APPTRACE_SV_ENABLE
esp_sysview_heap_trace_alloc(record->address, record->size, record->alloced_by);
#endif
}
/* record a free event in the heap trace log
For HEAP_TRACE_ALL, this means filling in the freed_by pointer.
For HEAP_TRACE_LEAKS, this means removing the record from the log.
*/
static HEAP_IRAM_ATTR void record_free(void *p, void **callers)
{
if (!s_tracing) {
return;
}
#if CONFIG_APPTRACE_SV_ENABLE
esp_sysview_heap_trace_free(p, callers);
#endif
}
#include "heap_trace.inc"
#endif /*CONFIG_HEAP_TRACING_TOHOST*/

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2017-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2017-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -17,6 +17,8 @@
#include <string.h>
#include "esp_app_trace.h"
#if CONFIG_APPTRACE_ENABLE
#include "esp_log.h"
const static char *TAG = "esp_host_file_io";
@@ -77,13 +79,13 @@ typedef struct {
void *file;
} esp_apptrace_ftell_args_t;
static esp_err_t esp_apptrace_file_cmd_send(uint8_t cmd, void (*prep_args)(uint8_t *, void *), void *args, uint32_t args_len)
static esp_err_t esp_apptrace_file_cmd_send(esp_apptrace_dest_t dest, uint8_t cmd, void (*prep_args)(uint8_t *, void *), void *args, uint32_t args_len)
{
esp_err_t ret;
esp_apptrace_fcmd_hdr_t *hdr;
ESP_EARLY_LOGV(TAG, "%s %d", __func__, cmd);
uint8_t *ptr = esp_apptrace_buffer_get(sizeof(*hdr) + args_len, ESP_APPTRACE_TMO_INFINITE); //TODO: finite tmo
uint8_t *ptr = esp_apptrace_buffer_get(dest, sizeof(*hdr) + args_len, ESP_APPTRACE_TMO_INFINITE); //TODO: finite tmo
if (ptr == NULL) {
return ESP_ERR_NO_MEM;
}
@@ -95,13 +97,13 @@ static esp_err_t esp_apptrace_file_cmd_send(uint8_t cmd, void (*prep_args)(uint8
}
// now indicate that this buffer is ready to be sent off to host
ret = esp_apptrace_buffer_put(ptr, ESP_APPTRACE_TMO_INFINITE);//TODO: finite tmo
ret = esp_apptrace_buffer_put(dest, ptr, ESP_APPTRACE_TMO_INFINITE);//TODO: finite tmo
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to put apptrace buffer (%d)!", ret);
return ret;
}
ret = esp_apptrace_flush(ESP_APPTRACE_TMO_INFINITE);//TODO: finite tmo
ret = esp_apptrace_flush(dest, ESP_APPTRACE_TMO_INFINITE);//TODO: finite tmo
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to flush apptrace buffer (%d)!", ret);
return ret;
@@ -110,12 +112,12 @@ static esp_err_t esp_apptrace_file_cmd_send(uint8_t cmd, void (*prep_args)(uint8
return ESP_OK;
}
static esp_err_t esp_apptrace_file_rsp_recv(uint8_t *buf, uint32_t buf_len)
static esp_err_t esp_apptrace_file_rsp_recv(esp_apptrace_dest_t dest, uint8_t *buf, uint32_t buf_len)
{
uint32_t tot_rd = 0;
while (tot_rd < buf_len) {
uint32_t rd_size = buf_len - tot_rd;
esp_err_t ret = esp_apptrace_read(buf + tot_rd, &rd_size, ESP_APPTRACE_TMO_INFINITE); //TODO: finite tmo
esp_err_t ret = esp_apptrace_read(dest, buf + tot_rd, &rd_size, ESP_APPTRACE_TMO_INFINITE); //TODO: finite tmo
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to read (%d)!", ret);
return ret;
@@ -135,7 +137,7 @@ static void esp_apptrace_fopen_args_prepare(uint8_t *buf, void *priv)
memcpy(buf + args->path_len, args->mode, args->mode_len);
}
void *esp_apptrace_fopen(const char *path, const char *mode)
void *esp_apptrace_fopen(esp_apptrace_dest_t dest, const char *path, const char *mode)
{
esp_apptrace_fopen_args_t cmd_args;
@@ -149,8 +151,8 @@ void *esp_apptrace_fopen(const char *path, const char *mode)
cmd_args.mode = mode;
cmd_args.mode_len = strlen(mode) + 1;
esp_err_t ret = esp_apptrace_file_cmd_send(ESP_APPTRACE_FILE_CMD_FOPEN, esp_apptrace_fopen_args_prepare,
&cmd_args, cmd_args.path_len + cmd_args.mode_len);
esp_err_t ret = esp_apptrace_file_cmd_send(dest, ESP_APPTRACE_FILE_CMD_FOPEN, esp_apptrace_fopen_args_prepare,
&cmd_args, cmd_args.path_len+cmd_args.mode_len);
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to send file cmd (%d)!", ret);
return NULL;
@@ -158,7 +160,7 @@ void *esp_apptrace_fopen(const char *path, const char *mode)
// now read the answer
void *resp;
ret = esp_apptrace_file_rsp_recv((uint8_t *)&resp, sizeof(resp));
ret = esp_apptrace_file_rsp_recv(dest, (uint8_t *)&resp, sizeof(resp));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to read response (%d)!", ret);
return NULL;
@@ -174,13 +176,13 @@ static void esp_apptrace_fclose_args_prepare(uint8_t *buf, void *priv)
memcpy(buf, &args->file, sizeof(args->file));
}
int esp_apptrace_fclose(void *stream)
int esp_apptrace_fclose(esp_apptrace_dest_t dest, void *stream)
{
esp_apptrace_fclose_args_t cmd_args;
cmd_args.file = stream;
esp_err_t ret = esp_apptrace_file_cmd_send(ESP_APPTRACE_FILE_CMD_FCLOSE, esp_apptrace_fclose_args_prepare,
&cmd_args, sizeof(cmd_args));
esp_err_t ret = esp_apptrace_file_cmd_send(dest, ESP_APPTRACE_FILE_CMD_FCLOSE, esp_apptrace_fclose_args_prepare,
&cmd_args, sizeof(cmd_args));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to send file cmd (%d)!", ret);
return EOF;
@@ -188,7 +190,7 @@ int esp_apptrace_fclose(void *stream)
// now read the answer
int resp;
ret = esp_apptrace_file_rsp_recv((uint8_t *)&resp, sizeof(resp));
ret = esp_apptrace_file_rsp_recv(dest, (uint8_t *)&resp, sizeof(resp));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to read response (%d)!", ret);
return EOF;
@@ -205,11 +207,11 @@ static void esp_apptrace_fwrite_args_prepare(uint8_t *buf, void *priv)
memcpy(buf + sizeof(args->file), args->buf, args->size);
}
size_t esp_apptrace_fwrite(const void *ptr, size_t size, size_t nmemb, void *stream)
size_t esp_apptrace_fwrite(esp_apptrace_dest_t dest, const void *ptr, size_t size, size_t nmemb, void *stream)
{
esp_apptrace_fwrite_args_t cmd_args;
ESP_EARLY_LOGV(TAG, "esp_apptrace_fwrite f %p l %d", stream, size * nmemb);
ESP_EARLY_LOGV(TAG, "esp_apptrace_fwrite f %p l %d", stream, size*nmemb);
if (ptr == NULL) {
return 0;
@@ -218,8 +220,8 @@ size_t esp_apptrace_fwrite(const void *ptr, size_t size, size_t nmemb, void *str
cmd_args.buf = (void *)ptr;
cmd_args.size = size * nmemb;
cmd_args.file = stream;
esp_err_t ret = esp_apptrace_file_cmd_send(ESP_APPTRACE_FILE_CMD_FWRITE, esp_apptrace_fwrite_args_prepare,
&cmd_args, sizeof(cmd_args.file) + cmd_args.size);
esp_err_t ret = esp_apptrace_file_cmd_send(dest, ESP_APPTRACE_FILE_CMD_FWRITE, esp_apptrace_fwrite_args_prepare,
&cmd_args, sizeof(cmd_args.file)+cmd_args.size);
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to send file cmd (%d)!", ret);
return 0;
@@ -227,7 +229,7 @@ size_t esp_apptrace_fwrite(const void *ptr, size_t size, size_t nmemb, void *str
// now read the answer
size_t resp;
ret = esp_apptrace_file_rsp_recv((uint8_t *)&resp, sizeof(resp));
ret = esp_apptrace_file_rsp_recv(dest, (uint8_t *)&resp, sizeof(resp));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to read response (%d)!", ret);
return 0;
@@ -247,11 +249,11 @@ static void esp_apptrace_fread_args_prepare(uint8_t *buf, void *priv)
memcpy(buf + sizeof(args->file), &args->size, sizeof(args->size));
}
size_t esp_apptrace_fread(void *ptr, size_t size, size_t nmemb, void *stream)
size_t esp_apptrace_fread(esp_apptrace_dest_t dest, void *ptr, size_t size, size_t nmemb, void *stream)
{
esp_apptrace_fread_args_t cmd_args;
ESP_EARLY_LOGV(TAG, "esp_apptrace_fread f %p l %d", stream, size * nmemb);
ESP_EARLY_LOGV(TAG, "esp_apptrace_fread f %p l %d", stream, size*nmemb);
if (ptr == NULL) {
return 0;
@@ -259,8 +261,8 @@ size_t esp_apptrace_fread(void *ptr, size_t size, size_t nmemb, void *stream)
cmd_args.size = size * nmemb;
cmd_args.file = stream;
esp_err_t ret = esp_apptrace_file_cmd_send(ESP_APPTRACE_FILE_CMD_FREAD, esp_apptrace_fread_args_prepare,
&cmd_args, sizeof(cmd_args));
esp_err_t ret = esp_apptrace_file_cmd_send(dest, ESP_APPTRACE_FILE_CMD_FREAD, esp_apptrace_fread_args_prepare,
&cmd_args, sizeof(cmd_args));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to send file cmd (%d)!", ret);
return 0;
@@ -268,7 +270,7 @@ size_t esp_apptrace_fread(void *ptr, size_t size, size_t nmemb, void *stream)
// now read the answer
size_t resp;
ret = esp_apptrace_file_rsp_recv((uint8_t *)&resp, sizeof(resp));
ret = esp_apptrace_file_rsp_recv(dest, (uint8_t *)&resp, sizeof(resp));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to read response (%d)!", ret);
return 0;
@@ -277,7 +279,7 @@ size_t esp_apptrace_fread(void *ptr, size_t size, size_t nmemb, void *stream)
return 0;
}
ret = esp_apptrace_file_rsp_recv(ptr, resp);
ret = esp_apptrace_file_rsp_recv(dest, ptr, resp);
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to read file data (%d)!", ret);
return 0;
@@ -286,7 +288,7 @@ size_t esp_apptrace_fread(void *ptr, size_t size, size_t nmemb, void *stream)
* fread(buf, 1 ,size, file);
* So, total read bytes count returns
*/
return resp / size; // return the number of items read
return resp/size; // return the number of items read
}
static void esp_apptrace_fseek_args_prepare(uint8_t *buf, void *priv)
@@ -298,7 +300,7 @@ static void esp_apptrace_fseek_args_prepare(uint8_t *buf, void *priv)
memcpy(buf + sizeof(args->file) + sizeof(args->offset), &args->whence, sizeof(args->whence));
}
int esp_apptrace_fseek(void *stream, long offset, int whence)
int esp_apptrace_fseek(esp_apptrace_dest_t dest, void *stream, long offset, int whence)
{
esp_apptrace_fseek_args_t cmd_args;
@@ -307,8 +309,8 @@ int esp_apptrace_fseek(void *stream, long offset, int whence)
cmd_args.file = stream;
cmd_args.offset = offset;
cmd_args.whence = whence;
esp_err_t ret = esp_apptrace_file_cmd_send(ESP_APPTRACE_FILE_CMD_FSEEK, esp_apptrace_fseek_args_prepare,
&cmd_args, sizeof(cmd_args));
esp_err_t ret = esp_apptrace_file_cmd_send(dest, ESP_APPTRACE_FILE_CMD_FSEEK, esp_apptrace_fseek_args_prepare,
&cmd_args, sizeof(cmd_args));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to send file cmd (%d)!", ret);
return -1;
@@ -316,7 +318,7 @@ int esp_apptrace_fseek(void *stream, long offset, int whence)
// now read the answer
int resp;
ret = esp_apptrace_file_rsp_recv((uint8_t *)&resp, sizeof(resp));
ret = esp_apptrace_file_rsp_recv(dest, (uint8_t *)&resp, sizeof(resp));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to read response (%d)!", ret);
return -1;
@@ -332,13 +334,13 @@ static void esp_apptrace_ftell_args_prepare(uint8_t *buf, void *priv)
memcpy(buf, &args->file, sizeof(args->file));
}
int esp_apptrace_ftell(void *stream)
int esp_apptrace_ftell(esp_apptrace_dest_t dest, void *stream)
{
esp_apptrace_ftell_args_t cmd_args;
cmd_args.file = stream;
esp_err_t ret = esp_apptrace_file_cmd_send(ESP_APPTRACE_FILE_CMD_FTELL, esp_apptrace_ftell_args_prepare,
&cmd_args, sizeof(cmd_args));
esp_err_t ret = esp_apptrace_file_cmd_send(dest, ESP_APPTRACE_FILE_CMD_FTELL, esp_apptrace_ftell_args_prepare,
&cmd_args, sizeof(cmd_args));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to send file cmd (%d)!", ret);
return -1;
@@ -346,7 +348,7 @@ int esp_apptrace_ftell(void *stream)
// now read the answer
int resp;
ret = esp_apptrace_file_rsp_recv((uint8_t *)&resp, sizeof(resp));
ret = esp_apptrace_file_rsp_recv(dest, (uint8_t *)&resp, sizeof(resp));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to read response (%d)!", ret);
return -1;
@@ -355,10 +357,10 @@ int esp_apptrace_ftell(void *stream)
return resp;
}
int esp_apptrace_fstop(void)
int esp_apptrace_fstop(esp_apptrace_dest_t dest)
{
ESP_EARLY_LOGV(TAG, "%s", __func__);
esp_err_t ret = esp_apptrace_file_cmd_send(ESP_APPTRACE_FILE_CMD_STOP, NULL, NULL, 0);
esp_err_t ret = esp_apptrace_file_cmd_send(dest, ESP_APPTRACE_FILE_CMD_STOP, NULL, NULL, 0);
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to send files transfer stop cmd (%d)!", ret);
}
@@ -372,13 +374,13 @@ static void esp_apptrace_feof_args_prepare(uint8_t *buf, void *priv)
memcpy(buf, &args->file, sizeof(args->file));
}
int esp_apptrace_feof(void *stream)
int esp_apptrace_feof(esp_apptrace_dest_t dest, void *stream)
{
esp_apptrace_feof_args_t cmd_args;
cmd_args.file = stream;
esp_err_t ret = esp_apptrace_file_cmd_send(ESP_APPTRACE_FILE_CMD_FEOF, esp_apptrace_feof_args_prepare,
&cmd_args, sizeof(cmd_args));
esp_err_t ret = esp_apptrace_file_cmd_send(dest, ESP_APPTRACE_FILE_CMD_FEOF, esp_apptrace_feof_args_prepare,
&cmd_args, sizeof(cmd_args));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to send file cmd (%d)!", ret);
return EOF;
@@ -386,7 +388,7 @@ int esp_apptrace_feof(void *stream)
// now read the answer
int resp;
ret = esp_apptrace_file_rsp_recv((uint8_t *)&resp, sizeof(resp));
ret = esp_apptrace_file_rsp_recv(dest, (uint8_t *)&resp, sizeof(resp));
if (ret != ESP_OK) {
ESP_EARLY_LOGE(TAG, "Failed to read response (%d)!", ret);
return EOF;
@@ -394,3 +396,5 @@ int esp_apptrace_feof(void *stream)
return resp;
}
#endif

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2017-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2017-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -8,7 +8,6 @@
#include <stdarg.h>
#include "esp_err.h"
#include "esp_app_trace_config.h"
#include "esp_app_trace_util.h" // ESP_APPTRACE_TMO_INFINITE
#ifdef __cplusplus
@@ -16,70 +15,82 @@ extern "C" {
#endif
/**
* @brief Initializes application tracing module for the selected destination and configuration.
* Application trace data destinations bits.
*/
typedef enum {
ESP_APPTRACE_DEST_JTAG = 1, ///< JTAG destination
ESP_APPTRACE_DEST_TRAX = ESP_APPTRACE_DEST_JTAG, ///< xxx_TRAX name is obsolete, use more common xxx_JTAG
ESP_APPTRACE_DEST_UART, ///< UART destination
ESP_APPTRACE_DEST_MAX = ESP_APPTRACE_DEST_UART+1,
ESP_APPTRACE_DEST_NUM
} esp_apptrace_dest_t;
/**
* @brief Initializes application tracing module.
*
* @note Should be called before any esp_apptrace_xxx call.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_apptrace_init(const esp_apptrace_config_t *config);
esp_err_t esp_apptrace_init(void);
/**
* @brief Configures down buffer.
*
* @note Needs to be called before attempting to receive any data using esp_apptrace_down_buffer_get and
* esp_apptrace_read. This function does not protect internal data by lock.
* @note Needs to be called before attempting to receive any data using esp_apptrace_down_buffer_get and esp_apptrace_read.
* This function does not protect internal data by lock.
*
* @param buf Address of buffer to use for down channel (host to target) data.
* @param size Size of the buffer.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_apptrace_down_buffer_config(uint8_t *buf, uint32_t size);
void esp_apptrace_down_buffer_config(uint8_t *buf, uint32_t size);
/**
* @brief Allocates buffer for trace data.
* Once the data in the buffer is ready to be sent, esp_apptrace_buffer_put must be called to indicate it.
*
* @param dest Indicates HW interface to send data.
* @param size Size of data to write to trace buffer.
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
*
* @return non-NULL on success, otherwise NULL.
*/
uint8_t *esp_apptrace_buffer_get(uint32_t size, uint32_t tmo);
uint8_t *esp_apptrace_buffer_get(esp_apptrace_dest_t dest, uint32_t size, uint32_t tmo);
/**
* @brief Indicates that the data in the buffer is ready to be sent.
* This function is a counterpart of and must be preceded by esp_apptrace_buffer_get.
*
* @param dest Indicates HW interface to send data. Should be identical to the same parameter in call to esp_apptrace_buffer_get.
* @param ptr Address of trace buffer to release. Should be the value returned by call to esp_apptrace_buffer_get.
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_apptrace_buffer_put(uint8_t *ptr, uint32_t tmo);
esp_err_t esp_apptrace_buffer_put(esp_apptrace_dest_t dest, uint8_t *ptr, uint32_t tmo);
/**
* @brief Writes data to trace buffer.
*
* @param dest Indicates HW interface to send data.
* @param data Address of data to write to trace buffer.
* @param size Size of data to write to trace buffer.
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_apptrace_write(const void *data, uint32_t size, uint32_t tmo);
esp_err_t esp_apptrace_write(esp_apptrace_dest_t dest, const void *data, uint32_t size, uint32_t tmo);
/**
* @brief vprintf-like function to send log messages to host via specified HW interface.
*
* @param dest Indicates HW interface to send data.
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
* @param fmt Address of format string.
* @param ap List of arguments.
*
* @return Number of bytes written.
*/
int esp_apptrace_vprintf_to(uint32_t tmo, const char *fmt, va_list ap);
int esp_apptrace_vprintf_to(esp_apptrace_dest_t dest, uint32_t tmo, const char *fmt, va_list ap);
/**
* @brief vprintf-like function to send log messages to host.
@@ -94,198 +105,172 @@ int esp_apptrace_vprintf(const char *fmt, va_list ap);
/**
* @brief Flushes remaining data in trace buffer to host.
*
* @param dest Indicates HW interface to flush data on.
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_apptrace_flush(uint32_t tmo);
esp_err_t esp_apptrace_flush(esp_apptrace_dest_t dest, uint32_t tmo);
/**
* @brief Flushes remaining data in trace buffer to host without locking internal data.
* This is a special version of esp_apptrace_flush which should be called from panic handler.
*
* @param min_sz Threshold for flushing data. If current filling level is above this value, data will be flushed. JTAG destinations only.
* @param dest Indicates HW interface to flush data on.
* @param min_sz Threshold for flushing data. If current filling level is above this value, data will be flushed. TRAX destinations only.
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_apptrace_flush_nolock(uint32_t min_sz, uint32_t tmo);
esp_err_t esp_apptrace_flush_nolock(esp_apptrace_dest_t dest, uint32_t min_sz, uint32_t tmo);
/**
* @brief Reads host data from trace buffer.
*
* @param dest Indicates HW interface to read the data on.
* @param data Address of buffer to put data from trace buffer.
* @param size Pointer to store size of read data. Before call to this function pointed memory must hold requested size of data
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_apptrace_read(void *data, uint32_t *size, uint32_t tmo);
esp_err_t esp_apptrace_read(esp_apptrace_dest_t dest, void *data, uint32_t *size, uint32_t tmo);
/**
* @brief Retrieves incoming data buffer if any.
* Once data in the buffer is processed, esp_apptrace_down_buffer_put must be called to indicate it.
*
* @param dest Indicates HW interface to receive data.
* @param size Address to store size of available data in down buffer. Must be initialized with requested value.
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
*
* @return non-NULL on success, otherwise NULL.
*/
uint8_t *esp_apptrace_down_buffer_get(uint32_t *size, uint32_t tmo);
uint8_t *esp_apptrace_down_buffer_get(esp_apptrace_dest_t dest, uint32_t *size, uint32_t tmo);
/**
* @brief Indicates that the data in the down buffer is processed.
* This function is a counterpart of and must be preceded by esp_apptrace_down_buffer_get.
*
* @param dest Indicates HW interface to receive data. Should be identical to the same parameter in call to esp_apptrace_down_buffer_get.
* @param ptr Address of trace buffer to release. Should be the value returned by call to esp_apptrace_down_buffer_get.
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_apptrace_down_buffer_put(uint8_t *ptr, uint32_t tmo);
esp_err_t esp_apptrace_down_buffer_put(esp_apptrace_dest_t dest, uint8_t *ptr, uint32_t tmo);
/**
* @brief Checks whether host is connected.
*
* @param dest Indicates HW interface to use.
*
* @return true if host is connected, otherwise false
*/
bool esp_apptrace_host_is_connected(void);
/**
* @brief Gets the destination of the application trace.
*
* @return The destination of the application trace.
*/
esp_apptrace_dest_t esp_apptrace_get_destination(void);
/**
* @brief Sets the header size of the application trace packet.
*
* @param header_size The header size to set.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_apptrace_set_header_size(esp_apptrace_header_size_t header_size);
bool esp_apptrace_host_is_connected(esp_apptrace_dest_t dest);
/**
* @brief Opens file on host.
* This function has the same semantic as 'fopen' except for the first argument.
* This function has the same semantic as 'fopen' except for the first argument.
*
* @param dest Indicates HW interface to use.
* @param path Path to file.
* @param mode Mode string. See fopen for details.
*
* @return non zero file handle on success, otherwise 0
*/
void *esp_apptrace_fopen(const char *path, const char *mode);
void *esp_apptrace_fopen(esp_apptrace_dest_t dest, const char *path, const char *mode);
/**
* @brief Closes file on host.
* This function has the same semantic as 'fclose' except for the first argument.
* This function has the same semantic as 'fclose' except for the first argument.
*
* @param dest Indicates HW interface to use.
* @param stream File handle returned by esp_apptrace_fopen.
*
* @return Zero on success, otherwise non-zero. See fclose for details.
*/
int esp_apptrace_fclose(void *stream);
int esp_apptrace_fclose(esp_apptrace_dest_t dest, void *stream);
/**
* @brief Writes to file on host.
* This function has the same semantic as 'fwrite' except for the first argument.
* This function has the same semantic as 'fwrite' except for the first argument.
*
* @param ptr Address of data to write.
* @param size Size of an item.
* @param dest Indicates HW interface to use.
* @param ptr Address of data to write.
* @param size Size of an item.
* @param nmemb Number of items to write.
* @param stream File handle returned by esp_apptrace_fopen.
*
* @return Number of written items. See fwrite for details.
*/
size_t esp_apptrace_fwrite(const void *ptr, size_t size, size_t nmemb, void *stream);
size_t esp_apptrace_fwrite(esp_apptrace_dest_t dest, const void *ptr, size_t size, size_t nmemb, void *stream);
/**
* @brief Read file on host.
* This function has the same semantic as 'fread' except for the first argument.
* This function has the same semantic as 'fread' except for the first argument.
*
* @param ptr Address to store read data.
* @param size Size of an item.
* @param dest Indicates HW interface to use.
* @param ptr Address to store read data.
* @param size Size of an item.
* @param nmemb Number of items to read.
* @param stream File handle returned by esp_apptrace_fopen.
*
* @return Number of read items. See fread for details.
*/
size_t esp_apptrace_fread(void *ptr, size_t size, size_t nmemb, void *stream);
size_t esp_apptrace_fread(esp_apptrace_dest_t dest, void *ptr, size_t size, size_t nmemb, void *stream);
/**
* @brief Set position indicator in file on host.
* This function has the same semantic as 'fseek' except for the first argument.
* This function has the same semantic as 'fseek' except for the first argument.
*
* @param dest Indicates HW interface to use.
* @param stream File handle returned by esp_apptrace_fopen.
* @param offset Offset. See fseek for details.
* @param whence Position in file. See fseek for details.
*
* @return Zero on success, otherwise non-zero. See fseek for details.
*/
int esp_apptrace_fseek(void *stream, long offset, int whence);
int esp_apptrace_fseek(esp_apptrace_dest_t dest, void *stream, long offset, int whence);
/**
* @brief Get current position indicator for file on host.
* This function has the same semantic as 'ftell' except for the first argument.
* This function has the same semantic as 'ftell' except for the first argument.
*
* @param dest Indicates HW interface to use.
* @param stream File handle returned by esp_apptrace_fopen.
*
* @return Current position in file. See ftell for details.
*/
int esp_apptrace_ftell(void *stream);
int esp_apptrace_ftell(esp_apptrace_dest_t dest, void *stream);
/**
* @brief Indicates to the host that all file operations are complete.
* This function should be called after all file operations are finished and
* indicate to the host that it can perform cleanup operations (close open files etc.).
* This function should be called after all file operations are finished and
* indicate to the host that it can perform cleanup operations (close open files etc.).
*
* @param dest Indicates HW interface to use.
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
int esp_apptrace_fstop(void);
int esp_apptrace_fstop(esp_apptrace_dest_t dest);
/**
* @brief Test end-of-file indicator on a stream.
* This function has the same semantic as 'feof' except for the first argument.
* This function has the same semantic as 'feof' except for the first argument.
*
* @param dest Indicates HW interface to use.
* @param stream File handle returned by esp_apptrace_fopen.
*
* @return Non-Zero if end-of-file indicator is set for stream. See feof for details.
*/
int esp_apptrace_feof(void *stream);
int esp_apptrace_feof(esp_apptrace_dest_t dest, void *stream);
#if !CONFIG_APPTRACE_DEST_UART // JTAG or NONE
#define APPTRACE_JTAG_CONFIG_DEFAULT() { \
.dest = ESP_APPTRACE_DEST_JTAG, \
.dest_cfg.jtag = {0}, \
.flush_tmo = CONFIG_APPTRACE_ONPANIC_HOST_FLUSH_TMO, \
.flush_thresh = CONFIG_APPTRACE_POSTMORTEM_FLUSH_THRESH, \
}
#endif
#if !CONFIG_APPTRACE_DEST_JTAG // UART or NONE
#define APPTRACE_UART_CONFIG_DEFAULT() { \
.dest = ESP_APPTRACE_DEST_UART, \
.dest_cfg.uart = { \
.uart_num = CONFIG_APPTRACE_DEST_UART_NUM, \
.tx_pin_num = CONFIG_APPTRACE_UART_TX_GPIO, \
.rx_pin_num = CONFIG_APPTRACE_UART_RX_GPIO, \
.baud_rate = CONFIG_APPTRACE_UART_BAUDRATE, \
.tx_buff_size = CONFIG_APPTRACE_UART_TX_BUFF_SIZE, \
.tx_msg_size = CONFIG_APPTRACE_UART_TX_MSG_SIZE, \
}, \
.flush_tmo = CONFIG_APPTRACE_ONPANIC_HOST_FLUSH_TMO, \
.flush_thresh = CONFIG_APPTRACE_POSTMORTEM_FLUSH_THRESH, \
}
#endif
// Default picks JTAG if available, otherwise UART
#if !CONFIG_APPTRACE_DEST_UART
#define APPTRACE_CONFIG_DEFAULT() APPTRACE_JTAG_CONFIG_DEFAULT()
#else
#define APPTRACE_CONFIG_DEFAULT() APPTRACE_UART_CONFIG_DEFAULT()
#endif
/**
* @brief Triggers gcov info dump.
* This function waits for the host to connect to target before dumping data.
*/
void esp_gcov_dump(void);
#ifdef __cplusplus
}

View File

@@ -1,51 +0,0 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ESP_APP_TRACE_CONFIG_H_
#define ESP_APP_TRACE_CONFIG_H_
#include "sdkconfig.h"
/* Default configurations for runtime selection (APPTRACE_DEST_ALL)
* These values are used when building with both JTAG and UART enabled
* to allow runtime selection. You can switch between destinations
* via esp_apptrace_get_user_params(). If this function is
* not provided by the application, JTAG is used by default with the
* configuration defined below. See esp_app_trace.h for details.
*/
#if !defined(CONFIG_APPTRACE_UART_TX_GPIO) || !defined(CONFIG_APPTRACE_UART_RX_GPIO)
#include "soc/uart_pins.h"
#endif
#ifndef CONFIG_APPTRACE_BUF_SIZE
#define CONFIG_APPTRACE_BUF_SIZE 16384
#endif
#ifndef CONFIG_APPTRACE_UART_TX_BUFF_SIZE
#define CONFIG_APPTRACE_UART_TX_BUFF_SIZE 4096
#endif
#ifndef CONFIG_APPTRACE_UART_TX_MSG_SIZE
#define CONFIG_APPTRACE_UART_TX_MSG_SIZE 128
#endif
#ifndef CONFIG_APPTRACE_UART_BAUDRATE
#define CONFIG_APPTRACE_UART_BAUDRATE 1000000
#endif
#ifndef CONFIG_APPTRACE_UART_TX_GPIO
#define CONFIG_APPTRACE_UART_TX_GPIO U1TXD_GPIO_NUM
#endif
#ifndef CONFIG_APPTRACE_UART_RX_GPIO
#define CONFIG_APPTRACE_UART_RX_GPIO U1RXD_GPIO_NUM
#endif
#ifndef CONFIG_APPTRACE_DEST_UART_NUM
#define CONFIG_APPTRACE_DEST_UART_NUM 1
#endif
#endif /* ESP_APP_TRACE_CONFIG_H_ */

View File

@@ -1,95 +0,0 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ESP_APP_TRACE_TYPES_H_
#define ESP_APP_TRACE_TYPES_H_
#include <stdint.h>
#include "spinlock.h"
#ifdef __cplusplus
extern "C" {
#endif
/** Structure which holds data necessary for measuring time intervals.
*
* After initialization via esp_apptrace_tmo_init() user needs to call esp_apptrace_tmo_check()
* periodically to check timeout for expiration.
*/
typedef struct {
int64_t start; ///< time interval start (in us)
int64_t tmo; ///< timeout value (in us)
int64_t elapsed; ///< elapsed time (in us)
} esp_apptrace_tmo_t;
/** Tracing module synchronization lock */
typedef struct {
spinlock_t mux;
unsigned int int_state;
} esp_apptrace_lock_t;
/** Ring buffer control structure.
*
* @note For purposes of application tracing module if there is no enough space for user data and write pointer can be wrapped
* current ring buffer size can be temporarily shrunk in order to provide buffer with requested size.
*/
typedef struct {
uint8_t *data; ///< pointer to data storage
volatile uint32_t size; ///< size of data storage
volatile uint32_t cur_size; ///< current size of data storage
volatile uint32_t rd; ///< read pointer
volatile uint32_t wr; ///< write pointer
} esp_apptrace_rb_t;
/**
* Application trace data destinations
*/
typedef enum {
ESP_APPTRACE_DEST_JTAG,
ESP_APPTRACE_DEST_UART,
} esp_apptrace_dest_t;
/**
* Application trace configuration for UART destination
*/
typedef struct {
int uart_num; ///< Port number
int tx_pin_num; ///< TX pin number
int rx_pin_num; ///< RX pin number
int baud_rate; ///< Baud rate
uint32_t tx_buff_size; ///< TX ring buffer size
uint32_t tx_msg_size; ///< Maximum size of the single message to transfer.
} esp_apptrace_uart_config_t;
/**
* Application trace trace header size in bytes. It is 2 bytes for SEGGER SystemView
*/
typedef enum {
ESP_APPTRACE_HEADER_SIZE_16 = 2,
ESP_APPTRACE_HEADER_SIZE_32 = 4,
} esp_apptrace_header_size_t;
/**
* Application trace configuration
*/
typedef struct {
esp_apptrace_dest_t dest; ///< Destination type (JTAG or UART)
union {
esp_apptrace_uart_config_t uart; ///< UART configuration (when dest is ESP_APPTRACE_DEST_UART)
struct { ///< Reserved for JTAG (when dest is ESP_APPTRACE_DEST_JTAG)
uint8_t _unused;
} jtag;
} dest_cfg; ///< Destination-specific configuration
uint32_t flush_tmo; ///< Flush timeout in milliseconds
uint32_t flush_thresh; ///< Flush threshold in bytes
} esp_apptrace_config_t;
#ifdef __cplusplus
}
#endif
#endif /* ESP_APP_TRACE_TYPES_H_ */

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2017-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2017-2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -10,23 +10,34 @@
extern "C" {
#endif
#include "freertos/FreeRTOS.h"
#include "esp_err.h"
#include "esp_timer.h"
#include "esp_app_trace_types.h"
/** Infinite waiting timeout */
#define ESP_APPTRACE_TMO_INFINITE ((uint32_t)-1)
/** Structure which holds data necessary for measuring time intervals.
*
* After initialization via esp_apptrace_tmo_init() user needs to call esp_apptrace_tmo_check()
* periodically to check timeout for expiration.
*/
typedef struct {
int64_t start; ///< time interval start (in us)
int64_t tmo; ///< timeout value (in us)
int64_t elapsed; ///< elapsed time (in us)
} esp_apptrace_tmo_t;
/**
* @brief Initializes timeout structure.
*
* @param tmo Pointer to timeout structure to be initialized.
* @param user_tmo Timeout value (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinitely.
* @param user_tmo Timeout value (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinetly.
*/
static inline void esp_apptrace_tmo_init(esp_apptrace_tmo_t *tmo, uint32_t user_tmo)
{
tmo->start = esp_timer_get_time();
tmo->tmo = user_tmo == ESP_APPTRACE_TMO_INFINITE ? (int64_t) -1 : (int64_t)user_tmo;
tmo->tmo = user_tmo == ESP_APPTRACE_TMO_INFINITE ? (int64_t)-1 : (int64_t)user_tmo;
tmo->elapsed = 0;
}
@@ -41,15 +52,25 @@ esp_err_t esp_apptrace_tmo_check(esp_apptrace_tmo_t *tmo);
static inline uint32_t esp_apptrace_tmo_remaining_us(esp_apptrace_tmo_t *tmo)
{
return tmo->tmo != (int64_t) -1 ? (tmo->elapsed - tmo->tmo) : ESP_APPTRACE_TMO_INFINITE;
return tmo->tmo != (int64_t)-1 ? (tmo->elapsed - tmo->tmo) : ESP_APPTRACE_TMO_INFINITE;
}
/** Tracing module synchronization lock */
typedef struct {
spinlock_t mux;
unsigned int_state;
} esp_apptrace_lock_t;
/**
* @brief Initializes lock structure.
*
* @param lock Pointer to lock structure to be initialized.
*/
void esp_apptrace_lock_init(esp_apptrace_lock_t *lock);
static inline void esp_apptrace_lock_init(esp_apptrace_lock_t *lock)
{
portMUX_INITIALIZE(&lock->mux);
lock->int_state = 0;
}
/**
* @brief Tries to acquire lock in specified time period.
@@ -70,6 +91,19 @@ esp_err_t esp_apptrace_lock_take(esp_apptrace_lock_t *lock, esp_apptrace_tmo_t *
*/
esp_err_t esp_apptrace_lock_give(esp_apptrace_lock_t *lock);
/** Ring buffer control structure.
*
* @note For purposes of application tracing module if there is no enough space for user data and write pointer can be wrapped
* current ring buffer size can be temporarily shrinked in order to provide buffer with requested size.
*/
typedef struct {
uint8_t *data; ///< pointer to data storage
volatile uint32_t size; ///< size of data storage
volatile uint32_t cur_size; ///< current size of data storage
volatile uint32_t rd; ///< read pointer
volatile uint32_t wr; ///< write pointer
} esp_apptrace_rb_t;
/**
* @brief Initializes ring buffer control structure.
*

View File

@@ -1,69 +0,0 @@
/*
* SPDX-FileCopyrightText: 2017-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ESP_DBG_STUBS_H_
#define ESP_DBG_STUBS_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "esp_err.h"
/**
* Debug stubs entries IDs
*/
typedef enum {
ESP_DBG_STUB_MAGIC_NUM,
ESP_DBG_STUB_TABLE_SIZE,
ESP_DBG_STUB_CONTROL_DATA, ///< stubs descriptor entry
ESP_DBG_STUB_ENTRY_FIRST,
ESP_DBG_STUB_ENTRY_GCOV ///< GCOV entry
= ESP_DBG_STUB_ENTRY_FIRST,
ESP_DBG_STUB_ENTRY_CAPABILITIES,
ESP_DBG_STUB_ENTRY_MAX
} esp_dbg_stub_id_t;
#define ESP_DBG_STUB_MAGIC_NUM_VAL 0xFEEDBEEF
#define ESP_DBG_STUB_CAP_GCOV_TASK (1 << 0)
/**
* @brief Initializes debug stubs.
*
* @note Must be called after esp_apptrace_init() if app tracing is enabled.
*/
void esp_dbg_stubs_init(void);
/**
* @brief Initializes application tracing module.
*
* @note Should be called before any esp_apptrace_xxx call.
*
* @param id Stub ID.
* @param entry Stub entry. Usually it is stub entry function address,
* but can be any value meaningful for OpenOCD command/code
* such as capabilities
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_dbg_stub_entry_set(esp_dbg_stub_id_t id, uint32_t entry);
/**
* @brief Retrieves the corresponding stub entry
*
* @param id Stub ID.
* @param entry Stub entry. Usually it is stub entry function address,
* but can be any value meaningful for OpenOCD command/code
* such as capabilities
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_dbg_stub_entry_get(esp_dbg_stub_id_t id, uint32_t *entry);
#ifdef __cplusplus
}
#endif
#endif // ESP_DBG_STUBS_H_

View File

@@ -0,0 +1,80 @@
/*
* SPDX-FileCopyrightText: 2018-2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ESP_SYSVIEW_TRACE_H_
#define ESP_SYSVIEW_TRACE_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stdarg.h>
#include "esp_err.h"
#include "SEGGER_RTT.h" // SEGGER_RTT_ESP_Flush
#include "esp_app_trace_util.h" // ESP_APPTRACE_TMO_INFINITE
/**
* @brief Flushes remaining data in SystemView trace buffer to host.
*
* @param tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinetly.
*
* @return ESP_OK.
*/
static inline esp_err_t esp_sysview_flush(uint32_t tmo)
{
SEGGER_RTT_ESP_Flush(0, tmo);
return ESP_OK;
}
/**
* @brief vprintf-like function to sent log messages to the host.
*
* @param format Address of format string.
* @param args List of arguments.
*
* @return Number of bytes written.
*/
int esp_sysview_vprintf(const char * format, va_list args);
/**
* @brief Starts SystemView heap tracing.
*
* @param tmo Timeout (in us) to wait for the host to be connected. Use -1 to wait forever.
*
* @return ESP_OK on success, ESP_ERR_TIMEOUT if operation has been timed out.
*/
esp_err_t esp_sysview_heap_trace_start(uint32_t tmo);
/**
* @brief Stops SystemView heap tracing.
*
* @return ESP_OK.
*/
esp_err_t esp_sysview_heap_trace_stop(void);
/**
* @brief Sends heap allocation event to the host.
*
* @param addr Address of allocated block.
* @param size Size of allocated block.
* @param callers Pointer to array with callstack addresses.
* Array size must be CONFIG_HEAP_TRACING_STACK_DEPTH.
*/
void esp_sysview_heap_trace_alloc(void *addr, uint32_t size, const void *callers);
/**
* @brief Sends heap de-allocation event to the host.
*
* @param addr Address of de-allocated block.
* @param callers Pointer to array with callstack addresses.
* Array size must be CONFIG_HEAP_TRACING_STACK_DEPTH.
*/
void esp_sysview_heap_trace_free(void *addr, const void *callers);
#ifdef __cplusplus
}
#endif
#endif //ESP_SYSVIEW_TRACE_H_

View File

@@ -1,11 +1,23 @@
[mapping:app_trace]
archive: libapp_trace.a
entries:
if ESP_TRACE_TRANSPORT_APPTRACE = y:
app_trace (noflash)
app_trace_util (noflash)
if APPTRACE_DEST_JTAG = y || APPTRACE_DEST_ALL = y:
port_jtag (noflash)
app_trace_membufs_proto (noflash)
if APPTRACE_DEST_UART = y || APPTRACE_DEST_ALL = y:
port_uart (noflash)
app_trace (noflash)
port_uart (noflash)
app_trace_util (noflash)
if APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE:
app_trace_membufs_proto (noflash)
if APPTRACE_DEST_JTAG = y:
port (noflash)
if APPTRACE_SV_ENABLE = y:
SEGGER_SYSVIEW (noflash)
SEGGER_RTT_esp (noflash)
SEGGER_SYSVIEW_Config_FreeRTOS (noflash)
SEGGER_SYSVIEW_FreeRTOS (noflash)
[mapping:app_trace_driver]
archive: libesp_driver_gptimer.a
entries:
if APPTRACE_SV_TS_SOURCE_GPTIMER = y:
gptimer (noflash)
else:
* (default)

View File

@@ -15,7 +15,7 @@ extern "C" {
/** Apptrace HW interface. */
typedef struct {
esp_err_t (*init)(void *hw_data, const esp_apptrace_config_t *config);
esp_err_t (*init)(void *hw_data);
uint8_t *(*get_up_buffer)(void *hw_data, uint32_t, esp_apptrace_tmo_t *);
esp_err_t (*put_up_buffer)(void *hw_data, uint8_t *, esp_apptrace_tmo_t *);
esp_err_t (*flush_up_buffer_nolock)(void *hw_data, uint32_t, esp_apptrace_tmo_t *);
@@ -24,7 +24,6 @@ typedef struct {
uint8_t *(*get_down_buffer)(void *hw_data, uint32_t *, esp_apptrace_tmo_t *);
esp_err_t (*put_down_buffer)(void *hw_data, uint8_t *, esp_apptrace_tmo_t *);
bool (*host_is_connected)(void *hw_data);
void (*set_header_size)(void *hw_data, esp_apptrace_header_size_t header_size);
} esp_apptrace_hw_t;
esp_apptrace_hw_t *esp_apptrace_jtag_hw_get(void **data);

View File

@@ -1,126 +1,93 @@
/*
* SPDX-FileCopyrightText: 2017-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2017-2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <inttypes.h>
#include "esp_err.h"
#include "soc/soc.h"
#include "esp_log.h"
#include "esp_cpu.h"
#include "esp_attr.h"
#include "esp_private/uart_share_hw_ctrl.h"
#include "hal/uart_hal.h"
#include "hal/gpio_hal.h"
#include "driver/uart.h"
#include "soc/uart_periph.h"
#include "esp_clk_tree.h"
#include "esp_private/esp_clk_tree_common.h"
#include "soc/gpio_periph.h"
#include "esp_rom_gpio.h"
#include "hal/uart_ll.h"
#include "esp_intr_alloc.h"
#include "esp_heap_caps.h"
#include "esp_private/esp_gpio_reserve.h"
#include "esp_app_trace_port.h"
#include "esp_app_trace_util.h"
#include "esp_app_trace_types.h"
static const char *TAG = "esp_apptrace_uart";
#include "driver/uart.h"
#include "hal/uart_ll.h"
#include "string.h"
#include "driver/gpio.h"
#ifndef MIN
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#define APPTRACE_DEST_UART (CONFIG_APPTRACE_DEST_UART0 | CONFIG_APPTRACE_DEST_UART1 | CONFIG_APPTRACE_DEST_UART2)
#define APP_TRACE_MAX_TX_BUFF_UART CONFIG_APPTRACE_UART_TX_BUFF_SIZE
#define APP_TRACE_MAX_TX_MSG_UART CONFIG_APPTRACE_UART_TX_MSG_SIZE
/** UART HW transport data */
typedef struct {
uint8_t *buffer; ///< Ring buffer data
uint32_t max_size; ///< Ring buffer maximum size (must be power of 2)
volatile uint32_t count; ///< Number of bytes currently in the buffer
volatile uint32_t head; ///< Write pointer index
volatile uint32_t tail; ///< Read pointer index
} esp_apptrace_uart_rb_t;
typedef struct {
int inited;
volatile bool tx_busy; ///< TX busy flag
uart_hal_context_t hal_ctx; ///< UART HAL context
esp_apptrace_uart_rb_t tx_ring; ///< TX ring buffer
intr_handle_t intr_handle; ///< Interrupt handle
/* TX message buffer */
uint8_t *tx_msg_buff; ///< TX message buffer to provide with get_up_buffer
uint32_t tx_msg_buff_size; ///< TX message buffer size & maximum size of the single message to transfer.
uint32_t tx_pending_msg_size; ///< Pending message size to send with put_up_buffer
/* RX message buffer */
uint8_t *rx_msg_buff; ///< RX message buffer provided with down_buffer_config function
uint32_t rx_msg_buff_size; ///< RX message buffer size provided with down_buffer_config function
uint8_t inited;
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_t lock; ///< Sync lock
esp_apptrace_lock_t lock; // sync lock
#endif
uart_port_t port_num;
// TX data ring buffer
uint8_t *tx_data_buff;
int32_t tx_data_buff_in;
int32_t tx_data_buff_out;
// TX message buffer
uint8_t *tx_msg_buff;
uint32_t tx_msg_buff_size;
// RX message buffer
uint8_t *down_buffer;
uint32_t down_buffer_size;
// Buffer overflow flags
bool message_buff_overflow;
bool circular_buff_overflow;
} esp_apptrace_uart_data_t;
static inline bool is_power_of_two(uint32_t n)
#if APPTRACE_DEST_UART
static esp_err_t esp_apptrace_uart_init(esp_apptrace_uart_data_t *hw_data);
static esp_err_t esp_apptrace_uart_flush(esp_apptrace_uart_data_t *hw_data, esp_apptrace_tmo_t *tmo);
static esp_err_t esp_apptrace_uart_flush_nolock(esp_apptrace_uart_data_t *hw_data, uint32_t min_sz, esp_apptrace_tmo_t *tmo);
static uint8_t *esp_apptrace_uart_up_buffer_get(esp_apptrace_uart_data_t *hw_data, uint32_t size, esp_apptrace_tmo_t *tmo);
static esp_err_t esp_apptrace_uart_up_buffer_put(esp_apptrace_uart_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
static void esp_apptrace_uart_down_buffer_config(esp_apptrace_uart_data_t *hw_data, uint8_t *buf, uint32_t size);
static uint8_t *esp_apptrace_uart_down_buffer_get(esp_apptrace_uart_data_t *hw_data, uint32_t *size, esp_apptrace_tmo_t *tmo);
static esp_err_t esp_apptrace_uart_down_buffer_put(esp_apptrace_uart_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
static bool esp_apptrace_uart_host_is_connected(esp_apptrace_uart_data_t *hw_data);
#endif // APPTRACE_DEST_UART
const static char *TAG = "esp_apptrace_uart";
esp_apptrace_hw_t *esp_apptrace_uart_hw_get(int num, void **data)
{
return n != 0 && (n & (n - 1)) == 0;
ESP_LOGD(TAG,"esp_apptrace_uart_hw_get - %i", num);
#if APPTRACE_DEST_UART
static esp_apptrace_uart_data_t s_uart_hw_data = {
};
static esp_apptrace_hw_t s_uart_hw = {
.init = (esp_err_t (*)(void *))esp_apptrace_uart_init,
.get_up_buffer = (uint8_t *(*)(void *, uint32_t, esp_apptrace_tmo_t *))esp_apptrace_uart_up_buffer_get,
.put_up_buffer = (esp_err_t (*)(void *, uint8_t *, esp_apptrace_tmo_t *))esp_apptrace_uart_up_buffer_put,
.flush_up_buffer_nolock = (esp_err_t (*)(void *, uint32_t, esp_apptrace_tmo_t *))esp_apptrace_uart_flush_nolock,
.flush_up_buffer = (esp_err_t (*)(void *, esp_apptrace_tmo_t *))esp_apptrace_uart_flush,
.down_buffer_config = (void (*)(void *, uint8_t *, uint32_t ))esp_apptrace_uart_down_buffer_config,
.get_down_buffer = (uint8_t *(*)(void *, uint32_t *, esp_apptrace_tmo_t *))esp_apptrace_uart_down_buffer_get,
.put_down_buffer = (esp_err_t (*)(void *, uint8_t *, esp_apptrace_tmo_t *))esp_apptrace_uart_down_buffer_put,
.host_is_connected = (bool (*)(void *))esp_apptrace_uart_host_is_connected,
};
s_uart_hw_data.port_num = num;
*data = &s_uart_hw_data;
return &s_uart_hw;
#else
return NULL;
#endif
}
static inline uint32_t ring_buffer_mask(const esp_apptrace_uart_rb_t *rb)
{
return rb->max_size - 1;
}
#if APPTRACE_DEST_UART
/* Get the length of the data in the ring buffer */
static inline uint32_t ring_buffer_data_len(const esp_apptrace_uart_rb_t *rb)
{
return rb->count;
}
/* Get the length of the free space in the ring buffer */
static inline uint32_t ring_buffer_free_len(const esp_apptrace_uart_rb_t *rb)
{
return rb->max_size - rb->count;
}
static inline void ring_buffer_advance_tail(esp_apptrace_uart_rb_t *rb, uint32_t count)
{
rb->tail = (rb->tail + count) & ring_buffer_mask(rb);
rb->count -= count;
}
static inline void ring_buffer_advance_head(esp_apptrace_uart_rb_t *rb, uint32_t count)
{
rb->head = (rb->head + count) & ring_buffer_mask(rb);
rb->count += count;
}
static inline uint32_t ring_buffer_calc_to_send(const esp_apptrace_uart_rb_t *rb, uint32_t tx_msg_size)
{
uint32_t used = ring_buffer_data_len(rb);
if (used == 0) {
return 0;
}
uint32_t cont = rb->max_size - rb->tail;
uint32_t n = MIN(used, cont);
/* Apply message size limit if specified */
if (tx_msg_size && tx_msg_size < n) {
return tx_msg_size;
}
return n;
}
static esp_err_t esp_apptrace_uart_lock(void *hw_data, esp_apptrace_tmo_t *tmo)
static esp_err_t esp_apptrace_uart_lock(esp_apptrace_uart_data_t *hw_data, esp_apptrace_tmo_t *tmo)
{
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_uart_data_t *uart_data = hw_data;
esp_err_t ret = esp_apptrace_lock_take(&uart_data->lock, tmo);
esp_err_t ret = esp_apptrace_lock_take(&hw_data->lock, tmo);
if (ret != ESP_OK) {
return ESP_FAIL;
}
@@ -128,395 +95,254 @@ static esp_err_t esp_apptrace_uart_lock(void *hw_data, esp_apptrace_tmo_t *tmo)
return ESP_OK;
}
static esp_err_t esp_apptrace_uart_unlock(void *hw_data)
static esp_err_t esp_apptrace_uart_unlock(esp_apptrace_uart_data_t *hw_data)
{
esp_err_t ret = ESP_OK;
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_uart_data_t *uart_data = hw_data;
ret = esp_apptrace_lock_give(&uart_data->lock);
assert(ret == ESP_OK && "Failed to unlock apptrace uart lock!");
ret = esp_apptrace_lock_give(&hw_data->lock);
#endif
return ret;
}
static esp_err_t ring_buffer_put(esp_apptrace_uart_rb_t *rb, const uint8_t *data, uint32_t len)
static inline void esp_apptrace_uart_hw_init(void)
{
/* Drop oldest. Make available space if needed */
uint32_t free_len = ring_buffer_free_len(rb);
if (len > free_len) {
uint32_t need = len - free_len;
ring_buffer_advance_tail(rb, need);
ESP_APPTRACE_LOGI("Initialized UART on CPU%d", esp_cpu_get_core_id());
}
/*****************************************************************************************/
/***************************** Apptrace HW iface *****************************************/
/*****************************************************************************************/
static esp_err_t esp_apptrace_send_uart_data(esp_apptrace_uart_data_t *hw_data, const char *data, uint32_t size, esp_apptrace_tmo_t *tmo)
{
esp_err_t res = esp_apptrace_uart_lock(hw_data, tmo);
if (res != ESP_OK) {
return res;
}
// We store current out position to handle it without lock
volatile int32_t out_position = hw_data->tx_data_buff_out;
uint32_t head = rb->head;
uint32_t space_to_end = rb->max_size - head;
if (len <= space_to_end) {
memcpy(&rb->buffer[head], data, len);
int len_free = APP_TRACE_MAX_TX_BUFF_UART - (hw_data->tx_data_buff_in - out_position);
if (out_position > hw_data->tx_data_buff_in) {
len_free = out_position - hw_data->tx_data_buff_in;
}
int check_len = APP_TRACE_MAX_TX_BUFF_UART - hw_data->tx_data_buff_in;
if (size <= len_free)
{
if ( check_len >= size) {
memcpy(&hw_data->tx_data_buff[hw_data->tx_data_buff_in], data, size);
hw_data->tx_data_buff_in += size;
} else {
memcpy(&hw_data->tx_data_buff[hw_data->tx_data_buff_in], data, APP_TRACE_MAX_TX_BUFF_UART - hw_data->tx_data_buff_in);
memcpy(&hw_data->tx_data_buff[0], &data[APP_TRACE_MAX_TX_BUFF_UART - hw_data->tx_data_buff_in], size - (APP_TRACE_MAX_TX_BUFF_UART - hw_data->tx_data_buff_in));
hw_data->tx_data_buff_in = size - (APP_TRACE_MAX_TX_BUFF_UART - hw_data->tx_data_buff_in);
}
if (hw_data->tx_data_buff_in >= APP_TRACE_MAX_TX_BUFF_UART) {
hw_data->tx_data_buff_in = 0;
}
} else {
memcpy(&rb->buffer[head], data, space_to_end);
memcpy(&rb->buffer[0], &data[space_to_end], len - space_to_end);
hw_data->circular_buff_overflow = true;
}
ring_buffer_advance_head(rb, len);
if (esp_apptrace_uart_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ESP_OK;
}
static esp_err_t ring_buffer_init(esp_apptrace_uart_rb_t *rb, uint32_t size)
static void send_buff_data(esp_apptrace_uart_data_t *hw_data, esp_apptrace_tmo_t *tmo)
{
rb->buffer = heap_caps_malloc(size, MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
if (!rb->buffer) {
return ESP_ERR_NO_MEM;
if (hw_data->tx_data_buff_in == hw_data->tx_data_buff_out) {
return;
}
rb->max_size = size;
rb->count = 0;
rb->head = 0;
rb->tail = 0;
return ESP_OK;
}
static void IRAM_ATTR esp_apptrace_uart_isr_handler(void *arg)
{
esp_apptrace_uart_data_t *uart_data = arg;
esp_apptrace_uart_rb_t *rb = &uart_data->tx_ring;
uint32_t intr_status = uart_hal_get_intsts_mask(&uart_data->hal_ctx);
if (intr_status & UART_INTR_TXFIFO_EMPTY) {
uart_hal_clr_intsts_mask(&uart_data->hal_ctx, UART_INTR_TXFIFO_EMPTY);
uint32_t to_send = ring_buffer_calc_to_send(rb, uart_data->tx_msg_buff_size);
if (to_send > 0) {
uint32_t written = 0;
uart_hal_write_txfifo(&uart_data->hal_ctx, &rb->buffer[rb->tail], to_send, &written);
ring_buffer_advance_tail(rb, written);
}
/* If ring buffer is empty, disable TX interrupt */
if (ring_buffer_data_len(rb) == 0) {
uart_ll_disable_intr_mask(uart_data->hal_ctx.dev, UART_INTR_TXFIFO_EMPTY);
uart_data->tx_busy = false;
// We store current in position to handle it without lock
volatile int32_t in_position = hw_data->tx_data_buff_in;
if (in_position > hw_data->tx_data_buff_out) {
int bytes_sent = uart_write_bytes(hw_data->port_num, &hw_data->tx_data_buff[hw_data->tx_data_buff_out], in_position - hw_data->tx_data_buff_out);
hw_data->tx_data_buff_out += bytes_sent;
} else {
int bytes_sent = uart_write_bytes(hw_data->port_num, &hw_data->tx_data_buff[hw_data->tx_data_buff_out], APP_TRACE_MAX_TX_BUFF_UART - hw_data->tx_data_buff_out);
hw_data->tx_data_buff_out += bytes_sent;
if (hw_data->tx_data_buff_out >= APP_TRACE_MAX_TX_BUFF_UART) {
hw_data->tx_data_buff_out = 0;
}
}
}
static esp_err_t esp_apptrace_uart_init(void *hw_data, const esp_apptrace_config_t *config)
{
esp_err_t ret = ESP_ERR_INVALID_ARG;
uint64_t gpio_mask = 0;
esp_apptrace_uart_data_t *uart_data = hw_data;
const esp_apptrace_uart_config_t *uart_config = &config->dest_cfg.uart;
#define APP_TRACE_UART_STOP_WAIT_TMO 1000000 //us
/* Init function is called on every core, so ensure to do main setup only once */
static void esp_apptrace_send_uart_tx_task(void *arg)
{
esp_apptrace_uart_data_t *hw_data = (esp_apptrace_uart_data_t *)arg;
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, APP_TRACE_UART_STOP_WAIT_TMO);
vTaskDelay(10);
while (1) {
send_buff_data(hw_data, &tmo);
vTaskDelay(10);
if (hw_data->circular_buff_overflow == true)
{
hw_data->circular_buff_overflow = false;
ESP_LOGE(TAG, "Buffer overflow. Please increase UART baudrate, or increase UART TX ring buffer size in menuconfig.");
}
if (hw_data->message_buff_overflow == true)
{
hw_data->message_buff_overflow = false;
ESP_LOGE(TAG, "Message size more then message buffer!");
}
}
}
static const int APP_TRACE_UART_RX_BUF_SIZE = 4024;
static esp_err_t esp_apptrace_uart_init(esp_apptrace_uart_data_t *hw_data)
{
int core_id = esp_cpu_get_core_id();
if (core_id == 0) {
if (uart_config->uart_num == CONFIG_ESP_CONSOLE_UART_NUM) {
ESP_APPTRACE_LOGE("Application trace UART and console UART cannot use the same port number");
return ESP_ERR_INVALID_ARG;
hw_data->tx_data_buff = (uint8_t *)heap_caps_malloc(APP_TRACE_MAX_TX_BUFF_UART, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT);
if (hw_data->tx_data_buff == NULL){
return ESP_ERR_NO_MEM;
}
if (uart_config->uart_num >= SOC_UART_HP_NUM) {
ESP_APPTRACE_LOGE("UART port number %d is not supported!", uart_config->uart_num);
return ESP_ERR_NOT_SUPPORTED;
hw_data->tx_data_buff_in = 0;
hw_data->tx_data_buff_out = 0;
hw_data->tx_msg_buff = (uint8_t *)heap_caps_malloc(APP_TRACE_MAX_TX_MSG_UART, MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT);
if (hw_data->tx_msg_buff == NULL)
{
return ESP_ERR_NO_MEM;
}
hw_data->tx_msg_buff_size = 0;
hw_data->down_buffer_size = 0;
hw_data->message_buff_overflow = false;
hw_data->circular_buff_overflow = false;
if (GPIO_IS_VALID_GPIO(uart_config->tx_pin_num)) {
gpio_mask |= BIT64(uart_config->tx_pin_num);
}
if (GPIO_IS_VALID_GPIO(uart_config->rx_pin_num)) {
gpio_mask |= BIT64(uart_config->rx_pin_num);
}
if (gpio_mask == 0) {
ESP_LOGE(TAG, "No valid GPIOs to reserve");
return ESP_ERR_INVALID_STATE;
}
const uart_config_t uart_config = {
.baud_rate = CONFIG_APPTRACE_UART_BAUDRATE,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_DEFAULT,
};
ESP_LOGI(TAG, "UART baud rate: %i", CONFIG_APPTRACE_UART_BAUDRATE);
// We won't use a buffer for sending data.
esp_err_t err = uart_driver_install(hw_data->port_num, APP_TRACE_UART_RX_BUF_SIZE, APP_TRACE_UART_RX_BUF_SIZE, 0, NULL, 0);
assert((err == ESP_OK) && "Not possible to install UART. Please check and change menuconfig parameters!");
err = uart_param_config(hw_data->port_num, &uart_config);
assert((err == ESP_OK) && "Not possible to configure UART. Please check and change menuconfig parameters!");
err = uart_set_pin(hw_data->port_num, CONFIG_APPTRACE_UART_TX_GPIO, CONFIG_APPTRACE_UART_RX_GPIO, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
assert((err == ESP_OK) && "Not possible to configure UART RX/TX pins. Please check and change menuconfig parameters!");
uint64_t r = esp_gpio_reserve(gpio_mask);
if (r & gpio_mask) {
ESP_LOGE(TAG, "GPIO(s) are already reserved: 0x%"PRIx64, r & gpio_mask);
return ESP_ERR_INVALID_STATE;
}
uart_data->hal_ctx.dev = UART_LL_GET_HW(uart_config->uart_num);
HP_UART_BUS_CLK_ATOMIC() {
uart_ll_enable_bus_clock(uart_config->uart_num, true);
uart_ll_reset_register(uart_config->uart_num);
}
HP_UART_SRC_CLK_ATOMIC() {
uart_ll_sclk_enable(uart_data->hal_ctx.dev);
}
uint32_t sclk_hz;
esp_clk_tree_src_get_freq_hz(UART_SCLK_DEFAULT, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &sclk_hz);
/* Enable the default clock source */
esp_clk_tree_enable_src(UART_SCLK_DEFAULT, true);
/* Initialize UART HAL (sets default 8N1 mode) */
uart_hal_init(&uart_data->hal_ctx, uart_config->uart_num);
ESP_LOGI(TAG, "uart_hal_init: %d", uart_config->uart_num);
HP_UART_SRC_CLK_ATOMIC() {
uart_hal_set_sclk(&uart_data->hal_ctx, UART_SCLK_DEFAULT);
uart_hal_set_baudrate(&uart_data->hal_ctx, uart_config->baud_rate, sclk_hz);
}
/* Configure FIFO thresholds */
uart_hal_set_txfifo_empty_thr(&uart_data->hal_ctx, 16); /* Slow down IRQ rate */
uart_hal_set_rxfifo_full_thr(&uart_data->hal_ctx, 1);
/* Initialize TX ring buffer */
if (uart_config->tx_buff_size == 0 || !is_power_of_two(uart_config->tx_buff_size)) {
ESP_APPTRACE_LOGE("TX ring buffer size (%u) must be a power of two and greater than 0",
uart_config->tx_buff_size);
goto err_init_ring_buff;
}
ret = ring_buffer_init(&uart_data->tx_ring, uart_config->tx_buff_size);
if (ret != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to initialize TX ring buffer");
goto err_init_ring_buff;
}
/* Initialize TX message buffer for providing with get_up_buffer */
uart_data->tx_msg_buff_size = uart_config->tx_msg_size;
uart_data->tx_msg_buff = heap_caps_malloc(uart_data->tx_msg_buff_size, MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
if (uart_data->tx_msg_buff == NULL) {
ESP_APPTRACE_LOGE("Failed to initialize TX message buffer");
ret = ESP_ERR_NO_MEM;
goto err_alloc_msg_buff;
}
/* Disable all interrupts and clear status */
uart_ll_disable_intr_mask(uart_data->hal_ctx.dev, UART_LL_INTR_MASK);
uart_ll_clr_intsts_mask(uart_data->hal_ctx.dev, UART_LL_INTR_MASK);
/* Install interrupt handler */
int intr_alloc_flags = 0;
ret = esp_intr_alloc(uart_periph_signal[uart_config->uart_num].irq, intr_alloc_flags,
esp_apptrace_uart_isr_handler, uart_data, &uart_data->intr_handle);
if (ret != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to allocate interrupt: %s", esp_err_to_name(ret));
goto err_alloc_intr;
}
/* Reset FIFOs */
uart_hal_rxfifo_rst(&uart_data->hal_ctx);
uart_hal_txfifo_rst(&uart_data->hal_ctx);
/* Configure GPIO pins for RX and TX */
const uint32_t tx_idx = UART_PERIPH_SIGNAL(uart_config->uart_num, SOC_UART_PERIPH_SIGNAL_TX);
const uint32_t rx_idx = UART_PERIPH_SIGNAL(uart_config->uart_num, SOC_UART_PERIPH_SIGNAL_RX);
/* Configure TX pin */
gpio_ll_func_sel(&GPIO, uart_config->tx_pin_num, PIN_FUNC_GPIO);
esp_rom_gpio_pad_pullup_only(uart_config->tx_pin_num);
esp_rom_gpio_connect_out_signal(uart_config->tx_pin_num, tx_idx, 0, 0);
/* Configure RX pin */
gpio_ll_input_enable(&GPIO, uart_config->rx_pin_num);
esp_rom_gpio_pad_pullup_only(uart_config->rx_pin_num);
esp_rom_gpio_connect_in_signal(uart_config->rx_pin_num, rx_idx, 0);
int uart_prio = CONFIG_APPTRACE_UART_TASK_PRIO;
if (uart_prio >= (configMAX_PRIORITIES-1)) uart_prio = configMAX_PRIORITIES - 1;
err = xTaskCreate(esp_apptrace_send_uart_tx_task, "app_trace_uart_tx_task", 2500, hw_data, uart_prio, NULL);
assert((err == pdPASS) && "Not possible to configure UART. Not possible to create task!");
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_init(&uart_data->lock);
esp_apptrace_lock_init(&hw_data->lock);
#endif
}
uart_data->inited |= 1 << core_id;
uart_data->tx_busy = false;
// init UART on this CPU
esp_apptrace_uart_hw_init();
hw_data->inited |= 1 << core_id;
return ESP_OK;
err_alloc_intr:
heap_caps_free(uart_data->tx_msg_buff);
err_alloc_msg_buff:
heap_caps_free(uart_data->tx_ring.buffer);
err_init_ring_buff:
esp_clk_tree_enable_src(UART_SCLK_DEFAULT, false);
HP_UART_SRC_CLK_ATOMIC() {
uart_ll_sclk_disable(uart_data->hal_ctx.dev);
}
HP_UART_BUS_CLK_ATOMIC() {
uart_ll_enable_bus_clock(uart_config->uart_num, false);
}
esp_gpio_revoke(gpio_mask);
return ret;
}
static uint8_t *esp_apptrace_uart_up_buffer_get(void *hw_data, uint32_t size, esp_apptrace_tmo_t *tmo)
static uint8_t *esp_apptrace_uart_up_buffer_get(esp_apptrace_uart_data_t *hw_data, uint32_t size, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_uart_data_t *uart_data = hw_data;
if (size == 0 || size > uart_data->tx_msg_buff_size) {
uint8_t *ptr;
if (size > APP_TRACE_MAX_TX_MSG_UART) {
hw_data->message_buff_overflow = true;
return NULL;
}
if (esp_apptrace_uart_lock(uart_data, tmo) != ESP_OK) {
return NULL;
}
if (uart_data->tx_pending_msg_size != 0) {
if (hw_data->tx_msg_buff_size != 0)
{
// A previous message was not sent.
esp_apptrace_uart_unlock(uart_data);
return NULL;
}
uart_data->tx_pending_msg_size = size;
esp_apptrace_uart_unlock(uart_data);
return uart_data->tx_msg_buff;
}
static esp_err_t esp_apptrace_uart_up_buffer_put(void *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_uart_data_t *uart_data = hw_data;
esp_apptrace_uart_rb_t *rb = &uart_data->tx_ring;
esp_err_t res = esp_apptrace_uart_lock(uart_data, tmo);
esp_err_t res = esp_apptrace_uart_lock(hw_data, tmo);
if (res != ESP_OK) {
return res;
return NULL;
}
ptr = hw_data->tx_msg_buff;
hw_data->tx_msg_buff_size = size;
/* Add data to ring buffer */
ring_buffer_put(rb, ptr, uart_data->tx_pending_msg_size);
uart_data->tx_pending_msg_size = 0;
esp_apptrace_uart_unlock(uart_data);
// Trigger transmission if not already in progress
if (!uart_data->tx_busy) {
uart_data->tx_busy = true;
/* Enable TX interrupt */
uart_ll_clr_intsts_mask(uart_data->hal_ctx.dev, UART_INTR_TXFIFO_EMPTY);
uart_ll_ena_intr_mask(uart_data->hal_ctx.dev, UART_INTR_TXFIFO_EMPTY);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_uart_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ESP_OK;
return ptr;
}
static void esp_apptrace_uart_down_buffer_config(void *hw_data, uint8_t *buf, uint32_t size)
static esp_err_t esp_apptrace_uart_up_buffer_put(esp_apptrace_uart_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_uart_data_t *uart_data = hw_data;
assert(buf != NULL && "Down buffer cannot be NULL");
assert(size > 0 && "Down buffer size must be greater than 0");
uart_data->rx_msg_buff = buf;
uart_data->rx_msg_buff_size = size;
esp_err_t res = esp_apptrace_send_uart_data(hw_data, (const char *)ptr, hw_data->tx_msg_buff_size, tmo);
// Clear size to indicate that we've sent data
hw_data->tx_msg_buff_size = 0;
return res;
}
static uint8_t *esp_apptrace_uart_down_buffer_get(void *hw_data, uint32_t *size, esp_apptrace_tmo_t *tmo)
static void esp_apptrace_uart_down_buffer_config(esp_apptrace_uart_data_t *hw_data, uint8_t *buf, uint32_t size)
{
esp_apptrace_uart_data_t *uart_data = hw_data;
if (!size || *size == 0) {
hw_data->down_buffer = (uint8_t *)malloc(size);
if (hw_data->down_buffer == NULL){
assert(false && "Failed to allocate apptrace uart down buffer!");
}
hw_data->down_buffer_size = size;
}
static uint8_t *esp_apptrace_uart_down_buffer_get(esp_apptrace_uart_data_t *hw_data, uint32_t *size, esp_apptrace_tmo_t *tmo)
{
uint8_t *ptr = NULL;
if (*size > hw_data->down_buffer_size) {
return NULL;
}
if (!uart_data->rx_msg_buff) {
ESP_APPTRACE_LOGE("RX message buffer is not configured. Call down_buffer_config() first.");
esp_err_t res = esp_apptrace_uart_lock(hw_data, tmo);
if (res != ESP_OK) {
return NULL;
}
if (esp_apptrace_uart_lock(uart_data, tmo) != ESP_OK) {
return NULL;
}
uint32_t rx_len = uart_ll_get_rxfifo_len(uart_data->hal_ctx.dev);
int to_read = MIN(rx_len, MIN(uart_data->rx_msg_buff_size, *size));
if (to_read) {
uart_hal_read_rxfifo(&uart_data->hal_ctx, uart_data->rx_msg_buff, &to_read);
}
*size = to_read;
esp_apptrace_uart_unlock(uart_data);
return (*size > 0) ? uart_data->rx_msg_buff : NULL;
}
static esp_err_t esp_apptrace_uart_down_buffer_put(void *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
(void)hw_data;
(void)ptr;
(void)tmo;
/* No action needed - data was already read in get function */
return ESP_OK;
}
static bool esp_apptrace_uart_host_is_connected(void *hw_data)
{
esp_apptrace_uart_data_t *uart_data = hw_data;
return uart_data->inited & 1;
}
static esp_err_t esp_apptrace_uart_flush_nolock(void *hw_data, uint32_t min_sz, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_uart_data_t *uart_data = hw_data;
esp_apptrace_uart_rb_t *rb = &uart_data->tx_ring;
uint32_t pending = ring_buffer_data_len(rb);
if (pending < min_sz) {
ESP_APPTRACE_LOGD("Ignore UART flush request for min %" PRIu32 " bytes. Pending bytes: %" PRIu32, min_sz, pending);
return ESP_OK;
}
/* Trigger transmission if there's data but not busy */
if (pending > 0 && !uart_data->tx_busy) {
uart_data->tx_busy = true;
uart_ll_clr_intsts_mask(uart_data->hal_ctx.dev, UART_INTR_TXFIFO_EMPTY);
uart_ll_ena_intr_mask(uart_data->hal_ctx.dev, UART_INTR_TXFIFO_EMPTY);
}
while (uart_data->tx_busy || ring_buffer_data_len(rb) > 0) {
if (esp_apptrace_tmo_check(tmo) != ESP_OK) {
return ESP_ERR_TIMEOUT;
size_t uart_fifolen = 0;
uart_get_buffered_data_len(hw_data->port_num, &uart_fifolen);
if (uart_fifolen > 0) {
if (*size < uart_fifolen) {
uart_fifolen = *size;
}
esp_rom_delay_us(100);
*size = uart_fifolen;
ptr = hw_data->down_buffer;
*size =uart_read_bytes(hw_data->port_num, ptr, uart_fifolen, 0);
}
if (esp_apptrace_uart_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ptr;
}
static esp_err_t esp_apptrace_uart_down_buffer_put(esp_apptrace_uart_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
return ESP_OK;
}
static esp_err_t esp_apptrace_uart_flush(void *hw_data, esp_apptrace_tmo_t *tmo)
static bool esp_apptrace_uart_host_is_connected(esp_apptrace_uart_data_t *hw_data)
{
esp_apptrace_uart_data_t *uart_data = hw_data;
esp_err_t res = esp_apptrace_uart_lock(uart_data, tmo);
if (res != ESP_OK) {
return res;
}
esp_err_t ret = esp_apptrace_uart_flush_nolock(hw_data, 0, tmo);
esp_apptrace_uart_unlock(uart_data);
return ret;
return hw_data->inited & 1;
}
esp_apptrace_hw_t *esp_apptrace_uart_hw_get(int num, void **data)
static esp_err_t esp_apptrace_uart_flush_nolock(esp_apptrace_uart_data_t *hw_data, uint32_t min_sz, esp_apptrace_tmo_t *tmo)
{
ESP_APPTRACE_LOGD("esp_apptrace_uart_hw_get - %i", num);
static esp_apptrace_uart_data_t s_uart_hw_data;
static esp_apptrace_hw_t s_uart_hw = {
.init = esp_apptrace_uart_init,
.get_up_buffer = esp_apptrace_uart_up_buffer_get,
.put_up_buffer = esp_apptrace_uart_up_buffer_put,
.flush_up_buffer_nolock = esp_apptrace_uart_flush_nolock,
.flush_up_buffer = esp_apptrace_uart_flush,
.down_buffer_config = esp_apptrace_uart_down_buffer_config,
.get_down_buffer = esp_apptrace_uart_down_buffer_get,
.put_down_buffer = esp_apptrace_uart_down_buffer_put,
.host_is_connected = esp_apptrace_uart_host_is_connected,
};
*data = &s_uart_hw_data;
return &s_uart_hw;
return ESP_OK;
}
static esp_err_t esp_apptrace_uart_flush(esp_apptrace_uart_data_t *hw_data, esp_apptrace_tmo_t *tmo)
{
return ESP_OK;
}
#endif // APPTRACE_DEST_UART

View File

@@ -0,0 +1,367 @@
/*
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*/
#include "sdkconfig.h"
#include "esp_cpu.h"
#include "esp_log.h"
#include "esp_app_trace_membufs_proto.h"
#include "esp_app_trace_port.h"
#include "riscv/semihosting.h"
/** RISCV HW transport data */
typedef struct {
uint8_t inited; // initialization state flags for every core
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_t lock; // sync lock
#endif
esp_apptrace_membufs_proto_data_t membufs;
} esp_apptrace_riscv_data_t;
/** RISCV memory host iface control block */
typedef struct {
uint32_t ctrl;
// - Guard field. If this register is not zero then CPU is changing this struct and
// this guard field holds address of the instruction which application will execute when CPU finishes with those modifications.
uint32_t stat;
esp_apptrace_mem_block_t * mem_blocks;
} esp_apptrace_riscv_ctrl_block_t;
#define ESP_APPTRACE_RISCV_BLOCK_LEN_MSK 0x7FFFUL
#define ESP_APPTRACE_RISCV_BLOCK_LEN(_l_) ((_l_) & ESP_APPTRACE_RISCV_BLOCK_LEN_MSK)
#define ESP_APPTRACE_RISCV_BLOCK_LEN_GET(_v_) ((_v_) & ESP_APPTRACE_RISCV_BLOCK_LEN_MSK)
#define ESP_APPTRACE_RISCV_BLOCK_ID_MSK 0x7FUL
#define ESP_APPTRACE_RISCV_BLOCK_ID(_id_) (((_id_) & ESP_APPTRACE_RISCV_BLOCK_ID_MSK) << 15)
#define ESP_APPTRACE_RISCV_BLOCK_ID_GET(_v_) (((_v_) >> 15) & ESP_APPTRACE_RISCV_BLOCK_ID_MSK)
#define ESP_APPTRACE_RISCV_HOST_DATA (1 << 22)
#define ESP_APPTRACE_RISCV_HOST_CONNECT (1 << 23)
#define ESP_APPTRACE_RISCV_INITED(_hw_) ((_hw_)->inited & (1 << 0/*esp_cpu_get_core_id()*/))
static esp_err_t esp_apptrace_riscv_init(esp_apptrace_riscv_data_t *hw_data);
static esp_err_t esp_apptrace_riscv_flush(esp_apptrace_riscv_data_t *hw_data, esp_apptrace_tmo_t *tmo);
static esp_err_t esp_apptrace_riscv_flush_nolock(esp_apptrace_riscv_data_t *hw_data, uint32_t min_sz, esp_apptrace_tmo_t *tmo);
static uint8_t *esp_apptrace_riscv_up_buffer_get(esp_apptrace_riscv_data_t *hw_data, uint32_t size, esp_apptrace_tmo_t *tmo);
static esp_err_t esp_apptrace_riscv_up_buffer_put(esp_apptrace_riscv_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
static void esp_apptrace_riscv_down_buffer_config(esp_apptrace_riscv_data_t *hw_data, uint8_t *buf, uint32_t size);
static uint8_t *esp_apptrace_riscv_down_buffer_get(esp_apptrace_riscv_data_t *hw_data, uint32_t *size, esp_apptrace_tmo_t *tmo);
static esp_err_t esp_apptrace_riscv_down_buffer_put(esp_apptrace_riscv_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
static bool esp_apptrace_riscv_host_is_connected(esp_apptrace_riscv_data_t *hw_data);
static esp_err_t esp_apptrace_riscv_buffer_swap_start(uint32_t curr_block_id);
static esp_err_t esp_apptrace_riscv_buffer_swap(uint32_t new_block_id);
static esp_err_t esp_apptrace_riscv_buffer_swap_end(uint32_t new_block_id, uint32_t prev_block_len);
static bool esp_apptrace_riscv_host_data_pending(void);
const static char *TAG = "esp_apptrace";
#if SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE
#define APPTRACE_DRAM_ATTR TCM_DRAM_ATTR
#else
#define APPTRACE_DRAM_ATTR
#endif
static APPTRACE_DRAM_ATTR esp_apptrace_riscv_ctrl_block_t s_tracing_ctrl[CONFIG_FREERTOS_NUMBER_OF_CORES];
esp_apptrace_hw_t *esp_apptrace_jtag_hw_get(void **data)
{
#if CONFIG_APPTRACE_DEST_JTAG
static esp_apptrace_membufs_proto_hw_t s_trace_proto_hw = {
.swap_start = esp_apptrace_riscv_buffer_swap_start,
.swap = esp_apptrace_riscv_buffer_swap,
.swap_end = esp_apptrace_riscv_buffer_swap_end,
.host_data_pending = esp_apptrace_riscv_host_data_pending,
};
static esp_apptrace_riscv_data_t s_trace_hw_data = {
.membufs = {
.hw = &s_trace_proto_hw,
},
};
static esp_apptrace_hw_t s_trace_hw = {
.init = (esp_err_t (*)(void *))esp_apptrace_riscv_init,
.get_up_buffer = (uint8_t *(*)(void *, uint32_t, esp_apptrace_tmo_t *))esp_apptrace_riscv_up_buffer_get,
.put_up_buffer = (esp_err_t (*)(void *, uint8_t *, esp_apptrace_tmo_t *))esp_apptrace_riscv_up_buffer_put,
.flush_up_buffer_nolock = (esp_err_t (*)(void *, uint32_t, esp_apptrace_tmo_t *))esp_apptrace_riscv_flush_nolock,
.flush_up_buffer = (esp_err_t (*)(void *, esp_apptrace_tmo_t *))esp_apptrace_riscv_flush,
.down_buffer_config = (void (*)(void *, uint8_t *, uint32_t ))esp_apptrace_riscv_down_buffer_config,
.get_down_buffer = (uint8_t *(*)(void *, uint32_t *, esp_apptrace_tmo_t *))esp_apptrace_riscv_down_buffer_get,
.put_down_buffer = (esp_err_t (*)(void *, uint8_t *, esp_apptrace_tmo_t *))esp_apptrace_riscv_down_buffer_put,
.host_is_connected = (bool (*)(void *))esp_apptrace_riscv_host_is_connected,
};
*data = &s_trace_hw_data;
return &s_trace_hw;
#else
return NULL;
#endif
}
/* Advertises apptrace control block address to host.
This function can be overridden with custom implementation,
e.g. OpenOCD flasher stub use own implementation of it. */
__attribute__((weak)) int esp_apptrace_advertise_ctrl_block(void *ctrl_block_addr)
{
if (!esp_cpu_dbgr_is_attached()) {
return 0;
}
return (int) semihosting_call_noerrno(ESP_SEMIHOSTING_SYS_APPTRACE_INIT, (long*)ctrl_block_addr);
}
/* Returns up buffers config.
This function can be overridden with custom implementation,
e.g. OpenOCD flasher stub use own implementation of it. */
__attribute__((weak)) void esp_apptrace_get_up_buffers(esp_apptrace_mem_block_t mem_blocks_cfg[2])
{
static uint8_t s_mem_blocks[2][CONFIG_APPTRACE_BUF_SIZE];
mem_blocks_cfg[0].start = s_mem_blocks[0];
mem_blocks_cfg[0].sz = CONFIG_APPTRACE_BUF_SIZE;
mem_blocks_cfg[1].start = s_mem_blocks[1];
mem_blocks_cfg[1].sz = CONFIG_APPTRACE_BUF_SIZE;
}
static esp_err_t esp_apptrace_riscv_lock(esp_apptrace_riscv_data_t *hw_data, esp_apptrace_tmo_t *tmo)
{
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_err_t ret = esp_apptrace_lock_take(&hw_data->lock, tmo);
if (ret != ESP_OK) {
return ESP_FAIL;
}
#endif
return ESP_OK;
}
static esp_err_t esp_apptrace_riscv_unlock(esp_apptrace_riscv_data_t *hw_data)
{
esp_err_t ret = ESP_OK;
#if CONFIG_APPTRACE_LOCK_ENABLE
ret = esp_apptrace_lock_give(&hw_data->lock);
#endif
return ret;
}
/*****************************************************************************************/
/***************************** Apptrace HW iface *****************************************/
/*****************************************************************************************/
static esp_err_t esp_apptrace_riscv_init(esp_apptrace_riscv_data_t *hw_data)
{
int core_id = esp_cpu_get_core_id();
if (hw_data->inited == 0) {
esp_apptrace_mem_block_t mem_blocks_cfg[2];
esp_apptrace_get_up_buffers(mem_blocks_cfg);
esp_err_t res = esp_apptrace_membufs_init(&hw_data->membufs, mem_blocks_cfg);
if (res != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to init membufs proto (%d)!", res);
return res;
}
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_init(&hw_data->lock);
#endif
}
hw_data->inited |= 1 << core_id;
ESP_APPTRACE_LOGI("Apptrace initialized on CPU%d. Tracing control block @ %p.", core_id, &s_tracing_ctrl[core_id]);
s_tracing_ctrl[core_id].mem_blocks = hw_data->membufs.blocks;
for (int i = 0; i < 2; i++) {
ESP_APPTRACE_LOGD("Mem buf[%d] %" PRIu32 " bytes @ %p (%p/%p)", i,
s_tracing_ctrl[core_id].mem_blocks[i].sz, s_tracing_ctrl[core_id].mem_blocks[i].start,
&(s_tracing_ctrl[core_id].mem_blocks[i].start), &(s_tracing_ctrl[core_id].mem_blocks[i].sz));
}
// notify host about control block address
int res = esp_apptrace_advertise_ctrl_block(&s_tracing_ctrl[core_id]);
assert(res == 0 && "Failed to send config to host!");
return ESP_OK;
}
static uint8_t *esp_apptrace_riscv_up_buffer_get(esp_apptrace_riscv_data_t *hw_data, uint32_t size, esp_apptrace_tmo_t *tmo)
{
uint8_t *ptr;
if (!ESP_APPTRACE_RISCV_INITED(hw_data)) {
return NULL;
}
esp_err_t res = esp_apptrace_riscv_lock(hw_data, tmo);
if (res != ESP_OK) {
return NULL;
}
ptr = esp_apptrace_membufs_up_buffer_get(&hw_data->membufs, size, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_riscv_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ptr;
}
static esp_err_t esp_apptrace_riscv_up_buffer_put(esp_apptrace_riscv_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
if (!ESP_APPTRACE_RISCV_INITED(hw_data)) {
return ESP_ERR_INVALID_STATE;
}
// Can avoid locking because esp_apptrace_membufs_up_buffer_put() just modifies buffer's header
esp_err_t res = esp_apptrace_membufs_up_buffer_put(&hw_data->membufs, ptr, tmo);
return res;
}
static void esp_apptrace_riscv_down_buffer_config(esp_apptrace_riscv_data_t *hw_data, uint8_t *buf, uint32_t size)
{
if (!ESP_APPTRACE_RISCV_INITED(hw_data)) {
return;
}
esp_apptrace_membufs_down_buffer_config(&hw_data->membufs, buf, size);
}
static uint8_t *esp_apptrace_riscv_down_buffer_get(esp_apptrace_riscv_data_t *hw_data, uint32_t *size, esp_apptrace_tmo_t *tmo)
{
uint8_t *ptr;
if (!ESP_APPTRACE_RISCV_INITED(hw_data)) {
return NULL;
}
esp_err_t res = esp_apptrace_riscv_lock(hw_data, tmo);
if (res != ESP_OK) {
return NULL;
}
ptr = esp_apptrace_membufs_down_buffer_get(&hw_data->membufs, size, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_riscv_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ptr;
}
static esp_err_t esp_apptrace_riscv_down_buffer_put(esp_apptrace_riscv_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
if (!ESP_APPTRACE_RISCV_INITED(hw_data)) {
return ESP_ERR_INVALID_STATE;
}
// Can avoid locking because esp_apptrace_membufs_down_buffer_put() does nothing
/*esp_err_t res = esp_apptrace_riscv_lock(hw_data, tmo);
if (res != ESP_OK) {
return res;
}*/
esp_err_t res = esp_apptrace_membufs_down_buffer_put(&hw_data->membufs, ptr, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
/*if (esp_apptrace_riscv_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}*/
return res;
}
static bool esp_apptrace_riscv_host_is_connected(esp_apptrace_riscv_data_t *hw_data)
{
if (!ESP_APPTRACE_RISCV_INITED(hw_data)) {
return false;
}
return s_tracing_ctrl[esp_cpu_get_core_id()].ctrl & ESP_APPTRACE_RISCV_HOST_CONNECT ? true : false;
}
static esp_err_t esp_apptrace_riscv_flush_nolock(esp_apptrace_riscv_data_t *hw_data, uint32_t min_sz, esp_apptrace_tmo_t *tmo)
{
if (!ESP_APPTRACE_RISCV_INITED(hw_data)) {
return ESP_ERR_INVALID_STATE;
}
return esp_apptrace_membufs_flush_nolock(&hw_data->membufs, min_sz, tmo);
}
static esp_err_t esp_apptrace_riscv_flush(esp_apptrace_riscv_data_t *hw_data, esp_apptrace_tmo_t *tmo)
{
if (!ESP_APPTRACE_RISCV_INITED(hw_data)) {
return ESP_ERR_INVALID_STATE;
}
esp_err_t res = esp_apptrace_riscv_lock(hw_data, tmo);
if (res != ESP_OK) {
return res;
}
res = esp_apptrace_membufs_flush_nolock(&hw_data->membufs, 0, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_riscv_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return res;
}
/*****************************************************************************************/
/************************** Membufs proto HW iface ***************************************/
/*****************************************************************************************/
static inline void esp_apptrace_riscv_buffer_swap_lock(void)
{
extern uint32_t __esp_apptrace_riscv_updated;
// indicate to host that we are about to update.
// this is used only to place CPU into streaming mode at tracing startup
// before starting streaming host can halt us after we read ESP_APPTRACE_RISCV_CTRL_REG and before we updated it
// HACK: in this case host will set breakpoint just after ESP_APPTRACE_RISCV_CTRL_REG update,
// here we set address to set bp at
// enter ERI update critical section
s_tracing_ctrl[esp_cpu_get_core_id()].stat = (uint32_t)&__esp_apptrace_riscv_updated;
}
static __attribute__((noinline)) void esp_apptrace_riscv_buffer_swap_unlock(void)
{
// exit ERI update critical section
s_tracing_ctrl[esp_cpu_get_core_id()].stat = 0;
// TODO: currently host sets breakpoint, use break instruction to stop;
// it will allow to use ESP_APPTRACE_RISCV_STAT_REG for other purposes
asm volatile (
" .global __esp_apptrace_riscv_updated\n"
"__esp_apptrace_riscv_updated:\n"); // host will set bp here to resolve collision at streaming start
}
static esp_err_t esp_apptrace_riscv_buffer_swap_start(uint32_t curr_block_id)
{
esp_err_t res = ESP_OK;
esp_apptrace_riscv_buffer_swap_lock();
uint32_t ctrl_reg = s_tracing_ctrl[esp_cpu_get_core_id()].ctrl;
uint32_t host_connected = ESP_APPTRACE_RISCV_HOST_CONNECT & ctrl_reg;
if (host_connected) {
uint32_t acked_block = ESP_APPTRACE_RISCV_BLOCK_ID_GET(ctrl_reg);
uint32_t host_to_read = ESP_APPTRACE_RISCV_BLOCK_LEN_GET(ctrl_reg);
if (host_to_read != 0 || acked_block != (curr_block_id & ESP_APPTRACE_RISCV_BLOCK_ID_MSK)) {
ESP_APPTRACE_LOGD("[%d]: Can not switch %" PRIx32 " %" PRIu32 " %" PRIx32 " %" PRIx32 "/%" PRIx32, esp_cpu_get_core_id(), ctrl_reg, host_to_read, acked_block,
curr_block_id & ESP_APPTRACE_RISCV_BLOCK_ID_MSK, curr_block_id);
res = ESP_ERR_NO_MEM;
goto _on_err;
}
}
return ESP_OK;
_on_err:
esp_apptrace_riscv_buffer_swap_unlock();
return res;
}
static esp_err_t esp_apptrace_riscv_buffer_swap_end(uint32_t new_block_id, uint32_t prev_block_len)
{
uint32_t ctrl_reg = s_tracing_ctrl[esp_cpu_get_core_id()].ctrl;
uint32_t host_connected = ESP_APPTRACE_RISCV_HOST_CONNECT & ctrl_reg;
s_tracing_ctrl[esp_cpu_get_core_id()].ctrl = ESP_APPTRACE_RISCV_BLOCK_ID(new_block_id) |
host_connected | ESP_APPTRACE_RISCV_BLOCK_LEN(prev_block_len);
esp_apptrace_riscv_buffer_swap_unlock();
return ESP_OK;
}
static esp_err_t esp_apptrace_riscv_buffer_swap(uint32_t new_block_id)
{
/* do nothing */
return ESP_OK;
}
static bool esp_apptrace_riscv_host_data_pending(void)
{
uint32_t ctrl_reg = s_tracing_ctrl[esp_cpu_get_core_id()].ctrl;
// ESP_APPTRACE_LOGV("%s() 0x%x", __func__, ctrl_reg);
return (ctrl_reg & ESP_APPTRACE_RISCV_HOST_DATA) ? true : false;
}

View File

@@ -1,373 +0,0 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*/
#include "sdkconfig.h"
#include "esp_cpu.h"
#include "esp_log.h"
#include "esp_app_trace_config.h"
#include "esp_app_trace_membufs_proto.h"
#include "esp_app_trace_port.h"
#include "riscv/semihosting.h"
/** RISCV HW transport data */
typedef struct {
uint8_t inited; // initialization state flags for every core
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_t lock; // sync lock
#endif
esp_apptrace_membufs_proto_data_t membufs;
} esp_apptrace_riscv_data_t;
/** RISCV memory host iface control block */
typedef struct {
uint32_t ctrl;
// - Guard field. If this register is not zero then CPU is changing this struct and
// this guard field holds address of the instruction which application will execute when CPU finishes with those modifications.
uint32_t stat;
esp_apptrace_mem_block_t * mem_blocks;
} esp_apptrace_riscv_ctrl_block_t;
#define ESP_APPTRACE_RISCV_BLOCK_LEN_MSK 0x7FFFUL
#define ESP_APPTRACE_RISCV_BLOCK_LEN(_l_) ((_l_) & ESP_APPTRACE_RISCV_BLOCK_LEN_MSK)
#define ESP_APPTRACE_RISCV_BLOCK_LEN_GET(_v_) ((_v_) & ESP_APPTRACE_RISCV_BLOCK_LEN_MSK)
#define ESP_APPTRACE_RISCV_BLOCK_ID_MSK 0x7FUL
#define ESP_APPTRACE_RISCV_BLOCK_ID(_id_) (((_id_) & ESP_APPTRACE_RISCV_BLOCK_ID_MSK) << 15)
#define ESP_APPTRACE_RISCV_BLOCK_ID_GET(_v_) (((_v_) >> 15) & ESP_APPTRACE_RISCV_BLOCK_ID_MSK)
#define ESP_APPTRACE_RISCV_HOST_DATA (1 << 22)
#define ESP_APPTRACE_RISCV_HOST_CONNECT (1 << 23)
#define ESP_APPTRACE_RISCV_INITED(_hw_) ((_hw_)->inited & (1 << 0/*esp_cpu_get_core_id()*/))
const static char *TAG = "esp_apptrace";
#if SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE
#define APPTRACE_DRAM_ATTR TCM_DRAM_ATTR
#else
#define APPTRACE_DRAM_ATTR
#endif
static APPTRACE_DRAM_ATTR esp_apptrace_riscv_ctrl_block_t s_tracing_ctrl[CONFIG_FREERTOS_NUMBER_OF_CORES];
/* Advertises apptrace control block address to host.
This function can be overridden with custom implementation,
e.g. OpenOCD flasher stub use own implementation of it. */
__attribute__((weak)) int esp_apptrace_advertise_ctrl_block(void *ctrl_block_addr)
{
if (!esp_cpu_dbgr_is_attached()) {
return 0;
}
return (int) semihosting_call_noerrno(ESP_SEMIHOSTING_SYS_APPTRACE_INIT, (long*)ctrl_block_addr);
}
/* Returns up buffers config.
This function can be overridden with custom implementation,
e.g. OpenOCD flasher stub use own implementation of it. */
__attribute__((weak)) void esp_apptrace_get_up_buffers(esp_apptrace_mem_block_t mem_blocks_cfg[2])
{
static uint8_t s_mem_blocks[2][CONFIG_APPTRACE_BUF_SIZE];
mem_blocks_cfg[0].start = s_mem_blocks[0];
mem_blocks_cfg[0].sz = CONFIG_APPTRACE_BUF_SIZE;
mem_blocks_cfg[1].start = s_mem_blocks[1];
mem_blocks_cfg[1].sz = CONFIG_APPTRACE_BUF_SIZE;
}
static esp_err_t esp_apptrace_riscv_lock(void *hw_data, esp_apptrace_tmo_t *tmo)
{
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_riscv_data_t *riscv_data = hw_data;
esp_err_t ret = esp_apptrace_lock_take(&riscv_data->lock, tmo);
if (ret != ESP_OK) {
return ESP_FAIL;
}
#endif
return ESP_OK;
}
static esp_err_t esp_apptrace_riscv_unlock(void *hw_data)
{
esp_err_t ret = ESP_OK;
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_riscv_data_t *riscv_data = hw_data;
ret = esp_apptrace_lock_give(&riscv_data->lock);
#endif
return ret;
}
/*****************************************************************************************/
/***************************** Apptrace HW iface *****************************************/
/*****************************************************************************************/
static esp_err_t esp_apptrace_riscv_init(void *hw_data, const esp_apptrace_config_t *config)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
/* esp_apptrace_riscv_init() is called on every core, so ensure to do main initialization only once */
int core_id = esp_cpu_get_core_id();
if (core_id == 0) {
esp_apptrace_mem_block_t mem_blocks_cfg[2];
esp_apptrace_get_up_buffers(mem_blocks_cfg);
riscv_data->membufs.header_size = ESP_APPTRACE_HEADER_SIZE_32;
esp_err_t res = esp_apptrace_membufs_init(&riscv_data->membufs, mem_blocks_cfg);
if (res != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to init membufs proto (%d)!", res);
return res;
}
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_init(&riscv_data->lock);
#endif
}
riscv_data->inited |= 1 << core_id;
ESP_APPTRACE_LOGI("Apptrace initialized on CPU%d. Tracing control block @ %p.", core_id, &s_tracing_ctrl[core_id]);
s_tracing_ctrl[core_id].mem_blocks = riscv_data->membufs.blocks;
for (int i = 0; i < 2; i++) {
ESP_APPTRACE_LOGD("Mem buf[%d] %" PRIu32 " bytes @ %p (%p/%p)", i,
s_tracing_ctrl[core_id].mem_blocks[i].sz, s_tracing_ctrl[core_id].mem_blocks[i].start,
&(s_tracing_ctrl[core_id].mem_blocks[i].start), &(s_tracing_ctrl[core_id].mem_blocks[i].sz));
}
// notify host about control block address
int __attribute__((unused)) res = esp_apptrace_advertise_ctrl_block(&s_tracing_ctrl[core_id]);
assert(res == 0 && "Failed to send config to host!");
return ESP_OK;
}
static uint8_t *esp_apptrace_riscv_up_buffer_get(void *hw_data, uint32_t size, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
if (!ESP_APPTRACE_RISCV_INITED(riscv_data)) {
return NULL;
}
esp_err_t res = esp_apptrace_riscv_lock(riscv_data, tmo);
if (res != ESP_OK) {
return NULL;
}
uint8_t *ptr = esp_apptrace_membufs_up_buffer_get(&riscv_data->membufs, size, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_riscv_unlock(riscv_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ptr;
}
static esp_err_t esp_apptrace_riscv_up_buffer_put(void *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
if (!ESP_APPTRACE_RISCV_INITED(riscv_data)) {
return ESP_ERR_INVALID_STATE;
}
// Can avoid locking because esp_apptrace_membufs_up_buffer_put() just modifies buffer's header
esp_err_t res = esp_apptrace_membufs_up_buffer_put(&riscv_data->membufs, ptr, tmo);
return res;
}
static void esp_apptrace_riscv_down_buffer_config(void *hw_data, uint8_t *buf, uint32_t size)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
if (!ESP_APPTRACE_RISCV_INITED(riscv_data)) {
return;
}
esp_apptrace_membufs_down_buffer_config(&riscv_data->membufs, buf, size);
}
static uint8_t *esp_apptrace_riscv_down_buffer_get(void *hw_data, uint32_t *size, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
if (!ESP_APPTRACE_RISCV_INITED(riscv_data)) {
return NULL;
}
esp_err_t res = esp_apptrace_riscv_lock(riscv_data, tmo);
if (res != ESP_OK) {
return NULL;
}
uint8_t *ptr = esp_apptrace_membufs_down_buffer_get(&riscv_data->membufs, size, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_riscv_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ptr;
}
static esp_err_t esp_apptrace_riscv_down_buffer_put(void *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
if (!ESP_APPTRACE_RISCV_INITED(riscv_data)) {
return ESP_ERR_INVALID_STATE;
}
// Can avoid locking because esp_apptrace_membufs_down_buffer_put() does nothing
/*esp_err_t res = esp_apptrace_riscv_lock(hw_data, tmo);
if (res != ESP_OK) {
return res;
}*/
esp_err_t res = esp_apptrace_membufs_down_buffer_put(&riscv_data->membufs, ptr, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
/*if (esp_apptrace_riscv_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}*/
return res;
}
static bool esp_apptrace_riscv_host_is_connected(void *hw_data)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
if (!ESP_APPTRACE_RISCV_INITED(riscv_data)) {
return false;
}
return s_tracing_ctrl[esp_cpu_get_core_id()].ctrl & ESP_APPTRACE_RISCV_HOST_CONNECT ? true : false;
}
static esp_err_t esp_apptrace_riscv_flush_nolock(void *hw_data, uint32_t min_sz, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
if (!ESP_APPTRACE_RISCV_INITED(riscv_data)) {
return ESP_ERR_INVALID_STATE;
}
return esp_apptrace_membufs_flush_nolock(&riscv_data->membufs, min_sz, tmo);
}
static esp_err_t esp_apptrace_riscv_flush(void *hw_data, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
if (!ESP_APPTRACE_RISCV_INITED(riscv_data)) {
return ESP_ERR_INVALID_STATE;
}
esp_err_t res = esp_apptrace_riscv_lock(riscv_data, tmo);
if (res != ESP_OK) {
return res;
}
res = esp_apptrace_membufs_flush_nolock(&riscv_data->membufs, 0, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_riscv_unlock(riscv_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return res;
}
/*****************************************************************************************/
/************************** Membufs proto HW iface ***************************************/
/*****************************************************************************************/
static inline void esp_apptrace_riscv_buffer_swap_lock(void)
{
extern uint32_t __esp_apptrace_riscv_updated;
// indicate to host that we are about to update.
// this is used only to place CPU into streaming mode at tracing startup
// before starting streaming host can halt us after we read ESP_APPTRACE_RISCV_CTRL_REG and before we updated it
// HACK: in this case host will set breakpoint just after ESP_APPTRACE_RISCV_CTRL_REG update,
// here we set address to set bp at
// enter ERI update critical section
s_tracing_ctrl[esp_cpu_get_core_id()].stat = (uint32_t)&__esp_apptrace_riscv_updated;
}
static __attribute__((noinline)) void esp_apptrace_riscv_buffer_swap_unlock(void)
{
// exit ERI update critical section
s_tracing_ctrl[esp_cpu_get_core_id()].stat = 0;
// TODO: currently host sets breakpoint, use break instruction to stop;
// it will allow to use ESP_APPTRACE_RISCV_STAT_REG for other purposes
asm volatile(
" .global __esp_apptrace_riscv_updated\n"
"__esp_apptrace_riscv_updated:\n"); // host will set bp here to resolve collision at streaming start
}
static esp_err_t esp_apptrace_riscv_buffer_swap_start(uint32_t curr_block_id)
{
esp_err_t res = ESP_OK;
esp_apptrace_riscv_buffer_swap_lock();
uint32_t ctrl_reg = s_tracing_ctrl[esp_cpu_get_core_id()].ctrl;
uint32_t host_connected = ESP_APPTRACE_RISCV_HOST_CONNECT & ctrl_reg;
if (host_connected) {
uint32_t acked_block = ESP_APPTRACE_RISCV_BLOCK_ID_GET(ctrl_reg);
uint32_t host_to_read = ESP_APPTRACE_RISCV_BLOCK_LEN_GET(ctrl_reg);
if (host_to_read != 0 || acked_block != (curr_block_id & ESP_APPTRACE_RISCV_BLOCK_ID_MSK)) {
ESP_APPTRACE_LOGD("[%d]: Can not switch %" PRIx32 " %" PRIu32 " %" PRIx32 " %" PRIx32 "/%" PRIx32, esp_cpu_get_core_id(), ctrl_reg, host_to_read, acked_block,
curr_block_id & ESP_APPTRACE_RISCV_BLOCK_ID_MSK, curr_block_id);
res = ESP_ERR_NO_MEM;
goto _on_err;
}
}
return ESP_OK;
_on_err:
esp_apptrace_riscv_buffer_swap_unlock();
return res;
}
static esp_err_t esp_apptrace_riscv_buffer_swap_end(uint32_t new_block_id, uint32_t prev_block_len)
{
uint32_t ctrl_reg = s_tracing_ctrl[esp_cpu_get_core_id()].ctrl;
uint32_t host_connected = ESP_APPTRACE_RISCV_HOST_CONNECT & ctrl_reg;
s_tracing_ctrl[esp_cpu_get_core_id()].ctrl = ESP_APPTRACE_RISCV_BLOCK_ID(new_block_id) |
host_connected | ESP_APPTRACE_RISCV_BLOCK_LEN(prev_block_len);
esp_apptrace_riscv_buffer_swap_unlock();
return ESP_OK;
}
static esp_err_t esp_apptrace_riscv_buffer_swap(uint32_t new_block_id, uint32_t prev_block_len)
{
/* do nothing */
return ESP_OK;
}
static bool esp_apptrace_riscv_host_data_pending(void)
{
uint32_t ctrl_reg = s_tracing_ctrl[esp_cpu_get_core_id()].ctrl;
// ESP_APPTRACE_LOGV("%s() 0x%x", __func__, ctrl_reg);
return (ctrl_reg & ESP_APPTRACE_RISCV_HOST_DATA) ? true : false;
}
static void esp_apptrace_riscv_set_header_size(void *hw_data, esp_apptrace_header_size_t header_size)
{
esp_apptrace_riscv_data_t *riscv_data = hw_data;
riscv_data->membufs.header_size = header_size;
}
esp_apptrace_hw_t *esp_apptrace_jtag_hw_get(void **data)
{
static esp_apptrace_membufs_proto_hw_t s_trace_proto_hw = {
.swap_start = esp_apptrace_riscv_buffer_swap_start,
.swap = esp_apptrace_riscv_buffer_swap,
.swap_end = esp_apptrace_riscv_buffer_swap_end,
.host_data_pending = esp_apptrace_riscv_host_data_pending,
};
static esp_apptrace_riscv_data_t s_trace_hw_data = {
.membufs = {
.hw = &s_trace_proto_hw,
},
};
static esp_apptrace_hw_t s_trace_hw = {
.init = esp_apptrace_riscv_init,
.get_up_buffer = esp_apptrace_riscv_up_buffer_get,
.put_up_buffer = esp_apptrace_riscv_up_buffer_put,
.flush_up_buffer_nolock = esp_apptrace_riscv_flush_nolock,
.flush_up_buffer = esp_apptrace_riscv_flush,
.down_buffer_config = esp_apptrace_riscv_down_buffer_config,
.get_down_buffer = esp_apptrace_riscv_down_buffer_get,
.put_down_buffer = esp_apptrace_riscv_down_buffer_put,
.host_is_connected = esp_apptrace_riscv_host_is_connected,
.set_header_size = esp_apptrace_riscv_set_header_size,
};
*data = &s_trace_hw_data;
return &s_trace_hw;
}

View File

@@ -0,0 +1,552 @@
/*
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*/
//
// How It Works
// ************
// 1. Components Overview
// ======================
// Xtensa has useful feature: TRAX debug module. It allows recording program execution flow at run-time without disturbing CPU.
// Execution flow data are written to configurable Trace RAM block. Besides accessing Trace RAM itself TRAX module also allows to read/write
// trace memory via its registers by means of JTAG, APB or ERI transactions.
// ESP32 has two Xtensa cores with separate TRAX modules on them and provides two special memory regions to be used as trace memory.
// Chip allows muxing access to those trace memory blocks in such a way that while one block is accessed by CPUs another one can be accessed by host
// by means of reading/writing TRAX registers via JTAG. Blocks muxing is configurable at run-time and allows switching trace memory blocks between
// accessors in round-robin fashion so they can read/write separate memory blocks without disturbing each other.
// This module implements application tracing feature based on above mechanisms. It allows to transfer arbitrary user data to/from
// host via JTAG with minimal impact on system performance. This module is implied to be used in the following tracing scheme.
// ------>------ ----- (host components) -----
// | | | |
// ------------------- ----------------------- ----------------------- ---------------- ------ --------- -----------------
// |trace data source|-->|target tracing module|<--->|TRAX_MEM0 | TRAX_MEM1|---->|TRAX_DATA_REGS|<-->|JTAG|<--->|OpenOCD|-->|trace data sink|
// ------------------- ----------------------- ----------------------- ---------------- ------ --------- -----------------
// | | | |
// | ------<------ ---------------- |
// |<------------------------------------------->|TRAX_CTRL_REGS|<---->|
// ----------------
// In general tracing goes in the following way. User application requests tracing module to send some data by calling esp_apptrace_buffer_get(),
// module allocates necessary buffer in current input trace block. Then user fills received buffer with data and calls esp_apptrace_buffer_put().
// When current input trace block is filled with app data it is exposed to host and the second block becomes input one and buffer filling restarts.
// While target application fills one TRAX block host reads another one via JTAG.
// This module also allows communication in the opposite direction: from host to target. As it was said ESP32 and host can access different TRAX blocks
// simultaneously, so while target writes trace data to one block host can write its own data (e.g. tracing commands) to another one then when
// blocks are switched host receives trace data and target receives data written by host application. Target user application can read host data
// by calling esp_apptrace_read() API.
// To control buffer switching and for other communication purposes this implementation uses some TRAX registers. It is safe since HW TRAX tracing
// can not be used along with application tracing feature so these registers are freely readable/writeable via JTAG from host and via ERI from ESP32 cores.
// Overhead of this implementation on target CPU is produced only by allocating/managing buffers and copying of data.
// On the host side special OpenOCD command must be used to read trace data.
// 2. TRAX Registers layout
// ========================
// This module uses two TRAX HW registers and one Performance Monitor register to communicate with host SW (OpenOCD).
// - Control register uses TRAX_DELAYCNT as storage. Only lower 24 bits of TRAX_DELAYCNT are writable. Control register has the following bitfields:
// | 31..XXXXXX..24 | 23 .(host_connect). 23| 22..(block_id)..15 | 14..(block_len)..0 |
// 14..0 bits - actual length of user data in trace memory block. Target updates it every time it fills memory block and exposes it to host.
// Host writes zero to this field when it finishes reading exposed block;
// 21..15 bits - trace memory block transfer ID. Block counter. It can overflow. Updated by target, host should not modify it. Actually can be 2 bits;
// 22 bit - 'host data present' flag. If set to one there is data from host, otherwise - no host data;
// 23 bit - 'host connected' flag. If zero then host is not connected and tracing module works in post-mortem mode, otherwise in streaming mode;
// - Status register uses TRAX_TRIGGERPC as storage. If this register is not zero then current CPU is changing TRAX registers and
// this register holds address of the instruction which application will execute when it finishes with those registers modifications.
// See 'Targets Connection' section for details.
// - CRC16 register uses ERI_PERFMON_PM1 as storage. This register is used to store CRC16 checksum of the exposed trace memory block.
// The register has the following format:
// | 31..16 (CRC indicator) | 15..0 (CRC16 value) |
// CRC indicator (0xA55A) is used to distinguish valid CRC values from other data that might be in the register.
// CRC16 is calculated over the entire exposed block and is updated every time a block is exposed to the host.
// This allows the host to verify data integrity of the received trace data.
// 3. Modes of operation
// =====================
// This module supports two modes of operation:
// - Post-mortem mode. This is the default mode. In this mode application tracing module does not check whether host has read all the data from block
// exposed to it and switches block in any case. The mode does not need host interaction for operation and so can be useful when only the latest
// trace data are necessary, e.g. for analyzing crashes. On panic the latest data from current input block are exposed to host and host can read them.
// It can happen that system panic occurs when there are very small amount of data which are not exposed to host yet (e.g. crash just after the
// TRAX block switch). In this case the previous 16KB of collected data will be dropped and host will see the latest, but very small piece of trace.
// It can be insufficient to diagnose the problem. To avoid such situations there is menuconfig option
// CONFIG_APPTRACE_POSTMORTEM_FLUSH_THRESH
// which controls the threshold for flushing data in case of panic.
// - Streaming mode. Tracing module enters this mode when host connects to target and sets respective bits in control registers (per core).
// In this mode before switching the block tracing module waits for the host to read all the data from the previously exposed block.
// On panic tracing module also waits (timeout is configured via menuconfig via CONFIG_APPTRACE_ONPANIC_HOST_FLUSH_TMO) for the host to read all data.
// 4. Communication Protocol
// =========================
// 4.1 Trace Memory Blocks
// -----------------------
// Communication is controlled via special register. Host periodically polls control register on each core to find out if there are any data available.
// When current input memory block is filled it is exposed to host and 'block_len' and 'block_id' fields are updated in the control register.
// Host reads new register value and according to it's value starts reading data from exposed block. Meanwhile target starts filling another trace block.
// When host finishes reading the block it clears 'block_len' field in control register indicating to the target that it is ready to accept the next one.
// If the host has some data to transfer to the target it writes them to trace memory block before clearing 'block_len' field. Then it sets
// 'host_data_present' bit and clears 'block_len' field in control register. Upon every block switch target checks 'host_data_present' bit and if it is set
// reads them to down buffer before writing any trace data to switched TRAX block.
// 4.2 User Data Chunks Level
// --------------------------
// Since trace memory block is shared between user data chunks and data copying is performed on behalf of the API user (in its normal context) in
// multithreading environment it can happen that task/ISR which copies data is preempted by another high prio task/ISR. So it is possible situation
// that task/ISR will fail to complete filling its data chunk before the whole trace block is exposed to the host. To handle such conditions tracing
// module prepends all user data chunks with header which contains allocated buffer size and actual data length within it. OpenOCD command
// which reads application traces reports error when it reads incomplete user data block.
// Data which are transffered from host to target are also prepended with a header. Down channel data header is simple and consists of one two bytes field
// containing length of host data following the header.
// 4.3 Data Buffering
// ------------------
// It takes some time for the host to read TRAX memory block via JTAG. In streaming mode it can happen that target has filled its TRAX block, but host
// has not completed reading of the previous one yet. So in this case time critical tracing calls (which can not be delayed for too long time due to
// the lack of free memory in TRAX block) can be dropped. To avoid such scenarios tracing module implements data buffering. Buffered data will be sent
// to the host later when TRAX block switch occurs. The maximum size of the buffered data is controlled by menuconfig option
// CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX.
// 4.4 Target Connection/Disconnection
// -----------------------------------
// When host is going to start tracing in streaming mode it needs to put both ESP32 cores into initial state when 'host connected' bit is set
// on both cores. To accomplish this host halts both cores and sets this bit in TRAX registers. But target code can be halted in state when it has read control
// register but has not updated its value. To handle such situations target code indicates to the host that it is updating control register by writing
// non-zero value to status register. Actually it writes address of the instruction which it will execute when it finishes with
// the registers update. When target is halted during control register update host sets breakpoint at the address from status register and resumes CPU.
// After target code finishes with register update it is halted on breakpoint, host detects it and safely sets 'host connected' bit. When both cores
// are set up they are resumed. Tracing starts without further intrusion into CPUs work.
// When host is going to stop tracing in streaming mode it needs to disconnect targets. Disconnection process is done using the same algorithm
// as for connecting, but 'host connected' bits are cleared on ESP32 cores.
// 5. Module Access Synchronization
// ================================
// Access to internal module's data is synchronized with custom mutex. Mutex is a wrapper for portMUX_TYPE and uses almost the same sync mechanism as in
// vPortCPUAcquireMutex/vPortCPUReleaseMutex. The mechanism uses S32C1I Xtensa instruction to implement exclusive access to module's data from tasks and
// ISRs running on both cores. Also custom mutex allows specifying timeout for locking operation. Locking routine checks underlying mutex in cycle until
// it gets its ownership or timeout expires. The differences of application tracing module's mutex implementation from vPortCPUAcquireMutex/vPortCPUReleaseMutex are:
// - Support for timeouts.
// - Local IRQs for CPU which owns the mutex are disabled till the call to unlocking routine. This is made to avoid possible task's prio inversion.
// When low prio task takes mutex and enables local IRQs gets preempted by high prio task which in its turn can try to acquire mutex using infinite timeout.
// So no local task switch occurs when mutex is locked. But this does not apply to tasks on another CPU.
// WARNING: Priority inversion can happen when low prio task works on one CPU and medium and high prio tasks work on another.
// WARNING: Care must be taken when selecting timeout values for trace calls from ISRs. Tracing module does not care about watchdogs when waiting
// on internal locks and for host to complete previous block reading, so if timeout value exceeds watchdog's one it can lead to the system reboot.
// 6. Timeouts
// ===========
// Timeout mechanism is based on xthal_get_ccount() routine and supports timeout values in microseconds.
// There are two situations when task/ISR can be delayed by tracing API call. Timeout mechanism takes into account both conditions:
// - Trace data are locked by another task/ISR. When waiting on trace data lock.
// - Current TRAX memory input block is full when working in streaming mode (host is connected). When waiting for host to complete previous block reading.
// When waiting for any of above conditions xthal_get_ccount() is called periodically to calculate time elapsed from trace API routine entry. When elapsed
// time exceeds specified timeout value operation is canceled and ESP_ERR_TIMEOUT code is returned.
#include "sdkconfig.h"
#include "soc/soc.h"
#include "soc/dport_reg.h"
#include "soc/tracemem_config.h"
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
#include "soc/sensitive_reg.h"
#endif
#include "eri.h"
#include "esp_private/trax.h"
#include "esp_cpu.h"
#include "esp_log.h"
#include "esp_app_trace_membufs_proto.h"
#include "esp_app_trace_port.h"
#include "esp_rom_crc.h"
// TRAX is disabled, so we use its registers for our own purposes
// | 31..XXXXXX..24 | 23 .(host_connect). 23 | 22 .(host_data). 22| 21..(block_id)..15 | 14..(block_len)..0 |
#define ESP_APPTRACE_TRAX_CTRL_REG ERI_TRAX_DELAYCNT
#define ESP_APPTRACE_TRAX_STAT_REG ERI_TRAX_TRIGGERPC
#define ESP_APPTRACE_TRAX_CRC16_REG ERI_PERFMON_PM1
#define ESP_APPTRACE_CRC_INDICATOR (0xA55AU << 16)
#define ESP_APPTRACE_TRAX_BLOCK_LEN_MSK 0x7FFFUL
#define ESP_APPTRACE_TRAX_BLOCK_LEN(_l_) ((_l_) & ESP_APPTRACE_TRAX_BLOCK_LEN_MSK)
#define ESP_APPTRACE_TRAX_BLOCK_LEN_GET(_v_) ((_v_) & ESP_APPTRACE_TRAX_BLOCK_LEN_MSK)
#define ESP_APPTRACE_TRAX_BLOCK_ID_MSK 0x7FUL
#define ESP_APPTRACE_TRAX_BLOCK_ID(_id_) (((_id_) & ESP_APPTRACE_TRAX_BLOCK_ID_MSK) << 15)
#define ESP_APPTRACE_TRAX_BLOCK_ID_GET(_v_) (((_v_) >> 15) & ESP_APPTRACE_TRAX_BLOCK_ID_MSK)
#define ESP_APPTRACE_TRAX_HOST_DATA (1 << 22)
#define ESP_APPTRACE_TRAX_HOST_CONNECT (1 << 23)
#define ESP_APPTRACE_TRAX_INITED(_hw_) ((_hw_)->inited & (1 << esp_cpu_get_core_id()))
#define ESP_APPTRACE_TRAX_BLOCK_SIZE (0x4000UL)
/** TRAX HW transport data */
typedef struct {
uint8_t inited;
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_t lock; // sync lock
#endif
esp_apptrace_membufs_proto_data_t membufs;
} esp_apptrace_trax_data_t;
static esp_err_t esp_apptrace_trax_init(esp_apptrace_trax_data_t *hw_data);
static esp_err_t esp_apptrace_trax_flush(esp_apptrace_trax_data_t *hw_data, esp_apptrace_tmo_t *tmo);
static esp_err_t esp_apptrace_trax_flush_nolock(esp_apptrace_trax_data_t *hw_data, uint32_t min_sz, esp_apptrace_tmo_t *tmo);
static uint8_t *esp_apptrace_trax_up_buffer_get(esp_apptrace_trax_data_t *hw_data, uint32_t size, esp_apptrace_tmo_t *tmo);
static esp_err_t esp_apptrace_trax_up_buffer_put(esp_apptrace_trax_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
static void esp_apptrace_trax_down_buffer_config(esp_apptrace_trax_data_t *hw_data, uint8_t *buf, uint32_t size);
static uint8_t *esp_apptrace_trax_down_buffer_get(esp_apptrace_trax_data_t *hw_data, uint32_t *size, esp_apptrace_tmo_t *tmo);
static esp_err_t esp_apptrace_trax_down_buffer_put(esp_apptrace_trax_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
static bool esp_apptrace_trax_host_is_connected(esp_apptrace_trax_data_t *hw_data);
static esp_err_t esp_apptrace_trax_buffer_swap_start(uint32_t curr_block_id);
static esp_err_t esp_apptrace_trax_buffer_swap(uint32_t new_block_id);
static esp_err_t esp_apptrace_trax_buffer_swap_end(uint32_t new_block_id, uint32_t prev_block_len);
static bool esp_apptrace_trax_host_data_pending(void);
const static char *TAG = "esp_apptrace";
static uint8_t * const s_trax_blocks[] = {
(uint8_t *)TRACEMEM_BLK0_ADDR,
(uint8_t *)TRACEMEM_BLK1_ADDR
};
esp_apptrace_hw_t *esp_apptrace_jtag_hw_get(void **data)
{
#if CONFIG_APPTRACE_DEST_JTAG
static esp_apptrace_membufs_proto_hw_t s_trax_proto_hw = {
.swap_start = esp_apptrace_trax_buffer_swap_start,
.swap = esp_apptrace_trax_buffer_swap,
.swap_end = esp_apptrace_trax_buffer_swap_end,
.host_data_pending = esp_apptrace_trax_host_data_pending,
};
static esp_apptrace_trax_data_t s_trax_hw_data = {
.membufs = {
.hw = &s_trax_proto_hw,
},
};
static esp_apptrace_hw_t s_trax_hw = {
.init = (esp_err_t (*)(void *))esp_apptrace_trax_init,
.get_up_buffer = (uint8_t *(*)(void *, uint32_t, esp_apptrace_tmo_t *))esp_apptrace_trax_up_buffer_get,
.put_up_buffer = (esp_err_t (*)(void *, uint8_t *, esp_apptrace_tmo_t *))esp_apptrace_trax_up_buffer_put,
.flush_up_buffer_nolock = (esp_err_t (*)(void *, uint32_t, esp_apptrace_tmo_t *))esp_apptrace_trax_flush_nolock,
.flush_up_buffer = (esp_err_t (*)(void *, esp_apptrace_tmo_t *))esp_apptrace_trax_flush,
.down_buffer_config = (void (*)(void *, uint8_t *, uint32_t ))esp_apptrace_trax_down_buffer_config,
.get_down_buffer = (uint8_t *(*)(void *, uint32_t *, esp_apptrace_tmo_t *))esp_apptrace_trax_down_buffer_get,
.put_down_buffer = (esp_err_t (*)(void *, uint8_t *, esp_apptrace_tmo_t *))esp_apptrace_trax_down_buffer_put,
.host_is_connected = (bool (*)(void *))esp_apptrace_trax_host_is_connected,
};
*data = &s_trax_hw_data;
return &s_trax_hw;
#else
return NULL;
#endif
}
static esp_err_t esp_apptrace_trax_lock(esp_apptrace_trax_data_t *hw_data, esp_apptrace_tmo_t *tmo)
{
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_err_t ret = esp_apptrace_lock_take(&hw_data->lock, tmo);
if (ret != ESP_OK) {
return ESP_FAIL;
}
#endif
return ESP_OK;
}
static esp_err_t esp_apptrace_trax_unlock(esp_apptrace_trax_data_t *hw_data)
{
esp_err_t ret = ESP_OK;
#if CONFIG_APPTRACE_LOCK_ENABLE
ret = esp_apptrace_lock_give(&hw_data->lock);
#endif
return ret;
}
static inline void esp_apptrace_trax_hw_init(void)
{
// Stop trace, if any (on the current CPU)
eri_write(ERI_TRAX_TRAXCTRL, TRAXCTRL_TRSTP);
eri_write(ERI_TRAX_TRAXCTRL, TRAXCTRL_TMEN);
eri_write(ESP_APPTRACE_TRAX_CTRL_REG, ESP_APPTRACE_TRAX_BLOCK_ID(0));
// this is for OpenOCD to let him know where stub entries vector is resided
// must be read by host before any transfer using TRAX
eri_write(ESP_APPTRACE_TRAX_STAT_REG, 0);
ESP_APPTRACE_LOGI("Initialized TRAX on CPU%d", esp_cpu_get_core_id());
}
static inline void esp_apptrace_trax_select_memory_block(int block_num)
{
// select memory block to be exposed to the TRAX module (accessed by host)
#if CONFIG_IDF_TARGET_ESP32
DPORT_WRITE_PERI_REG(DPORT_TRACEMEM_MUX_MODE_REG, block_num ? TRACEMEM_MUX_BLK0_ONLY : TRACEMEM_MUX_BLK1_ONLY);
#elif CONFIG_IDF_TARGET_ESP32S2
WRITE_PERI_REG(DPORT_PMS_OCCUPY_3_REG, block_num ? BIT(TRACEMEM_MUX_BLK0_NUM-4) : BIT(TRACEMEM_MUX_BLK1_NUM-4));
#elif CONFIG_IDF_TARGET_ESP32S3
// select memory block to be exposed to the TRAX module (accessed by host)
uint32_t block_bits = block_num ? TRACEMEM_CORE0_MUX_BLK_BITS(TRACEMEM_MUX_BLK0_NUM)
: TRACEMEM_CORE0_MUX_BLK_BITS(TRACEMEM_MUX_BLK1_NUM);
block_bits |= block_num ? TRACEMEM_CORE1_MUX_BLK_BITS(TRACEMEM_MUX_BLK0_NUM)
: TRACEMEM_CORE1_MUX_BLK_BITS(TRACEMEM_MUX_BLK1_NUM);
ESP_EARLY_LOGV(TAG, "Select block %d @ %p (bits 0x%" PRIx32 ")", block_num, s_trax_blocks[block_num], block_bits);
DPORT_WRITE_PERI_REG(SENSITIVE_INTERNAL_SRAM_USAGE_2_REG, block_bits);
#endif
}
static inline void esp_apptrace_trax_memory_enable(void)
{
#if CONFIG_IDF_TARGET_ESP32
/* Enable trace memory on PRO CPU */
DPORT_WRITE_PERI_REG(DPORT_PRO_TRACEMEM_ENA_REG, DPORT_PRO_TRACEMEM_ENA_M);
#if CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE == 0
/* Enable trace memory on APP CPU */
DPORT_WRITE_PERI_REG(DPORT_APP_TRACEMEM_ENA_REG, DPORT_APP_TRACEMEM_ENA_M);
#endif
#endif
}
/*****************************************************************************************/
/***************************** Apptrace HW iface *****************************************/
/*****************************************************************************************/
static esp_err_t esp_apptrace_trax_init(esp_apptrace_trax_data_t *hw_data)
{
int core_id = esp_cpu_get_core_id();
// 'esp_apptrace_trax_init()' is called on every core, so ensure to do main initialization only once
if (core_id == 0) {
esp_apptrace_mem_block_t mem_blocks_cfg[2] = {
{
.start = s_trax_blocks[0],
.sz = ESP_APPTRACE_TRAX_BLOCK_SIZE
},
{
.start = s_trax_blocks[1],
.sz = ESP_APPTRACE_TRAX_BLOCK_SIZE
},
};
esp_err_t res = esp_apptrace_membufs_init(&hw_data->membufs, mem_blocks_cfg);
if (res != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to init membufs proto (%d)!", res);
return res;
}
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_init(&hw_data->lock);
#endif
esp_apptrace_trax_memory_enable();
esp_apptrace_trax_select_memory_block(0);
}
// init TRAX on this CPU
esp_apptrace_trax_hw_init();
hw_data->inited |= 1 << core_id;
return ESP_OK;
}
static uint8_t *esp_apptrace_trax_up_buffer_get(esp_apptrace_trax_data_t *hw_data, uint32_t size, esp_apptrace_tmo_t *tmo)
{
uint8_t *ptr;
if (!ESP_APPTRACE_TRAX_INITED(hw_data)) {
return NULL;
}
esp_err_t res = esp_apptrace_trax_lock(hw_data, tmo);
if (res != ESP_OK) {
return NULL;
}
ptr = esp_apptrace_membufs_up_buffer_get(&hw_data->membufs, size, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_trax_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ptr;
}
static esp_err_t esp_apptrace_trax_up_buffer_put(esp_apptrace_trax_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
if (!ESP_APPTRACE_TRAX_INITED(hw_data)) {
return ESP_ERR_INVALID_STATE;
}
// Can avoid locking because esp_apptrace_membufs_up_buffer_put() just modifies buffer's header
esp_err_t res = esp_apptrace_membufs_up_buffer_put(&hw_data->membufs, ptr, tmo);
return res;
}
static void esp_apptrace_trax_down_buffer_config(esp_apptrace_trax_data_t *hw_data, uint8_t *buf, uint32_t size)
{
if (!ESP_APPTRACE_TRAX_INITED(hw_data)) {
return;
}
esp_apptrace_membufs_down_buffer_config(&hw_data->membufs, buf, size);
}
static uint8_t *esp_apptrace_trax_down_buffer_get(esp_apptrace_trax_data_t *hw_data, uint32_t *size, esp_apptrace_tmo_t *tmo)
{
uint8_t *ptr;
if (!ESP_APPTRACE_TRAX_INITED(hw_data)) {
return NULL;
}
esp_err_t res = esp_apptrace_trax_lock(hw_data, tmo);
if (res != ESP_OK) {
return NULL;
}
ptr = esp_apptrace_membufs_down_buffer_get(&hw_data->membufs, size, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_trax_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ptr;
}
static esp_err_t esp_apptrace_trax_down_buffer_put(esp_apptrace_trax_data_t *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
if (!ESP_APPTRACE_TRAX_INITED(hw_data)) {
return ESP_ERR_INVALID_STATE;
}
// Can avoid locking because esp_apptrace_membufs_down_buffer_put() does nothing
/*esp_err_t res = esp_apptrace_trax_lock(hw_data, tmo);
if (res != ESP_OK) {
return res;
}*/
esp_err_t res = esp_apptrace_membufs_down_buffer_put(&hw_data->membufs, ptr, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
/*if (esp_apptrace_trax_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}*/
return res;
}
static bool esp_apptrace_trax_host_is_connected(esp_apptrace_trax_data_t *hw_data)
{
if (!ESP_APPTRACE_TRAX_INITED(hw_data)) {
return false;
}
return eri_read(ESP_APPTRACE_TRAX_CTRL_REG) & ESP_APPTRACE_TRAX_HOST_CONNECT ? true : false;
}
static esp_err_t esp_apptrace_trax_flush_nolock(esp_apptrace_trax_data_t *hw_data, uint32_t min_sz, esp_apptrace_tmo_t *tmo)
{
if (!ESP_APPTRACE_TRAX_INITED(hw_data)) {
return ESP_ERR_INVALID_STATE;
}
return esp_apptrace_membufs_flush_nolock(&hw_data->membufs, min_sz, tmo);
}
static esp_err_t esp_apptrace_trax_flush(esp_apptrace_trax_data_t *hw_data, esp_apptrace_tmo_t *tmo)
{
if (!ESP_APPTRACE_TRAX_INITED(hw_data)) {
return ESP_ERR_INVALID_STATE;
}
esp_err_t res = esp_apptrace_trax_lock(hw_data, tmo);
if (res != ESP_OK) {
return res;
}
res = esp_apptrace_membufs_flush_nolock(&hw_data->membufs, 0, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_trax_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return res;
}
/*****************************************************************************************/
/************************** Membufs proto HW iface ***************************************/
/*****************************************************************************************/
static inline void esp_apptrace_trax_buffer_swap_lock(void)
{
extern uint32_t __esp_apptrace_trax_eri_updated;
// indicate to host that we are about to update.
// this is used only to place CPU into streaming mode at tracing startup
// before starting streaming host can halt us after we read ESP_APPTRACE_TRAX_CTRL_REG and before we updated it
// HACK: in this case host will set breakpoint just after ESP_APPTRACE_TRAX_CTRL_REG update,
// here we set address to set bp at
// enter ERI update critical section
eri_write(ESP_APPTRACE_TRAX_STAT_REG, (uint32_t)&__esp_apptrace_trax_eri_updated);
}
static __attribute__((noinline)) void esp_apptrace_trax_buffer_swap_unlock(void)
{
// exit ERI update critical section
eri_write(ESP_APPTRACE_TRAX_STAT_REG, 0x0);
// TODO: currently host sets breakpoint, use break instruction to stop;
// it will allow to use ESP_APPTRACE_TRAX_STAT_REG for other purposes
asm volatile (
" .global __esp_apptrace_trax_eri_updated\n"
"__esp_apptrace_trax_eri_updated:\n"); // host will set bp here to resolve collision at streaming start
}
static esp_err_t esp_apptrace_trax_buffer_swap_start(uint32_t curr_block_id)
{
esp_err_t res = ESP_OK;
esp_apptrace_trax_buffer_swap_lock();
uint32_t ctrl_reg = eri_read(ESP_APPTRACE_TRAX_CTRL_REG);
uint32_t host_connected = ESP_APPTRACE_TRAX_HOST_CONNECT & ctrl_reg;
if (host_connected) {
uint32_t acked_block = ESP_APPTRACE_TRAX_BLOCK_ID_GET(ctrl_reg);
uint32_t host_to_read = ESP_APPTRACE_TRAX_BLOCK_LEN_GET(ctrl_reg);
if (host_to_read != 0 || acked_block != (curr_block_id & ESP_APPTRACE_TRAX_BLOCK_ID_MSK)) {
ESP_APPTRACE_LOGD("HC[%d]: Can not switch %" PRIx32 " %" PRIu32 " %" PRIx32 " %" PRIx32 "/%" PRIx32,
esp_cpu_get_core_id(), ctrl_reg, host_to_read, acked_block,
curr_block_id & ESP_APPTRACE_TRAX_BLOCK_ID_MSK, curr_block_id);
res = ESP_ERR_NO_MEM;
goto _on_err;
}
}
return ESP_OK;
_on_err:
esp_apptrace_trax_buffer_swap_unlock();
return res;
}
static esp_err_t esp_apptrace_trax_buffer_swap_end(uint32_t new_block_id, uint32_t prev_block_len)
{
uint32_t ctrl_reg = eri_read(ESP_APPTRACE_TRAX_CTRL_REG);
uint32_t host_connected = ESP_APPTRACE_TRAX_HOST_CONNECT & ctrl_reg;
/* calculate CRC16 of the already switched block */
if (prev_block_len > 0) {
const uint8_t *prev_block_start = s_trax_blocks[!((new_block_id % 2))];
uint16_t crc16 = esp_rom_crc16_le(0, prev_block_start, prev_block_len);
eri_write(ESP_APPTRACE_TRAX_CRC16_REG, crc16 | ESP_APPTRACE_CRC_INDICATOR);
ESP_APPTRACE_LOGD("CRC16:%x %d @%x", crc16, prev_block_len, prev_block_start);
}
eri_write(ESP_APPTRACE_TRAX_CTRL_REG, ESP_APPTRACE_TRAX_BLOCK_ID(new_block_id) |
host_connected | ESP_APPTRACE_TRAX_BLOCK_LEN(prev_block_len));
esp_apptrace_trax_buffer_swap_unlock();
return ESP_OK;
}
static esp_err_t esp_apptrace_trax_buffer_swap(uint32_t new_block_id)
{
esp_apptrace_trax_select_memory_block(new_block_id);
return ESP_OK;
}
static bool esp_apptrace_trax_host_data_pending(void)
{
uint32_t ctrl_reg = eri_read(ESP_APPTRACE_TRAX_CTRL_REG);
return (ctrl_reg & ESP_APPTRACE_TRAX_HOST_DATA) ? true : false;
}

View File

@@ -1,546 +0,0 @@
/*
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*/
//
// How It Works
// ************
// 1. Components Overview
// ======================
// Xtensa has useful feature: TRAX debug module. It allows recording program execution flow at run-time without disturbing CPU.
// Execution flow data are written to configurable Trace RAM block. Besides accessing Trace RAM itself TRAX module also allows to read/write
// trace memory via its registers by means of JTAG, APB or ERI transactions.
// ESP32 has two Xtensa cores with separate TRAX modules on them and provides two special memory regions to be used as trace memory.
// Chip allows muxing access to those trace memory blocks in such a way that while one block is accessed by CPUs another one can be accessed by host
// by means of reading/writing TRAX registers via JTAG. Blocks muxing is configurable at run-time and allows switching trace memory blocks between
// accessors in round-robin fashion so they can read/write separate memory blocks without disturbing each other.
// This module implements application tracing feature based on above mechanisms. It allows to transfer arbitrary user data to/from
// host via JTAG with minimal impact on system performance. This module is implied to be used in the following tracing scheme.
// ------>------ ----- (host components) -----
// | | | |
// ------------------- ----------------------- ----------------------- ---------------- ------ --------- -----------------
// |trace data source|-->|target tracing module|<--->|TRAX_MEM0 | TRAX_MEM1|---->|TRAX_DATA_REGS|<-->|JTAG|<--->|OpenOCD|-->|trace data sink|
// ------------------- ----------------------- ----------------------- ---------------- ------ --------- -----------------
// | | | |
// | ------<------ ---------------- |
// |<------------------------------------------->|TRAX_CTRL_REGS|<---->|
// ----------------
// In general tracing goes in the following way. User application requests tracing module to send some data by calling esp_apptrace_buffer_get(),
// module allocates necessary buffer in current input trace block. Then user fills received buffer with data and calls esp_apptrace_buffer_put().
// When current input trace block is filled with app data it is exposed to host and the second block becomes input one and buffer filling restarts.
// While target application fills one TRAX block host reads another one via JTAG.
// This module also allows communication in the opposite direction: from host to target. As it was said ESP32 and host can access different TRAX blocks
// simultaneously, so while target writes trace data to one block host can write its own data (e.g. tracing commands) to another one then when
// blocks are switched host receives trace data and target receives data written by host application. Target user application can read host data
// by calling esp_apptrace_read() API.
// To control buffer switching and for other communication purposes this implementation uses some TRAX registers. It is safe since HW TRAX tracing
// can not be used along with application tracing feature so these registers are freely readable/writeable via JTAG from host and via ERI from ESP32 cores.
// Overhead of this implementation on target CPU is produced only by allocating/managing buffers and copying of data.
// On the host side special OpenOCD command must be used to read trace data.
// 2. TRAX Registers layout
// ========================
// This module uses two TRAX HW registers and one Performance Monitor register to communicate with host SW (OpenOCD).
// - Control register uses TRAX_DELAYCNT as storage. Only lower 24 bits of TRAX_DELAYCNT are writable. Control register has the following bitfields:
// | 31..XXXXXX..24 | 23 .(host_connect). 23| 22..(block_id)..15 | 14..(block_len)..0 |
// 14..0 bits - actual length of user data in trace memory block. Target updates it every time it fills memory block and exposes it to host.
// Host writes zero to this field when it finishes reading exposed block;
// 21..15 bits - trace memory block transfer ID. Block counter. It can overflow. Updated by target, host should not modify it. Actually can be 2 bits;
// 22 bit - 'host data present' flag. If set to one there is data from host, otherwise - no host data;
// 23 bit - 'host connected' flag. If zero then host is not connected and tracing module works in post-mortem mode, otherwise in streaming mode;
// - Status register uses TRAX_TRIGGERPC as storage. If this register is not zero then current CPU is changing TRAX registers and
// this register holds address of the instruction which application will execute when it finishes with those registers modifications.
// See 'Targets Connection' section for details.
// - CRC16 register uses ERI_PERFMON_PM1 as storage. This register is used to store CRC16 checksum of the exposed trace memory block.
// The register has the following format:
// | 31..16 (CRC indicator) | 15..0 (CRC16 value) |
// CRC indicator (0xA55A) is used to distinguish valid CRC values from other data that might be in the register.
// CRC16 is calculated over the entire exposed block and is updated every time a block is exposed to the host.
// This allows the host to verify data integrity of the received trace data.
// 3. Modes of operation
// =====================
// This module supports two modes of operation:
// - Post-mortem mode. This is the default mode. In this mode application tracing module does not check whether host has read all the data from block
// exposed to it and switches block in any case. The mode does not need host interaction for operation and so can be useful when only the latest
// trace data are necessary, e.g. for analyzing crashes. On panic the latest data from current input block are exposed to host and host can read them.
// It can happen that system panic occurs when there are very small amount of data which are not exposed to host yet (e.g. crash just after the
// TRAX block switch). In this case the previous 16KB of collected data will be dropped and host will see the latest, but very small piece of trace.
// It can be insufficient to diagnose the problem. To avoid such situations there is menuconfig option
// CONFIG_APPTRACE_POSTMORTEM_FLUSH_THRESH
// which controls the threshold for flushing data in case of panic.
// - Streaming mode. Tracing module enters this mode when host connects to target and sets respective bits in control registers (per core).
// In this mode before switching the block tracing module waits for the host to read all the data from the previously exposed block.
// On panic tracing module also waits (timeout is configured via menuconfig via CONFIG_APPTRACE_ONPANIC_HOST_FLUSH_TMO) for the host to read all data.
// 4. Communication Protocol
// =========================
// 4.1 Trace Memory Blocks
// -----------------------
// Communication is controlled via special register. Host periodically polls control register on each core to find out if there are any data available.
// When current input memory block is filled it is exposed to host and 'block_len' and 'block_id' fields are updated in the control register.
// Host reads new register value and according to it's value starts reading data from exposed block. Meanwhile target starts filling another trace block.
// When host finishes reading the block it clears 'block_len' field in control register indicating to the target that it is ready to accept the next one.
// If the host has some data to transfer to the target it writes them to trace memory block before clearing 'block_len' field. Then it sets
// 'host_data_present' bit and clears 'block_len' field in control register. Upon every block switch target checks 'host_data_present' bit and if it is set
// reads them to down buffer before writing any trace data to switched TRAX block.
// 4.2 User Data Chunks Level
// --------------------------
// Since trace memory block is shared between user data chunks and data copying is performed on behalf of the API user (in its normal context) in
// multithreading environment it can happen that task/ISR which copies data is preempted by another high prio task/ISR. So it is possible situation
// that task/ISR will fail to complete filling its data chunk before the whole trace block is exposed to the host. To handle such conditions tracing
// module prepends all user data chunks with header which contains allocated buffer size and actual data length within it. OpenOCD command
// which reads application traces reports error when it reads incomplete user data block.
// Data which are transffered from host to target are also prepended with a header. Down channel data header is simple and consists of one two bytes field
// containing length of host data following the header.
// 4.3 Target Connection/Disconnection
// -----------------------------------
// When host is going to start tracing in streaming mode it needs to put both ESP32 cores into initial state when 'host connected' bit is set
// on both cores. To accomplish this host halts both cores and sets this bit in TRAX registers. But target code can be halted in state when it has read control
// register but has not updated its value. To handle such situations target code indicates to the host that it is updating control register by writing
// non-zero value to status register. Actually it writes address of the instruction which it will execute when it finishes with
// the registers update. When target is halted during control register update host sets breakpoint at the address from status register and resumes CPU.
// After target code finishes with register update it is halted on breakpoint, host detects it and safely sets 'host connected' bit. When both cores
// are set up they are resumed. Tracing starts without further intrusion into CPUs work.
// When host is going to stop tracing in streaming mode it needs to disconnect targets. Disconnection process is done using the same algorithm
// as for connecting, but 'host connected' bits are cleared on ESP32 cores.
// 5. Module Access Synchronization
// ================================
// Access to internal module's data is synchronized with custom mutex. Mutex is a wrapper for portMUX_TYPE and uses almost the same sync mechanism as in
// vPortCPUAcquireMutex/vPortCPUReleaseMutex. The mechanism uses S32C1I Xtensa instruction to implement exclusive access to module's data from tasks and
// ISRs running on both cores. Also custom mutex allows specifying timeout for locking operation. Locking routine checks underlying mutex in cycle until
// it gets its ownership or timeout expires. The differences of application tracing module's mutex implementation from vPortCPUAcquireMutex/vPortCPUReleaseMutex are:
// - Support for timeouts.
// - Local IRQs for CPU which owns the mutex are disabled till the call to unlocking routine. This is made to avoid possible task's prio inversion.
// When low prio task takes mutex and enables local IRQs gets preempted by high prio task which in its turn can try to acquire mutex using infinite timeout.
// So no local task switch occurs when mutex is locked. But this does not apply to tasks on another CPU.
// WARNING: Priority inversion can happen when low prio task works on one CPU and medium and high prio tasks work on another.
// WARNING: Care must be taken when selecting timeout values for trace calls from ISRs. Tracing module does not care about watchdogs when waiting
// on internal locks and for host to complete previous block reading, so if timeout value exceeds watchdog's one it can lead to the system reboot.
// 6. Timeouts
// ===========
// Timeout mechanism is based on xthal_get_ccount() routine and supports timeout values in microseconds.
// There are two situations when task/ISR can be delayed by tracing API call. Timeout mechanism takes into account both conditions:
// - Trace data are locked by another task/ISR. When waiting on trace data lock.
// - Current TRAX memory input block is full when working in streaming mode (host is connected). When waiting for host to complete previous block reading.
// When waiting for any of above conditions xthal_get_ccount() is called periodically to calculate time elapsed from trace API routine entry. When elapsed
// time exceeds specified timeout value operation is canceled and ESP_ERR_TIMEOUT code is returned.
#include "sdkconfig.h"
#include "soc/soc.h"
#include "soc/dport_reg.h"
#include "soc/tracemem_config.h"
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
#include "soc/sensitive_reg.h"
#endif
#include "eri.h"
#include "esp_private/trax.h"
#include "esp_cpu.h"
#include "esp_log.h"
#include "esp_app_trace_membufs_proto.h"
#include "esp_app_trace_port.h"
#include "esp_rom_crc.h"
// TRAX is disabled, so we use its registers for our own purposes
// | 31..XXXXXX..24 | 23 .(host_connect). 23 | 22 .(host_data). 22| 21..(block_id)..15 | 14..(block_len)..0 |
#define ESP_APPTRACE_TRAX_CTRL_REG ERI_TRAX_DELAYCNT
#define ESP_APPTRACE_TRAX_STAT_REG ERI_TRAX_TRIGGERPC
#define ESP_APPTRACE_TRAX_CRC16_REG ERI_PERFMON_PM1
#define ESP_APPTRACE_CRC_INDICATOR (0xA55AU << 16)
#define ESP_APPTRACE_TRAX_BLOCK_LEN_MSK 0x7FFFUL
#define ESP_APPTRACE_TRAX_BLOCK_LEN(_l_) ((_l_) & ESP_APPTRACE_TRAX_BLOCK_LEN_MSK)
#define ESP_APPTRACE_TRAX_BLOCK_LEN_GET(_v_) ((_v_) & ESP_APPTRACE_TRAX_BLOCK_LEN_MSK)
#define ESP_APPTRACE_TRAX_BLOCK_ID_MSK 0x7FUL
#define ESP_APPTRACE_TRAX_BLOCK_ID(_id_) (((_id_) & ESP_APPTRACE_TRAX_BLOCK_ID_MSK) << 15)
#define ESP_APPTRACE_TRAX_BLOCK_ID_GET(_v_) (((_v_) >> 15) & ESP_APPTRACE_TRAX_BLOCK_ID_MSK)
#define ESP_APPTRACE_TRAX_HOST_DATA (1 << 22)
#define ESP_APPTRACE_TRAX_HOST_CONNECT (1 << 23)
#define ESP_APPTRACE_TRAX_INITED(_hw_) ((_hw_)->inited & (1 << esp_cpu_get_core_id()))
#define ESP_APPTRACE_TRAX_BLOCK_SIZE (0x4000UL)
/** TRAX HW transport data */
typedef struct {
uint8_t inited;
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_t lock; // sync lock
#endif
esp_apptrace_membufs_proto_data_t membufs;
} esp_apptrace_trax_data_t;
const static char *TAG = "esp_apptrace";
static uint8_t * const s_trax_blocks[] = {
(uint8_t *)TRACEMEM_BLK0_ADDR,
(uint8_t *)TRACEMEM_BLK1_ADDR
};
static esp_err_t esp_apptrace_trax_lock(void *hw_data, esp_apptrace_tmo_t *tmo)
{
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_trax_data_t *trax_data = hw_data;
esp_err_t ret = esp_apptrace_lock_take(&trax_data->lock, tmo);
if (ret != ESP_OK) {
return ESP_FAIL;
}
#endif
return ESP_OK;
}
static esp_err_t esp_apptrace_trax_unlock(void *hw_data)
{
esp_err_t ret = ESP_OK;
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_trax_data_t *trax_data = hw_data;
ret = esp_apptrace_lock_give(&trax_data->lock);
#endif
return ret;
}
static inline void esp_apptrace_trax_hw_init(void)
{
// Stop trace, if any (on the current CPU)
eri_write(ERI_TRAX_TRAXCTRL, TRAXCTRL_TRSTP);
eri_write(ERI_TRAX_TRAXCTRL, TRAXCTRL_TMEN);
eri_write(ESP_APPTRACE_TRAX_CTRL_REG, ESP_APPTRACE_TRAX_BLOCK_ID(0));
// this is for OpenOCD to let him know where stub entries vector is resided
// must be read by host before any transfer using TRAX
eri_write(ESP_APPTRACE_TRAX_STAT_REG, 0);
ESP_APPTRACE_LOGI("Initialized TRAX on CPU%d", esp_cpu_get_core_id());
}
static inline void esp_apptrace_trax_select_memory_block(int block_num)
{
// select memory block to be exposed to the TRAX module (accessed by host)
#if CONFIG_IDF_TARGET_ESP32
DPORT_WRITE_PERI_REG(DPORT_TRACEMEM_MUX_MODE_REG, block_num ? TRACEMEM_MUX_BLK0_ONLY : TRACEMEM_MUX_BLK1_ONLY);
#elif CONFIG_IDF_TARGET_ESP32S2
WRITE_PERI_REG(DPORT_PMS_OCCUPY_3_REG, block_num ? BIT(TRACEMEM_MUX_BLK0_NUM - 4) : BIT(TRACEMEM_MUX_BLK1_NUM - 4));
#elif CONFIG_IDF_TARGET_ESP32S3
// select memory block to be exposed to the TRAX module (accessed by host)
uint32_t block_bits = block_num ? TRACEMEM_CORE0_MUX_BLK_BITS(TRACEMEM_MUX_BLK0_NUM)
: TRACEMEM_CORE0_MUX_BLK_BITS(TRACEMEM_MUX_BLK1_NUM);
block_bits |= block_num ? TRACEMEM_CORE1_MUX_BLK_BITS(TRACEMEM_MUX_BLK0_NUM)
: TRACEMEM_CORE1_MUX_BLK_BITS(TRACEMEM_MUX_BLK1_NUM);
ESP_EARLY_LOGV(TAG, "Select block %d @ %p (bits 0x%" PRIx32 ")", block_num, s_trax_blocks[block_num], block_bits);
DPORT_WRITE_PERI_REG(SENSITIVE_INTERNAL_SRAM_USAGE_2_REG, block_bits);
#endif
}
static inline void esp_apptrace_trax_memory_enable(void)
{
#if CONFIG_IDF_TARGET_ESP32
/* Enable trace memory on PRO CPU */
DPORT_WRITE_PERI_REG(DPORT_PRO_TRACEMEM_ENA_REG, DPORT_PRO_TRACEMEM_ENA_M);
#if CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE == 0
/* Enable trace memory on APP CPU */
DPORT_WRITE_PERI_REG(DPORT_APP_TRACEMEM_ENA_REG, DPORT_APP_TRACEMEM_ENA_M);
#endif
#endif
}
/*****************************************************************************************/
/***************************** Apptrace HW iface *****************************************/
/*****************************************************************************************/
static esp_err_t esp_apptrace_trax_init(void *hw_data, const esp_apptrace_config_t *config)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
// 'esp_apptrace_trax_init()' is called on every core, so ensure to do main initialization only once
int core_id = esp_cpu_get_core_id();
if (core_id == 0) {
esp_apptrace_mem_block_t mem_blocks_cfg[2] = {
{
.start = s_trax_blocks[0],
.sz = ESP_APPTRACE_TRAX_BLOCK_SIZE
},
{
.start = s_trax_blocks[1],
.sz = ESP_APPTRACE_TRAX_BLOCK_SIZE
},
};
trax_data->membufs.header_size = ESP_APPTRACE_HEADER_SIZE_32;
esp_err_t res = esp_apptrace_membufs_init(&trax_data->membufs, mem_blocks_cfg);
if (res != ESP_OK) {
ESP_APPTRACE_LOGE("Failed to init membufs proto (%d)!", res);
return res;
}
#if CONFIG_APPTRACE_LOCK_ENABLE
esp_apptrace_lock_init(&trax_data->lock);
#endif
esp_apptrace_trax_memory_enable();
esp_apptrace_trax_select_memory_block(0);
}
// init TRAX on this CPU
esp_apptrace_trax_hw_init();
trax_data->inited |= 1 << core_id;
return ESP_OK;
}
static uint8_t *esp_apptrace_trax_up_buffer_get(void *hw_data, uint32_t size, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
if (!ESP_APPTRACE_TRAX_INITED(trax_data)) {
return NULL;
}
esp_err_t res = esp_apptrace_trax_lock(trax_data, tmo);
if (res != ESP_OK) {
return NULL;
}
uint8_t *ptr = esp_apptrace_membufs_up_buffer_get(&trax_data->membufs, size, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_trax_unlock(trax_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ptr;
}
static esp_err_t esp_apptrace_trax_up_buffer_put(void *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
if (!ESP_APPTRACE_TRAX_INITED(trax_data)) {
return ESP_ERR_INVALID_STATE;
}
// Can avoid locking because esp_apptrace_membufs_up_buffer_put() just modifies buffer's header
esp_err_t res = esp_apptrace_membufs_up_buffer_put(&trax_data->membufs, ptr, tmo);
return res;
}
static void esp_apptrace_trax_down_buffer_config(void *hw_data, uint8_t *buf, uint32_t size)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
if (!ESP_APPTRACE_TRAX_INITED(trax_data)) {
return;
}
esp_apptrace_membufs_down_buffer_config(&trax_data->membufs, buf, size);
}
static uint8_t *esp_apptrace_trax_down_buffer_get(void *hw_data, uint32_t *size, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
if (!ESP_APPTRACE_TRAX_INITED(trax_data)) {
return NULL;
}
esp_err_t res = esp_apptrace_trax_lock(trax_data, tmo);
if (res != ESP_OK) {
return NULL;
}
uint8_t *ptr = esp_apptrace_membufs_down_buffer_get(&trax_data->membufs, size, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_trax_unlock(trax_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return ptr;
}
static esp_err_t esp_apptrace_trax_down_buffer_put(void *hw_data, uint8_t *ptr, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
if (!ESP_APPTRACE_TRAX_INITED(trax_data)) {
return ESP_ERR_INVALID_STATE;
}
// Can avoid locking because esp_apptrace_membufs_down_buffer_put() does nothing
/*esp_err_t res = esp_apptrace_trax_lock(hw_data, tmo);
if (res != ESP_OK) {
return res;
}*/
esp_err_t res = esp_apptrace_membufs_down_buffer_put(&trax_data->membufs, ptr, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
/*if (esp_apptrace_trax_unlock(hw_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}*/
return res;
}
static bool esp_apptrace_trax_host_is_connected(void *hw_data)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
if (!ESP_APPTRACE_TRAX_INITED(trax_data)) {
return false;
}
return eri_read(ESP_APPTRACE_TRAX_CTRL_REG) & ESP_APPTRACE_TRAX_HOST_CONNECT ? true : false;
}
static esp_err_t esp_apptrace_trax_flush_nolock(void *hw_data, uint32_t min_sz, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
if (!ESP_APPTRACE_TRAX_INITED(trax_data)) {
return ESP_ERR_INVALID_STATE;
}
return esp_apptrace_membufs_flush_nolock(&trax_data->membufs, min_sz, tmo);
}
static esp_err_t esp_apptrace_trax_flush(void *hw_data, esp_apptrace_tmo_t *tmo)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
if (!ESP_APPTRACE_TRAX_INITED(trax_data)) {
return ESP_ERR_INVALID_STATE;
}
esp_err_t res = esp_apptrace_trax_lock(trax_data, tmo);
if (res != ESP_OK) {
return res;
}
res = esp_apptrace_membufs_flush_nolock(&trax_data->membufs, 0, tmo);
// now we can safely unlock apptrace to allow other tasks/ISRs to get other buffers and write their data
if (esp_apptrace_trax_unlock(trax_data) != ESP_OK) {
assert(false && "Failed to unlock apptrace data!");
}
return res;
}
/*****************************************************************************************/
/************************** Membufs proto HW iface ***************************************/
/*****************************************************************************************/
static inline void esp_apptrace_trax_buffer_swap_lock(void)
{
extern uint32_t __esp_apptrace_trax_eri_updated;
// indicate to host that we are about to update.
// this is used only to place CPU into streaming mode at tracing startup
// before starting streaming host can halt us after we read ESP_APPTRACE_TRAX_CTRL_REG and before we updated it
// HACK: in this case host will set breakpoint just after ESP_APPTRACE_TRAX_CTRL_REG update,
// here we set address to set bp at
// enter ERI update critical section
eri_write(ESP_APPTRACE_TRAX_STAT_REG, (uint32_t)&__esp_apptrace_trax_eri_updated);
}
static __attribute__((noinline)) void esp_apptrace_trax_buffer_swap_unlock(void)
{
// exit ERI update critical section
eri_write(ESP_APPTRACE_TRAX_STAT_REG, 0x0);
// TODO: currently host sets breakpoint, use break instruction to stop;
// it will allow to use ESP_APPTRACE_TRAX_STAT_REG for other purposes
asm volatile(
" .global __esp_apptrace_trax_eri_updated\n"
"__esp_apptrace_trax_eri_updated:\n"); // host will set bp here to resolve collision at streaming start
}
static esp_err_t esp_apptrace_trax_buffer_swap_start(uint32_t curr_block_id)
{
esp_err_t res = ESP_OK;
esp_apptrace_trax_buffer_swap_lock();
uint32_t ctrl_reg = eri_read(ESP_APPTRACE_TRAX_CTRL_REG);
uint32_t host_connected = ESP_APPTRACE_TRAX_HOST_CONNECT & ctrl_reg;
if (host_connected) {
uint32_t acked_block = ESP_APPTRACE_TRAX_BLOCK_ID_GET(ctrl_reg);
uint32_t host_to_read = ESP_APPTRACE_TRAX_BLOCK_LEN_GET(ctrl_reg);
if (host_to_read != 0 || acked_block != (curr_block_id & ESP_APPTRACE_TRAX_BLOCK_ID_MSK)) {
ESP_APPTRACE_LOGD("HC[%d]: Can not switch %" PRIx32 " %" PRIu32 " %" PRIx32 " %" PRIx32 "/%" PRIx32,
esp_cpu_get_core_id(), ctrl_reg, host_to_read, acked_block,
curr_block_id & ESP_APPTRACE_TRAX_BLOCK_ID_MSK, curr_block_id);
res = ESP_ERR_NO_MEM;
goto _on_err;
}
}
return ESP_OK;
_on_err:
esp_apptrace_trax_buffer_swap_unlock();
return res;
}
static esp_err_t esp_apptrace_trax_buffer_swap_end(uint32_t new_block_id, uint32_t prev_block_len)
{
uint32_t ctrl_reg = eri_read(ESP_APPTRACE_TRAX_CTRL_REG);
uint32_t host_connected = ESP_APPTRACE_TRAX_HOST_CONNECT & ctrl_reg;
eri_write(ESP_APPTRACE_TRAX_CTRL_REG, ESP_APPTRACE_TRAX_BLOCK_ID(new_block_id) |
host_connected | ESP_APPTRACE_TRAX_BLOCK_LEN(prev_block_len));
esp_apptrace_trax_buffer_swap_unlock();
return ESP_OK;
}
static esp_err_t esp_apptrace_trax_buffer_swap(uint32_t new_block_id, uint32_t prev_block_len)
{
/* Before switching to the new block, calculate CRC16 of the current block */
if (prev_block_len > 0) {
const uint8_t *prev_block_start = s_trax_blocks[!((new_block_id % 2))];
uint16_t crc16 = esp_rom_crc16_le(0, prev_block_start, prev_block_len);
eri_write(ESP_APPTRACE_TRAX_CRC16_REG, crc16 | ESP_APPTRACE_CRC_INDICATOR);
ESP_APPTRACE_LOGD("CRC16:%x %d @%x", crc16, prev_block_len, prev_block_start);
}
esp_apptrace_trax_select_memory_block(new_block_id);
return ESP_OK;
}
static bool esp_apptrace_trax_host_data_pending(void)
{
uint32_t ctrl_reg = eri_read(ESP_APPTRACE_TRAX_CTRL_REG);
return (ctrl_reg & ESP_APPTRACE_TRAX_HOST_DATA) ? true : false;
}
static void esp_apptrace_trax_set_header_size(void *hw_data, esp_apptrace_header_size_t header_size)
{
esp_apptrace_trax_data_t *trax_data = hw_data;
trax_data->membufs.header_size = header_size;
}
esp_apptrace_hw_t *esp_apptrace_jtag_hw_get(void **data)
{
static esp_apptrace_membufs_proto_hw_t s_trax_proto_hw = {
.swap_start = esp_apptrace_trax_buffer_swap_start,
.swap = esp_apptrace_trax_buffer_swap,
.swap_end = esp_apptrace_trax_buffer_swap_end,
.host_data_pending = esp_apptrace_trax_host_data_pending,
};
static esp_apptrace_trax_data_t s_trax_hw_data = {
.membufs = {
.hw = &s_trax_proto_hw,
},
};
static esp_apptrace_hw_t s_trax_hw = {
.init = esp_apptrace_trax_init,
.get_up_buffer = esp_apptrace_trax_up_buffer_get,
.put_up_buffer = esp_apptrace_trax_up_buffer_put,
.flush_up_buffer_nolock = esp_apptrace_trax_flush_nolock,
.flush_up_buffer = esp_apptrace_trax_flush,
.down_buffer_config = esp_apptrace_trax_down_buffer_config,
.get_down_buffer = esp_apptrace_trax_down_buffer_get,
.put_down_buffer = esp_apptrace_trax_down_buffer_put,
.host_is_connected = esp_apptrace_trax_host_is_connected,
.set_header_size = esp_apptrace_trax_set_header_size,
};
*data = &s_trax_hw_data;
return &s_trax_hw;
}

View File

@@ -0,0 +1,69 @@
/*
* SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ESP_DBG_STUBS_H_
#define ESP_DBG_STUBS_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "esp_err.h"
/**
* Debug stubs entries IDs
*/
typedef enum {
ESP_DBG_STUB_MAGIC_NUM,
ESP_DBG_STUB_TABLE_SIZE,
ESP_DBG_STUB_CONTROL_DATA, ///< stubs descriptor entry
ESP_DBG_STUB_ENTRY_FIRST,
ESP_DBG_STUB_ENTRY_GCOV ///< GCOV entry
= ESP_DBG_STUB_ENTRY_FIRST,
ESP_DBG_STUB_ENTRY_CAPABILITIES,
ESP_DBG_STUB_ENTRY_MAX
} esp_dbg_stub_id_t;
#define ESP_DBG_STUB_MAGIC_NUM_VAL 0xFEEDBEEF
#define ESP_DBG_STUB_CAP_GCOV_TASK (1 << 0)
/**
* @brief Initializes debug stubs.
*
* @note Must be called after esp_apptrace_init() if app tracing is enabled.
*/
void esp_dbg_stubs_init(void);
/**
* @brief Initializes application tracing module.
*
* @note Should be called before any esp_apptrace_xxx call.
*
* @param id Stub ID.
* @param entry Stub entry. Usually it is stub entry function address,
* but can be any value meaningfull for OpenOCD command/code
* such as capabilities
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_dbg_stub_entry_set(esp_dbg_stub_id_t id, uint32_t entry);
/**
* @brief Retrives the corresponding stub entry
*
* @param id Stub ID.
* @param entry Stub entry. Usually it is stub entry function address,
* but can be any value meaningfull for OpenOCD command/code
* such as capabilities
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_dbg_stub_entry_get(esp_dbg_stub_id_t id, uint32_t *entry);
#ifdef __cplusplus
}
#endif
#endif // ESP_DBG_STUBS_H_

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2020-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -29,7 +29,7 @@ typedef struct {
typedef struct {
esp_err_t (*swap_start)(uint32_t curr_block_id);
esp_err_t (*swap)(uint32_t new_block_id, uint32_t prev_block_len);
esp_err_t (*swap)(uint32_t new_block_id);
esp_err_t (*swap_end)(uint32_t new_block_id, uint32_t prev_block_len);
bool (*host_data_pending)(void);
} esp_apptrace_membufs_proto_hw_t;
@@ -38,9 +38,14 @@ typedef struct {
esp_apptrace_membufs_proto_hw_t * hw;
volatile esp_apptrace_membufs_state_t state; // state
esp_apptrace_mem_block_t blocks[2]; // memory blocks
#if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
// ring buffer control struct for pending user blocks
esp_apptrace_rb_t rb_pend;
// storage for pending user blocks
uint8_t pending_data[CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX + 1];
#endif
// ring buffer control struct for data from host (down buffer)
esp_apptrace_rb_t rb_down;
int header_size; ///< Size of the trace header (2 or 4 bytes)
} esp_apptrace_membufs_proto_data_t;
esp_err_t esp_apptrace_membufs_init(esp_apptrace_membufs_proto_data_t *proto, const esp_apptrace_mem_block_t blocks_cfg[2]);

View File

@@ -0,0 +1,41 @@
# idf_create_lcov_report
#
# Create coverage report.
function(idf_create_coverage_report report_dir)
set(gcov_tool ${_CMAKE_TOOLCHAIN_PREFIX}gcov)
idf_build_get_property(project_name PROJECT_NAME)
file(TO_NATIVE_PATH "${report_dir}" _report_dir)
file(TO_NATIVE_PATH "${project_dir}" _project_dir)
file(TO_NATIVE_PATH "${report_dir}/html/index.html" _index_path)
add_custom_target(pre-cov-report
COMMENT "Generating coverage report in: ${_report_dir}"
COMMAND ${CMAKE_COMMAND} -E echo "Using gcov: ${gcov_tool}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${_report_dir}/html
)
add_custom_target(lcov-report
COMMENT "WARNING: lcov-report is deprecated. Please use gcovr-report instead."
COMMAND lcov --gcov-tool ${gcov_tool} -c -d ${CMAKE_CURRENT_BINARY_DIR} -o ${_report_dir}/${project_name}.info
COMMAND genhtml -o ${_report_dir}/html ${_report_dir}/${project_name}.info
DEPENDS pre-cov-report
)
add_custom_target(gcovr-report
COMMAND gcovr -r ${_project_dir} --gcov-executable ${gcov_tool} -s --html-details ${_index_path}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS pre-cov-report
)
endfunction()
# idf_clean_coverage_report
#
# Clean coverage report.
function(idf_clean_coverage_report report_dir)
file(TO_CMAKE_PATH "${report_dir}" _report_dir)
add_custom_target(cov-data-clean
COMMENT "Clean coverage report in: ${_report_dir}"
COMMAND ${CMAKE_COMMAND} -E remove_directory ${_report_dir})
endfunction()

View File

@@ -2,11 +2,31 @@
# CONFIG_DEPRECATED_OPTION CONFIG_NEW_OPTION
CONFIG_ESP32_APPTRACE_DESTINATION CONFIG_APPTRACE_DESTINATION
CONFIG_ESP32_APPTRACE_DEST_NONE CONFIG_APPTRACE_DEST_NONE
CONFIG_ESP32_APPTRACE_DEST_TRAX CONFIG_APPTRACE_DEST_JTAG
CONFIG_ESP32_APPTRACE_ENABLE CONFIG_ESP_TRACE_TRANSPORT_APPTRACE
CONFIG_ESP32_APPTRACE_ENABLE CONFIG_APPTRACE_ENABLE
CONFIG_ESP32_APPTRACE_LOCK_ENABLE CONFIG_APPTRACE_LOCK_ENABLE
CONFIG_ESP32_APPTRACE_ONPANIC_HOST_FLUSH_TMO CONFIG_APPTRACE_ONPANIC_HOST_FLUSH_TMO
CONFIG_ESP32_APPTRACE_POSTMORTEM_FLUSH_TRAX_THRESH CONFIG_APPTRACE_POSTMORTEM_FLUSH_THRESH
CONFIG_ESP32_APPTRACE_PENDING_DATA_SIZE_MAX CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX
CONFIG_ESP32_GCOV_ENABLE CONFIG_APPTRACE_GCOV_ENABLE
CONFIG_SYSVIEW_TS_SOURCE_CCOUNT CONFIG_ESP_TRACE_TS_SOURCE_CCOUNT
CONFIG_SYSVIEW_TS_SOURCE_ESP_TIMER CONFIG_ESP_TRACE_TS_SOURCE_ESP_TIMER
CONFIG_SYSVIEW_ENABLE CONFIG_APPTRACE_SV_ENABLE
CONFIG_SYSVIEW_TS_SOURCE CONFIG_APPTRACE_SV_TS_SOURCE
CONFIG_SYSVIEW_TS_SOURCE_CCOUNT CONFIG_APPTRACE_SV_TS_SOURCE_CCOUNT
CONFIG_SYSVIEW_TS_SOURCE_ESP_TIMER CONFIG_APPTRACE_SV_TS_SOURCE_ESP_TIMER
CONFIG_SYSVIEW_MAX_TASKS CONFIG_APPTRACE_SV_MAX_TASKS
CONFIG_SYSVIEW_BUF_WAIT_TMO CONFIG_APPTRACE_SV_BUF_WAIT_TMO
CONFIG_SYSVIEW_EVT_OVERFLOW_ENABLE CONFIG_APPTRACE_SV_EVT_OVERFLOW_ENABLE
CONFIG_SYSVIEW_EVT_ISR_ENTER_ENABLE CONFIG_APPTRACE_SV_EVT_ISR_ENTER_ENABLE
CONFIG_SYSVIEW_EVT_ISR_EXIT_ENABLE CONFIG_APPTRACE_SV_EVT_ISR_EXIT_ENABLE
CONFIG_SYSVIEW_EVT_ISR_TO_SCHEDULER_ENABLE CONFIG_APPTRACE_SV_EVT_ISR_TO_SCHED_ENABLE
CONFIG_SYSVIEW_EVT_TASK_START_EXEC_ENABLE CONFIG_APPTRACE_SV_EVT_TASK_START_EXEC_ENABLE
CONFIG_SYSVIEW_EVT_TASK_STOP_EXEC_ENABLE CONFIG_APPTRACE_SV_EVT_TASK_STOP_EXEC_ENABLE
CONFIG_SYSVIEW_EVT_TASK_START_READY_ENABLE CONFIG_APPTRACE_SV_EVT_TASK_START_READY_ENABLE
CONFIG_SYSVIEW_EVT_TASK_STOP_READY_ENABLE CONFIG_APPTRACE_SV_EVT_TASK_STOP_READY_ENABLE
CONFIG_SYSVIEW_EVT_TASK_CREATE_ENABLE CONFIG_APPTRACE_SV_EVT_TASK_CREATE_ENABLE
CONFIG_SYSVIEW_EVT_TASK_TERMINATE_ENABLE CONFIG_APPTRACE_SV_EVT_TASK_TERMINATE_ENABLE
CONFIG_SYSVIEW_EVT_IDLE_ENABLE CONFIG_APPTRACE_SV_EVT_IDLE_ENABLE
CONFIG_SYSVIEW_EVT_TIMER_ENTER_ENABLE CONFIG_APPTRACE_SV_EVT_TIMER_ENTER_ENABLE
CONFIG_SYSVIEW_EVT_TIMER_EXIT_ENABLE CONFIG_APPTRACE_SV_EVT_TIMER_EXIT_ENABLE

View File

@@ -0,0 +1,118 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
----------------------------------------------------------------------
File : Global.h
Purpose : Global types
In case your application already has a Global.h, you should
merge the files. In order to use Segger code, the types
U8, U16, U32, I8, I16, I32 need to be defined in Global.h;
additional definitions do not hurt.
Revision: $Rev: 12501 $
---------------------------END-OF-HEADER------------------------------
*/
#ifndef GLOBAL_H // Guard against multiple inclusion
#define GLOBAL_H
#define U8 unsigned char
#define I8 signed char
#define U16 unsigned short
#define I16 signed short
#ifdef __x86_64__
#define U32 unsigned
#define I32 int
#else
#define U32 unsigned long
#define I32 signed long
#endif
//
// CC_NO_LONG_SUPPORT can be defined to compile test
// without long support for compilers that do not
// support C99 and its long type.
//
#ifdef CC_NO_LONG_SUPPORT
#define PTR_ADDR U32
#else // Supports long type.
#if defined(_WIN32) && !defined(__clang__) && !defined(__MINGW32__)
//
// Microsoft VC6 compiler related
//
#define U64 unsigned __int64
#define U128 unsigned __int128
#define I64 __int64
#define I128 __int128
#if _MSC_VER <= 1200
#define U64_C(x) x##UI64
#else
#define U64_C(x) x##ULL
#endif
#else
//
// C99 compliant compiler
//
#define U64 unsigned long long
#define I64 signed long long
#define U64_C(x) x##ULL
#endif
#if (defined(_WIN64) || defined(__LP64__)) // 64-bit symbols used by Visual Studio and GCC, maybe others as well.
#define PTR_ADDR U64
#else
#define PTR_ADDR U32
#endif
#endif // Supports long type.
#endif // Avoid multiple inclusion
/*************************** End of file ****************************/

View File

@@ -0,0 +1,433 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
---------------------------END-OF-HEADER------------------------------
File : SEGGER_RTT_Conf.h
Purpose : Implementation of SEGGER real-time transfer (RTT) which
allows real-time communication on targets which support
debugger memory accesses while the CPU is running.
Revision: $Rev: 24316 $
*/
#ifndef SEGGER_RTT_CONF_H
#define SEGGER_RTT_CONF_H
#ifdef __IAR_SYSTEMS_ICC__
#include <intrinsics.h>
#endif
/*********************************************************************
*
* Defines, configurable
*
**********************************************************************
*/
//
// Take in and set to correct values for Cortex-A systems with CPU cache
//
//#define SEGGER_RTT_CPU_CACHE_LINE_SIZE (32) // Largest cache line size (in bytes) in the current system
//#define SEGGER_RTT_UNCACHED_OFF (0xFB000000) // Address alias where RTT CB and buffers can be accessed uncached
//
// Most common case:
// Up-channel 0: RTT
// Up-channel 1: SystemView
//
#ifndef SEGGER_RTT_MAX_NUM_UP_BUFFERS
#define SEGGER_RTT_MAX_NUM_UP_BUFFERS (3) // Max. number of up-buffers (T->H) available on this target (Default: 3)
#endif
//
// Most common case:
// Down-channel 0: RTT
// Down-channel 1: SystemView
//
#ifndef SEGGER_RTT_MAX_NUM_DOWN_BUFFERS
#define SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (3) // Max. number of down-buffers (H->T) available on this target (Default: 3)
#endif
#ifndef BUFFER_SIZE_UP
#define BUFFER_SIZE_UP (1024) // Size of the buffer for terminal output of target, up to host (Default: 1k)
#endif
#ifndef BUFFER_SIZE_DOWN
#define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16)
#endif
#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE
#define SEGGER_RTT_PRINTF_BUFFER_SIZE (64u) // Size of buffer for RTT printf to bulk-send chars via RTT (Default: 64)
#endif
#ifndef SEGGER_RTT_MODE_DEFAULT
#define SEGGER_RTT_MODE_DEFAULT SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0)
#endif
/*********************************************************************
*
* RTT memcpy configuration
*
* memcpy() is good for large amounts of data,
* but the overhead is big for small amounts, which are usually stored via RTT.
* With SEGGER_RTT_MEMCPY_USE_BYTELOOP a simple byte loop can be used instead.
*
* SEGGER_RTT_MEMCPY() can be used to replace standard memcpy() in RTT functions.
* This is may be required with memory access restrictions,
* such as on Cortex-A devices with MMU.
*/
#ifndef SEGGER_RTT_MEMCPY_USE_BYTELOOP
#define SEGGER_RTT_MEMCPY_USE_BYTELOOP 0 // 0: Use memcpy/SEGGER_RTT_MEMCPY, 1: Use a simple byte-loop
#endif
//
// Example definition of SEGGER_RTT_MEMCPY to external memcpy with GCC toolchains and Cortex-A targets
//
//#if ((defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __GNUC__)) && (defined (__ARM_ARCH_7A__))
// #define SEGGER_RTT_MEMCPY(pDest, pSrc, NumBytes) SEGGER_memcpy((pDest), (pSrc), (NumBytes))
//#endif
//
// Target is not allowed to perform other RTT operations while string still has not been stored completely.
// Otherwise we would probably end up with a mixed string in the buffer.
// If using RTT from within interrupts, multiple tasks or multi processors, define the SEGGER_RTT_LOCK() and SEGGER_RTT_UNLOCK() function here.
//
// SEGGER_RTT_MAX_INTERRUPT_PRIORITY can be used in the sample lock routines on Cortex-M3/4.
// Make sure to mask all interrupts which can send RTT data, i.e. generate SystemView events, or cause task switches.
// When high-priority interrupts must not be masked while sending RTT data, SEGGER_RTT_MAX_INTERRUPT_PRIORITY needs to be adjusted accordingly.
// (Higher priority = lower priority number)
// Default value for embOS: 128u
// Default configuration in FreeRTOS: configMAX_SYSCALL_INTERRUPT_PRIORITY: ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
// In case of doubt mask all interrupts: 1 << (8 - BASEPRI_PRIO_BITS) i.e. 1 << 5 when 3 bits are implemented in NVIC
// or define SEGGER_RTT_LOCK() to completely disable interrupts.
//
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20) // Interrupt priority to lock on SEGGER_RTT_LOCK on Cortex-M3/4 (Default: 0x20)
#endif
/*********************************************************************
*
* RTT lock configuration for SEGGER Embedded Studio,
* Rowley CrossStudio and GCC
*/
#if ((defined(__SES_ARM) || defined(__SES_RISCV) || defined(__CROSSWORKS_ARM) || defined(__GNUC__) || defined(__clang__)) && !defined (__CC_ARM) && !defined(WIN32))
#if (defined(__ARM_ARCH_6M__) || defined(__ARM_ARCH_8M_BASE__))
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("mrs %0, primask \n\t" \
"movs r1, #1 \n\t" \
"msr primask, r1 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: \
: "r1", "cc" \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("msr primask, %0 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: \
); \
}
#elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__))
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
#endif
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("mrs %0, basepri \n\t" \
"mov r1, %1 \n\t" \
"msr basepri, r1 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: "i"(SEGGER_RTT_MAX_INTERRUPT_PRIORITY) \
: "r1", "cc" \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("msr basepri, %0 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: \
); \
}
#elif (defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__))
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("mrs r1, CPSR \n\t" \
"mov %0, r1 \n\t" \
"orr r1, r1, #0xC0 \n\t" \
"msr CPSR_c, r1 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: \
: "r1", "cc" \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \
"mrs r1, CPSR \n\t" \
"bic r1, r1, #0xC0 \n\t" \
"and r0, r0, #0xC0 \n\t" \
"orr r1, r1, r0 \n\t" \
"msr CPSR_c, r1 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: "r0", "r1", "cc" \
); \
}
#elif defined(__riscv) || defined(__riscv_xlen)
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("csrr %0, mstatus \n\t" \
"csrci mstatus, 8 \n\t" \
"andi %0, %0, 8 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: \
: \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("csrr a1, mstatus \n\t" \
"or %0, %0, a1 \n\t" \
"csrs mstatus, %0 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: "a1" \
); \
}
#else
#define SEGGER_RTT_LOCK()
#define SEGGER_RTT_UNLOCK()
#endif
#endif
/*********************************************************************
*
* RTT lock configuration for IAR EWARM
*/
#ifdef __ICCARM__
#if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) || \
(defined (__ARM8M_BASELINE__) && (__CORE__ == __ARM8M_BASELINE__))
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_PRIMASK(); \
__set_PRIMASK(1);
#define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__LockState); \
}
#elif (defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) || \
(defined (__ARM7M__) && (__CORE__ == __ARM7M__)) || \
(defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__)) || \
(defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__))
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
#endif
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_BASEPRI(); \
__set_BASEPRI(SEGGER_RTT_MAX_INTERRUPT_PRIORITY);
#define SEGGER_RTT_UNLOCK() __set_BASEPRI(_SEGGER_RTT__LockState); \
}
#elif (defined (__ARM7A__) && (__CORE__ == __ARM7A__)) || \
(defined (__ARM7R__) && (__CORE__ == __ARM7R__))
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
__asm volatile ("mrs r1, CPSR \n\t" \
"mov %0, r1 \n\t" \
"orr r1, r1, #0xC0 \n\t" \
"msr CPSR_c, r1 \n\t" \
: "=r" (_SEGGER_RTT__LockState) \
: \
: "r1", "cc" \
);
#define SEGGER_RTT_UNLOCK() __asm volatile ("mov r0, %0 \n\t" \
"mrs r1, CPSR \n\t" \
"bic r1, r1, #0xC0 \n\t" \
"and r0, r0, #0xC0 \n\t" \
"orr r1, r1, r0 \n\t" \
"msr CPSR_c, r1 \n\t" \
: \
: "r" (_SEGGER_RTT__LockState) \
: "r0", "r1", "cc" \
); \
}
#endif
#endif
/*********************************************************************
*
* RTT lock configuration for IAR RX
*/
#ifdef __ICCRX__
#define SEGGER_RTT_LOCK() { \
unsigned long _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_interrupt_state(); \
__disable_interrupt();
#define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \
}
#endif
/*********************************************************************
*
* RTT lock configuration for IAR RL78
*/
#ifdef __ICCRL78__
#define SEGGER_RTT_LOCK() { \
__istate_t _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_interrupt_state(); \
__disable_interrupt();
#define SEGGER_RTT_UNLOCK() __set_interrupt_state(_SEGGER_RTT__LockState); \
}
#endif
/*********************************************************************
*
* RTT lock configuration for KEIL ARM
*/
#ifdef __CC_ARM
#if (defined __TARGET_ARCH_6S_M)
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
register unsigned char _SEGGER_RTT__PRIMASK __asm( "primask"); \
_SEGGER_RTT__LockState = _SEGGER_RTT__PRIMASK; \
_SEGGER_RTT__PRIMASK = 1u; \
__schedule_barrier();
#define SEGGER_RTT_UNLOCK() _SEGGER_RTT__PRIMASK = _SEGGER_RTT__LockState; \
__schedule_barrier(); \
}
#elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M))
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
#endif
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
register unsigned char BASEPRI __asm( "basepri"); \
_SEGGER_RTT__LockState = BASEPRI; \
BASEPRI = SEGGER_RTT_MAX_INTERRUPT_PRIORITY; \
__schedule_barrier();
#define SEGGER_RTT_UNLOCK() BASEPRI = _SEGGER_RTT__LockState; \
__schedule_barrier(); \
}
#endif
#endif
/*********************************************************************
*
* RTT lock configuration for TI ARM
*/
#ifdef __TI_ARM__
#if defined (__TI_ARM_V6M0__)
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = __get_PRIMASK(); \
__set_PRIMASK(1);
#define SEGGER_RTT_UNLOCK() __set_PRIMASK(_SEGGER_RTT__LockState); \
}
#elif (defined (__TI_ARM_V7M3__) || defined (__TI_ARM_V7M4__))
#ifndef SEGGER_RTT_MAX_INTERRUPT_PRIORITY
#define SEGGER_RTT_MAX_INTERRUPT_PRIORITY (0x20)
#endif
#define SEGGER_RTT_LOCK() { \
unsigned int _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = _set_interrupt_priority(SEGGER_RTT_MAX_INTERRUPT_PRIORITY);
#define SEGGER_RTT_UNLOCK() _set_interrupt_priority(_SEGGER_RTT__LockState); \
}
#endif
#endif
/*********************************************************************
*
* RTT lock configuration for CCRX
*/
#ifdef __RX
#include <machine.h>
#define SEGGER_RTT_LOCK() { \
unsigned long _SEGGER_RTT__LockState; \
_SEGGER_RTT__LockState = get_psw() & 0x010000; \
clrpsw_i();
#define SEGGER_RTT_UNLOCK() set_psw(get_psw() | _SEGGER_RTT__LockState); \
}
#endif
/*********************************************************************
*
* RTT lock configuration for embOS Simulation on Windows
* (Can also be used for generic RTT locking with embOS)
*/
#if defined(WIN32) || defined(SEGGER_RTT_LOCK_EMBOS)
void OS_SIM_EnterCriticalSection(void);
void OS_SIM_LeaveCriticalSection(void);
#define SEGGER_RTT_LOCK() { \
OS_SIM_EnterCriticalSection();
#define SEGGER_RTT_UNLOCK() OS_SIM_LeaveCriticalSection(); \
}
#endif
/*********************************************************************
*
* RTT lock configuration fallback
*/
#ifndef SEGGER_RTT_LOCK
#define SEGGER_RTT_LOCK() // Lock RTT (nestable) (i.e. disable interrupts)
#endif
#ifndef SEGGER_RTT_UNLOCK
#define SEGGER_RTT_UNLOCK() // Unlock RTT (nestable) (i.e. enable previous interrupt lock state)
#endif
#endif
/*************************** End of file ****************************/

View File

@@ -0,0 +1,90 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
-------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW_Conf.h
Purpose : SEGGER SystemView configuration file.
Set defines which deviate from the defaults (see SEGGER_SYSVIEW_ConfDefaults.h) here.
Revision: $Rev: 21292 $
Additional information:
Required defines which must be set are:
SEGGER_SYSVIEW_GET_TIMESTAMP
SEGGER_SYSVIEW_GET_INTERRUPT_ID
For known compilers and cores, these might be set to good defaults
in SEGGER_SYSVIEW_ConfDefaults.h.
SystemView needs a (nestable) locking mechanism.
If not defined, the RTT locking mechanism is used,
which then needs to be properly configured.
*/
#ifndef SEGGER_SYSVIEW_CONF_H
#define SEGGER_SYSVIEW_CONF_H
/*********************************************************************
*
* Defines, configurable
*
**********************************************************************
*/
/*********************************************************************
* TODO: Add your defines here. *
**********************************************************************
*/
#endif // SEGGER_SYSVIEW_CONF_H
/*************************** End of file ****************************/

View File

@@ -0,0 +1,255 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*
* SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
----------------------------------------------------------------------
File : SEGGER.h
Purpose : Global types etc & general purpose utility functions
Revision: $Rev: 18102 $
---------------------------END-OF-HEADER------------------------------
*/
#ifndef SEGGER_H // Guard against multiple inclusion
#define SEGGER_H
#include <stdarg.h> // For va_list.
#include "Global.h" // Type definitions: U8, U16, U32, I8, I16, I32
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* Keywords/specifiers
*
**********************************************************************
*/
#ifndef INLINE
#if (defined(__ICCARM__) || defined(__RX) || defined(__ICCRX__))
//
// Other known compilers.
//
#define INLINE inline
#else
#if (defined(_WIN32) && !defined(__clang__))
//
// Microsoft VC6 and newer.
// Force inlining without cost checking.
//
#define INLINE __forceinline
#elif defined(__GNUC__) || defined(__clang__)
//
// Force inlining with GCC + clang
//
#define INLINE inline __attribute__((always_inline))
#elif (defined(__CC_ARM))
//
// Force inlining with ARMCC (Keil)
//
#define INLINE __inline
#else
//
// Unknown compilers.
//
#define INLINE
#endif
#endif
#endif
/*********************************************************************
*
* Function-like macros
*
**********************************************************************
*/
#define SEGGER_COUNTOF(a) (sizeof((a))/sizeof((a)[0]))
#define SEGGER_MIN(a,b) (((a) < (b)) ? (a) : (b))
#define SEGGER_MAX(a,b) (((a) > (b)) ? (a) : (b))
#ifndef SEGGER_USE_PARA // Some compiler complain about unused parameters.
#define SEGGER_USE_PARA(Para) (void)Para // This works for most compilers.
#endif
#define SEGGER_ADDR2PTR(Type, Addr) (/*lint -e(923) -e(9078)*/((Type*)((PTR_ADDR)(Addr)))) // Allow cast from address to pointer.
#define SEGGER_PTR2ADDR(p) (/*lint -e(923) -e(9078)*/((PTR_ADDR)(p))) // Allow cast from pointer to address.
#define SEGGER_PTR2PTR(Type, p) (/*lint -e(740) -e(826) -e(9079) -e(9087)*/((Type*)(p))) // Allow cast from one pointer type to another (ignore different size).
#define SEGGER_PTR_DISTANCE(p0, p1) (SEGGER_PTR2ADDR(p0) - SEGGER_PTR2ADDR(p1))
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define SEGGER_PRINTF_FLAG_ADJLEFT (1 << 0)
#define SEGGER_PRINTF_FLAG_SIGNFORCE (1 << 1)
#define SEGGER_PRINTF_FLAG_SIGNSPACE (1 << 2)
#define SEGGER_PRINTF_FLAG_PRECEED (1 << 3)
#define SEGGER_PRINTF_FLAG_ZEROPAD (1 << 4)
#define SEGGER_PRINTF_FLAG_NEGATIVE (1 << 5)
/*********************************************************************
*
* Types
*
**********************************************************************
*/
typedef struct {
char* pBuffer;
int BufferSize;
int Cnt;
} SEGGER_BUFFER_DESC;
typedef struct {
unsigned int CacheLineSize; // 0: No Cache. Most Systems such as ARM9 use a 32 bytes cache line size.
void (*pfDMB) (void); // Optional DMB function for Data Memory Barrier to make sure all memory operations are completed.
void (*pfClean) (void *p, unsigned long NumBytes); // Optional clean function for cached memory.
void (*pfInvalidate)(void *p, unsigned long NumBytes); // Optional invalidate function for cached memory.
} SEGGER_CACHE_CONFIG;
typedef struct SEGGER_SNPRINTF_CONTEXT_struct SEGGER_SNPRINTF_CONTEXT;
struct SEGGER_SNPRINTF_CONTEXT_struct {
void* pContext; // Application specific context.
SEGGER_BUFFER_DESC* pBufferDesc; // Buffer descriptor to use for output.
void (*pfFlush)(SEGGER_SNPRINTF_CONTEXT* pContext); // Callback executed once the buffer is full. Callback decides if the buffer gets cleared to store more or not.
};
typedef struct {
void (*pfStoreChar) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, char c);
int (*pfPrintUnsigned) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, U32 v, unsigned Base, char Flags, int Width, int Precision);
int (*pfPrintInt) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, I32 v, unsigned Base, char Flags, int Width, int Precision);
} SEGGER_PRINTF_API;
typedef void (*SEGGER_pFormatter)(SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, const SEGGER_PRINTF_API* pApi, va_list* pParamList, char Lead, int Width, int Precision);
typedef struct SEGGER_PRINTF_FORMATTER {
struct SEGGER_PRINTF_FORMATTER* pNext; // Pointer to next formatter.
SEGGER_pFormatter pfFormatter; // Formatter function.
char Specifier; // Format specifier.
} SEGGER_PRINTF_FORMATTER;
typedef struct {
U32 (*pfGetHPTimestamp)(void); // Mandatory, pfGetHPTimestamp
int (*pfGetUID) (U8 abUID[16]); // Optional, pfGetUID
} SEGGER_BSP_API;
/*********************************************************************
*
* Utility functions
*
**********************************************************************
*/
//
// Memory operations.
//
void SEGGER_ARM_memcpy(void* pDest, const void* pSrc, int NumBytes);
void SEGGER_memcpy (void* pDest, const void* pSrc, unsigned NumBytes);
void SEGGER_memxor (void* pDest, const void* pSrc, unsigned NumBytes);
//
// String functions.
//
int SEGGER_atoi (const char* s);
int SEGGER_isalnum (int c);
int SEGGER_isalpha (int c);
unsigned SEGGER_strlen (const char* s);
int SEGGER_tolower (int c);
int SEGGER_strcasecmp (const char* sText1, const char* sText2);
int SEGGER_strncasecmp(const char *sText1, const char *sText2, unsigned Count);
//
// Buffer/printf related.
//
void SEGGER_StoreChar (SEGGER_BUFFER_DESC* pBufferDesc, char c);
void SEGGER_PrintUnsigned(SEGGER_BUFFER_DESC* pBufferDesc, U32 v, unsigned Base, int Precision);
void SEGGER_PrintInt (SEGGER_BUFFER_DESC* pBufferDesc, I32 v, unsigned Base, int Precision);
int SEGGER_snprintf (char* pBuffer, int BufferSize, const char* sFormat, ...);
int SEGGER_vsnprintf (char* pBuffer, int BufferSize, const char* sFormat, va_list ParamList);
int SEGGER_vsnprintfEx (SEGGER_SNPRINTF_CONTEXT* pContext, const char* sFormat, va_list ParamList);
int SEGGER_PRINTF_AddFormatter (SEGGER_PRINTF_FORMATTER* pFormatter, SEGGER_pFormatter pfFormatter, char c);
void SEGGER_PRINTF_AddDoubleFormatter (void);
void SEGGER_PRINTF_AddIPFormatter (void);
void SEGGER_PRINTF_AddBLUEFormatter (void);
void SEGGER_PRINTF_AddCONNECTFormatter(void);
void SEGGER_PRINTF_AddSSLFormatter (void);
void SEGGER_PRINTF_AddSSHFormatter (void);
void SEGGER_PRINTF_AddHTMLFormatter (void);
//
// BSP abstraction API.
//
int SEGGER_BSP_GetUID (U8 abUID[16]);
int SEGGER_BSP_GetUID32(U32* pUID);
void SEGGER_BSP_SetAPI (const SEGGER_BSP_API* pAPI);
void SEGGER_BSP_SeedUID (void);
//
// Other API.
//
void SEGGER_VERSION_GetString(char acText[8], unsigned Version);
#if defined(__cplusplus)
} /* Make sure we have C-declarations in C++ programs */
#endif
#endif // Avoid multiple inclusion
/*************************** End of file ****************************/

View File

@@ -0,0 +1,502 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
---------------------------END-OF-HEADER------------------------------
File : SEGGER_RTT.h
Purpose : Implementation of SEGGER real-time transfer which allows
real-time communication on targets which support debugger
memory accesses while the CPU is running.
Revision: $Rev: 25842 $
----------------------------------------------------------------------
*/
#ifndef SEGGER_RTT_H
#define SEGGER_RTT_H
#include "../Config/SEGGER_RTT_Conf.h"
/*********************************************************************
*
* Defines, defaults
*
**********************************************************************
*/
#ifndef RTT_USE_ASM
//
// Some cores support out-of-order memory accesses (reordering of memory accesses in the core)
// For such cores, we need to define a memory barrier to guarantee the order of certain accesses to the RTT ring buffers.
// Needed for:
// Cortex-M7 (ARMv7-M)
// Cortex-M23 (ARM-v8M)
// Cortex-M33 (ARM-v8M)
// Cortex-A/R (ARM-v7A/R)
//
// We do not explicitly check for "Embedded Studio" as the compiler in use determines what we support.
// You can use an external toolchain like IAR inside ES. So there is no point in checking for "Embedded Studio"
//
#if (defined __CROSSWORKS_ARM) // Rowley Crossworks
#define _CC_HAS_RTT_ASM_SUPPORT 1
#if (defined __ARM_ARCH_7M__) // Cortex-M3
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23
#define _CORE_HAS_RTT_ASM_SUPPORT 0
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#else
#define _CORE_HAS_RTT_ASM_SUPPORT 0
#endif
#elif (defined __ARMCC_VERSION)
//
// ARM compiler
// ARM compiler V6.0 and later is clang based.
// Our ASM part is compatible to clang.
//
#if (__ARMCC_VERSION >= 6000000)
#define _CC_HAS_RTT_ASM_SUPPORT 1
#else
#define _CC_HAS_RTT_ASM_SUPPORT 0
#endif
#if (defined __ARM_ARCH_6M__) // Cortex-M0 / M1
#define _CORE_HAS_RTT_ASM_SUPPORT 0 // No ASM support for this architecture
#elif (defined __ARM_ARCH_7M__) // Cortex-M3
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23
#define _CORE_HAS_RTT_ASM_SUPPORT 0
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#else
#define _CORE_HAS_RTT_ASM_SUPPORT 0
#endif
#elif ((defined __GNUC__) || (defined __clang__))
//
// GCC / Clang
//
#define _CC_HAS_RTT_ASM_SUPPORT 1
// ARM 7/9: __ARM_ARCH_5__ / __ARM_ARCH_5E__ / __ARM_ARCH_5T__ / __ARM_ARCH_5T__ / __ARM_ARCH_5TE__
#if (defined __ARM_ARCH_7M__) // Cortex-M3
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#elif (defined __ARM_ARCH_7EM__) // Cortex-M4/M7
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1 // Only Cortex-M7 needs a DMB but we cannot distinguish M4 and M7 here...
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif (defined __ARM_ARCH_8M_BASE__) // Cortex-M23
#define _CORE_HAS_RTT_ASM_SUPPORT 0
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif (defined __ARM_ARCH_8M_MAIN__) // Cortex-M33
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#elif ((defined __ARM_ARCH_7A__) || (defined __ARM_ARCH_7R__)) // Cortex-A/R 32-bit ARMv7-A/R
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() __asm volatile ("dmb\n" : : :);
#else
#define _CORE_HAS_RTT_ASM_SUPPORT 0
#endif
#elif ((defined __IASMARM__) || (defined __ICCARM__))
//
// IAR assembler/compiler
//
#define _CC_HAS_RTT_ASM_SUPPORT 1
#if (__VER__ < 6300000)
#define VOLATILE
#else
#define VOLATILE volatile
#endif
#if (defined __ARM7M__) // Needed for old versions that do not know the define yet
#if (__CORE__ == __ARM7M__) // Cortex-M3
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#endif
#endif
#if (defined __ARM7EM__)
#if (__CORE__ == __ARM7EM__) // Cortex-M4/M7
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() asm VOLATILE ("DMB");
#endif
#endif
#if (defined __ARM8M_BASELINE__)
#if (__CORE__ == __ARM8M_BASELINE__) // Cortex-M23
#define _CORE_HAS_RTT_ASM_SUPPORT 0
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() asm VOLATILE ("DMB");
#endif
#endif
#if (defined __ARM8M_MAINLINE__)
#if (__CORE__ == __ARM8M_MAINLINE__) // Cortex-M33
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() asm VOLATILE ("DMB");
#endif
#endif
#if (defined __ARM8EM_MAINLINE__)
#if (__CORE__ == __ARM8EM_MAINLINE__) // Cortex-???
#define _CORE_HAS_RTT_ASM_SUPPORT 1
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() asm VOLATILE ("DMB");
#endif
#endif
#if (defined __ARM7A__)
#if (__CORE__ == __ARM7A__) // Cortex-A 32-bit ARMv7-A
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() asm VOLATILE ("DMB");
#endif
#endif
#if (defined __ARM7R__)
#if (__CORE__ == __ARM7R__) // Cortex-R 32-bit ARMv7-R
#define _CORE_NEEDS_DMB 1
#define RTT__DMB() asm VOLATILE ("DMB");
#endif
#endif
// TBD: __ARM8A__ => Cortex-A 64-bit ARMv8-A
// TBD: __ARM8R__ => Cortex-R 64-bit ARMv8-R
#else
//
// Other compilers
//
#define _CC_HAS_RTT_ASM_SUPPORT 0
#define _CORE_HAS_RTT_ASM_SUPPORT 0
#endif
//
// If IDE and core support the ASM version, enable ASM version by default
//
#ifndef _CORE_HAS_RTT_ASM_SUPPORT
#define _CORE_HAS_RTT_ASM_SUPPORT 0 // Default for unknown cores
#endif
#if (_CC_HAS_RTT_ASM_SUPPORT && _CORE_HAS_RTT_ASM_SUPPORT)
#define RTT_USE_ASM (1)
#else
#define RTT_USE_ASM (0)
#endif
#endif
#ifndef _CORE_NEEDS_DMB
#define _CORE_NEEDS_DMB 0
#endif
#ifndef RTT__DMB
#if _CORE_NEEDS_DMB
#error "Don't know how to place inline assembly for DMB"
#else
#define RTT__DMB()
#endif
#endif
#ifndef SEGGER_RTT_CPU_CACHE_LINE_SIZE
#define SEGGER_RTT_CPU_CACHE_LINE_SIZE (0) // On most target systems where RTT is used, we do not have a CPU cache, therefore 0 is a good default here
#endif
#ifndef SEGGER_RTT_UNCACHED_OFF
#if SEGGER_RTT_CPU_CACHE_LINE_SIZE
#error "SEGGER_RTT_UNCACHED_OFF must be defined when setting SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
#else
#define SEGGER_RTT_UNCACHED_OFF (0)
#endif
#endif
#if RTT_USE_ASM
#if SEGGER_RTT_CPU_CACHE_LINE_SIZE
#error "RTT_USE_ASM is not available if SEGGER_RTT_CPU_CACHE_LINE_SIZE != 0"
#endif
#endif
#ifndef SEGGER_RTT_ASM // defined when SEGGER_RTT.h is included from assembly file
#include <stdlib.h>
#include <stdarg.h>
/*********************************************************************
*
* Defines, fixed
*
**********************************************************************
*/
//
// Determine how much we must pad the control block to make it a multiple of a cache line in size
// Assuming: U8 = 1B
// U16 = 2B
// U32 = 4B
// U8/U16/U32* = 4B
//
#if SEGGER_RTT_CPU_CACHE_LINE_SIZE // Avoid division by zero in case we do not have any cache
#define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (((NumBytes + SEGGER_RTT_CPU_CACHE_LINE_SIZE - 1) / SEGGER_RTT_CPU_CACHE_LINE_SIZE) * SEGGER_RTT_CPU_CACHE_LINE_SIZE)
#else
#define SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(NumBytes) (NumBytes)
#endif
#define SEGGER_RTT__CB_SIZE (16 + 4 + 4 + (SEGGER_RTT_MAX_NUM_UP_BUFFERS * 24) + (SEGGER_RTT_MAX_NUM_DOWN_BUFFERS * 24))
#define SEGGER_RTT__CB_PADDING (SEGGER_RTT__ROUND_UP_2_CACHE_LINE_SIZE(SEGGER_RTT__CB_SIZE) - SEGGER_RTT__CB_SIZE)
/*********************************************************************
*
* Types
*
**********************************************************************
*/
//
// Description for a circular buffer (also called "ring buffer")
// which is used as up-buffer (T->H)
//
typedef struct {
const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4"
char* pBuffer; // Pointer to start of buffer
unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty.
unsigned WrOff; // Position of next item to be written by either target.
volatile unsigned RdOff; // Position of next item to be read by host. Must be volatile since it may be modified by host.
unsigned Flags; // Contains configuration flags. Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
} SEGGER_RTT_BUFFER_UP;
//
// Description for a circular buffer (also called "ring buffer")
// which is used as down-buffer (H->T)
//
typedef struct {
const char* sName; // Optional name. Standard names so far are: "Terminal", "SysView", "J-Scope_t4i4"
char* pBuffer; // Pointer to start of buffer
unsigned SizeOfBuffer; // Buffer size in bytes. Note that one byte is lost, as this implementation does not fill up the buffer in order to avoid the problem of being unable to distinguish between full and empty.
volatile unsigned WrOff; // Position of next item to be written by host. Must be volatile since it may be modified by host.
unsigned RdOff; // Position of next item to be read by target (down-buffer).
unsigned Flags; // Contains configuration flags. Flags[31:24] are used for validity check and must be zero. Flags[23:2] are reserved for future use. Flags[1:0] = RTT operating mode.
} SEGGER_RTT_BUFFER_DOWN;
//
// RTT control block which describes the number of buffers available
// as well as the configuration for each buffer
//
//
typedef struct {
char acID[16]; // Initialized to "SEGGER RTT"
int MaxNumUpBuffers; // Initialized to SEGGER_RTT_MAX_NUM_UP_BUFFERS (type. 2)
int MaxNumDownBuffers; // Initialized to SEGGER_RTT_MAX_NUM_DOWN_BUFFERS (type. 2)
SEGGER_RTT_BUFFER_UP aUp[SEGGER_RTT_MAX_NUM_UP_BUFFERS]; // Up buffers, transferring information up from target via debug probe to host
SEGGER_RTT_BUFFER_DOWN aDown[SEGGER_RTT_MAX_NUM_DOWN_BUFFERS]; // Down buffers, transferring information down from host via debug probe to target
#if SEGGER_RTT__CB_PADDING
unsigned char aDummy[SEGGER_RTT__CB_PADDING];
#endif
} SEGGER_RTT_CB;
/*********************************************************************
*
* Global data
*
**********************************************************************
*/
extern SEGGER_RTT_CB _SEGGER_RTT;
/*********************************************************************
*
* RTT API functions
*
**********************************************************************
*/
#ifdef __cplusplus
extern "C" {
#endif
int SEGGER_RTT_AllocDownBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
int SEGGER_RTT_AllocUpBuffer (const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
int SEGGER_RTT_ConfigUpBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
int SEGGER_RTT_ConfigDownBuffer (unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags);
int SEGGER_RTT_GetKey (void);
unsigned SEGGER_RTT_HasData (unsigned BufferIndex);
int SEGGER_RTT_HasKey (void);
unsigned SEGGER_RTT_HasDataUp (unsigned BufferIndex);
void SEGGER_RTT_Init (void);
unsigned SEGGER_RTT_Read (unsigned BufferIndex, void* pBuffer, unsigned BufferSize);
unsigned SEGGER_RTT_ReadNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize);
int SEGGER_RTT_SetNameDownBuffer (unsigned BufferIndex, const char* sName);
int SEGGER_RTT_SetNameUpBuffer (unsigned BufferIndex, const char* sName);
int SEGGER_RTT_SetFlagsDownBuffer (unsigned BufferIndex, unsigned Flags);
int SEGGER_RTT_SetFlagsUpBuffer (unsigned BufferIndex, unsigned Flags);
int SEGGER_RTT_WaitKey (void);
unsigned SEGGER_RTT_Write (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
unsigned SEGGER_RTT_WriteNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
unsigned SEGGER_RTT_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
unsigned SEGGER_RTT_ASM_WriteSkipNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
unsigned SEGGER_RTT_WriteString (unsigned BufferIndex, const char* s);
void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
unsigned SEGGER_RTT_PutChar (unsigned BufferIndex, char c);
unsigned SEGGER_RTT_PutCharSkip (unsigned BufferIndex, char c);
unsigned SEGGER_RTT_PutCharSkipNoLock (unsigned BufferIndex, char c);
unsigned SEGGER_RTT_GetAvailWriteSpace (unsigned BufferIndex);
unsigned SEGGER_RTT_GetBytesInBuffer (unsigned BufferIndex);
void SEGGER_RTT_ESP_FlushNoLock (unsigned long min_sz, unsigned long tmo);
void SEGGER_RTT_ESP_Flush (unsigned long min_sz, unsigned long tmo);
//
// Function macro for performance optimization
//
// @AGv: This macro is used inside SEGGER SystemView code.
// For ESP32 we use our own implementation of RTT, so this macro should not check SEGGER's RTT buffer state.
#define SEGGER_RTT_HASDATA(n) (1)
#if RTT_USE_ASM
#define SEGGER_RTT_WriteSkipNoLock SEGGER_RTT_ASM_WriteSkipNoLock
#endif
/*********************************************************************
*
* RTT transfer functions to send RTT data via other channels.
*
**********************************************************************
*/
unsigned SEGGER_RTT_ReadUpBuffer (unsigned BufferIndex, void* pBuffer, unsigned BufferSize);
unsigned SEGGER_RTT_ReadUpBufferNoLock (unsigned BufferIndex, void* pData, unsigned BufferSize);
unsigned SEGGER_RTT_WriteDownBuffer (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
unsigned SEGGER_RTT_WriteDownBufferNoLock (unsigned BufferIndex, const void* pBuffer, unsigned NumBytes);
#define SEGGER_RTT_HASDATA_UP(n) (((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->WrOff - ((SEGGER_RTT_BUFFER_UP*)((char*)&_SEGGER_RTT.aUp[n] + SEGGER_RTT_UNCACHED_OFF))->RdOff) // Access uncached to make sure we see changes made by the J-Link side and all of our changes go into HW directly
/*********************************************************************
*
* RTT "Terminal" API functions
*
**********************************************************************
*/
int SEGGER_RTT_SetTerminal (unsigned char TerminalId);
int SEGGER_RTT_TerminalOut (unsigned char TerminalId, const char* s);
/*********************************************************************
*
* RTT printf functions (require SEGGER_RTT_printf.c)
*
**********************************************************************
*/
int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...);
int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList);
#ifdef __cplusplus
}
#endif
#endif // ifndef(SEGGER_RTT_ASM)
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
//
// Operating modes. Define behavior if buffer is full (not enough space for entire message)
//
#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // Skip. Do not block, output nothing. (Default)
#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // Trim: Do not block, output as much as fits.
#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // Block: Wait until there is space in the buffer.
#define SEGGER_RTT_MODE_MASK (3)
//
// Control sequences, based on ANSI.
// Can be used to control color, and clear the screen
//
#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors
#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left
#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m"
#define RTT_CTRL_TEXT_RED "\x1B[2;31m"
#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m"
#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m"
#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m"
#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m"
#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m"
#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m"
#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m"
#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m"
#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m"
#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m"
#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m"
#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m"
#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m"
#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m"
#define RTT_CTRL_BG_BLACK "\x1B[24;40m"
#define RTT_CTRL_BG_RED "\x1B[24;41m"
#define RTT_CTRL_BG_GREEN "\x1B[24;42m"
#define RTT_CTRL_BG_YELLOW "\x1B[24;43m"
#define RTT_CTRL_BG_BLUE "\x1B[24;44m"
#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m"
#define RTT_CTRL_BG_CYAN "\x1B[24;46m"
#define RTT_CTRL_BG_WHITE "\x1B[24;47m"
#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m"
#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m"
#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m"
#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m"
#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m"
#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m"
#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m"
#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m"
#endif
/*************************** End of file ****************************/

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,388 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*
* SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
-------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW.h
Purpose : System visualization API.
Revision: $Rev: 28237 $
*/
#ifndef SEGGER_SYSVIEW_H
#define SEGGER_SYSVIEW_H
/*********************************************************************
*
* #include Section
*
**********************************************************************
*/
#include "SEGGER.h"
#include "SEGGER_SYSVIEW_ConfDefaults.h"
#ifdef __cplusplus
extern "C" {
#endif
/*********************************************************************
*
* Defines, fixed
*
**********************************************************************
*/
#define SEGGER_SYSVIEW_MAJOR 3
#define SEGGER_SYSVIEW_MINOR 32
#define SEGGER_SYSVIEW_REV 0
#define SEGGER_SYSVIEW_VERSION ((SEGGER_SYSVIEW_MAJOR * 10000) + (SEGGER_SYSVIEW_MINOR * 100) + SEGGER_SYSVIEW_REV)
#define SEGGER_SYSVIEW_INFO_SIZE 9 // Minimum size, which has to be reserved for a packet. 1-2 byte of message type, 0-2 byte of payload length, 1-5 bytes of timestamp.
#define SEGGER_SYSVIEW_QUANTA_U32 5 // Maximum number of bytes to encode a U32, should be reserved for each 32-bit value in a packet.
#define SEGGER_SYSVIEW_LOG (0u)
#define SEGGER_SYSVIEW_WARNING (1u)
#define SEGGER_SYSVIEW_ERROR (2u)
#define SEGGER_SYSVIEW_FLAG_APPEND (1u << 6)
#define SEGGER_SYSVIEW_PREPARE_PACKET(p) (p) + 4
//
// SystemView events. First 32 IDs from 0 .. 31 are reserved for these
//
#define SYSVIEW_EVTID_NOP 0 // Dummy packet.
#define SYSVIEW_EVTID_OVERFLOW 1
#define SYSVIEW_EVTID_ISR_ENTER 2
#define SYSVIEW_EVTID_ISR_EXIT 3
#define SYSVIEW_EVTID_TASK_START_EXEC 4
#define SYSVIEW_EVTID_TASK_STOP_EXEC 5
#define SYSVIEW_EVTID_TASK_START_READY 6
#define SYSVIEW_EVTID_TASK_STOP_READY 7
#define SYSVIEW_EVTID_TASK_CREATE 8
#define SYSVIEW_EVTID_TASK_INFO 9
#define SYSVIEW_EVTID_TRACE_START 10
#define SYSVIEW_EVTID_TRACE_STOP 11
#define SYSVIEW_EVTID_SYSTIME_CYCLES 12
#define SYSVIEW_EVTID_SYSTIME_US 13
#define SYSVIEW_EVTID_SYSDESC 14
#define SYSVIEW_EVTID_MARK_START 15
#define SYSVIEW_EVTID_MARK_STOP 16
#define SYSVIEW_EVTID_IDLE 17
#define SYSVIEW_EVTID_ISR_TO_SCHEDULER 18
#define SYSVIEW_EVTID_TIMER_ENTER 19
#define SYSVIEW_EVTID_TIMER_EXIT 20
#define SYSVIEW_EVTID_STACK_INFO 21
#define SYSVIEW_EVTID_MODULEDESC 22
#define SYSVIEW_EVTID_INIT 24
#define SYSVIEW_EVTID_NAME_RESOURCE 25
#define SYSVIEW_EVTID_PRINT_FORMATTED 26
#define SYSVIEW_EVTID_NUMMODULES 27
#define SYSVIEW_EVTID_END_CALL 28
#define SYSVIEW_EVTID_TASK_TERMINATE 29
#define SYSVIEW_EVTID_EX 31
//
// SystemView extended events. Sent with ID 31.
//
#define SYSVIEW_EVTID_EX_MARK 0
#define SYSVIEW_EVTID_EX_NAME_MARKER 1
#define SYSVIEW_EVTID_EX_HEAP_DEFINE 2
#define SYSVIEW_EVTID_EX_HEAP_ALLOC 3
#define SYSVIEW_EVTID_EX_HEAP_ALLOC_EX 4
#define SYSVIEW_EVTID_EX_HEAP_FREE 5
//
// Event masks to disable/enable events
//
#define SYSVIEW_EVTMASK_NOP (1 << SYSVIEW_EVTID_NOP)
#define SYSVIEW_EVTMASK_OVERFLOW (1 << SYSVIEW_EVTID_OVERFLOW)
#define SYSVIEW_EVTMASK_ISR_ENTER (1 << SYSVIEW_EVTID_ISR_ENTER)
#define SYSVIEW_EVTMASK_ISR_EXIT (1 << SYSVIEW_EVTID_ISR_EXIT)
#define SYSVIEW_EVTMASK_TASK_START_EXEC (1 << SYSVIEW_EVTID_TASK_START_EXEC)
#define SYSVIEW_EVTMASK_TASK_STOP_EXEC (1 << SYSVIEW_EVTID_TASK_STOP_EXEC)
#define SYSVIEW_EVTMASK_TASK_START_READY (1 << SYSVIEW_EVTID_TASK_START_READY)
#define SYSVIEW_EVTMASK_TASK_STOP_READY (1 << SYSVIEW_EVTID_TASK_STOP_READY)
#define SYSVIEW_EVTMASK_TASK_CREATE (1 << SYSVIEW_EVTID_TASK_CREATE)
#define SYSVIEW_EVTMASK_TASK_INFO (1 << SYSVIEW_EVTID_TASK_INFO)
#define SYSVIEW_EVTMASK_TRACE_START (1 << SYSVIEW_EVTID_TRACE_START)
#define SYSVIEW_EVTMASK_TRACE_STOP (1 << SYSVIEW_EVTID_TRACE_STOP)
#define SYSVIEW_EVTMASK_SYSTIME_CYCLES (1 << SYSVIEW_EVTID_SYSTIME_CYCLES)
#define SYSVIEW_EVTMASK_SYSTIME_US (1 << SYSVIEW_EVTID_SYSTIME_US)
#define SYSVIEW_EVTMASK_SYSDESC (1 << SYSVIEW_EVTID_SYSDESC)
#define SYSVIEW_EVTMASK_USER_START (1 << SYSVIEW_EVTID_USER_START)
#define SYSVIEW_EVTMASK_USER_STOP (1 << SYSVIEW_EVTID_USER_STOP)
#define SYSVIEW_EVTMASK_IDLE (1 << SYSVIEW_EVTID_IDLE)
#define SYSVIEW_EVTMASK_ISR_TO_SCHEDULER (1 << SYSVIEW_EVTID_ISR_TO_SCHEDULER)
#define SYSVIEW_EVTMASK_TIMER_ENTER (1 << SYSVIEW_EVTID_TIMER_ENTER)
#define SYSVIEW_EVTMASK_TIMER_EXIT (1 << SYSVIEW_EVTID_TIMER_EXIT)
#define SYSVIEW_EVTMASK_STACK_INFO (1 << SYSVIEW_EVTID_STACK_INFO)
#define SYSVIEW_EVTMASK_MODULEDESC (1 << SYSVIEW_EVTID_MODULEDESC)
#define SYSVIEW_EVTMASK_INIT (1 << SYSVIEW_EVTID_INIT)
#define SYSVIEW_EVTMASK_NAME_RESOURCE (1 << SYSVIEW_EVTID_NAME_RESOURCE)
#define SYSVIEW_EVTMASK_PRINT_FORMATTED (1 << SYSVIEW_EVTID_PRINT_FORMATTED)
#define SYSVIEW_EVTMASK_NUMMODULES (1 << SYSVIEW_EVTID_NUMMODULES)
#define SYSVIEW_EVTMASK_END_CALL (1 << SYSVIEW_EVTID_END_CALL)
#define SYSVIEW_EVTMASK_TASK_TERMINATE (1 << SYSVIEW_EVTID_TASK_TERMINATE)
#define SYSVIEW_EVTMASK_EX (1 << SYSVIEW_EVTID_EX)
#define SYSVIEW_EVTMASK_ALL_INTERRUPTS ( SYSVIEW_EVTMASK_ISR_ENTER \
| SYSVIEW_EVTMASK_ISR_EXIT \
| SYSVIEW_EVTMASK_ISR_TO_SCHEDULER)
#define SYSVIEW_EVTMASK_ALL_TASKS ( SYSVIEW_EVTMASK_TASK_START_EXEC \
| SYSVIEW_EVTMASK_TASK_STOP_EXEC \
| SYSVIEW_EVTMASK_TASK_START_READY \
| SYSVIEW_EVTMASK_TASK_STOP_READY \
| SYSVIEW_EVTMASK_TASK_CREATE \
| SYSVIEW_EVTMASK_TASK_INFO \
| SYSVIEW_EVTMASK_STACK_INFO \
| SYSVIEW_EVTMASK_TASK_TERMINATE)
/*********************************************************************
*
* Structures
*
**********************************************************************
*/
typedef struct {
U32 TaskID;
const char* sName;
U32 Prio;
U32 StackBase;
U32 StackSize;
} SEGGER_SYSVIEW_TASKINFO;
typedef struct SEGGER_SYSVIEW_MODULE_STRUCT SEGGER_SYSVIEW_MODULE;
struct SEGGER_SYSVIEW_MODULE_STRUCT {
const char* sModule;
U32 NumEvents;
U32 EventOffset;
void (*pfSendModuleDesc)(void);
SEGGER_SYSVIEW_MODULE* pNext;
};
typedef void (SEGGER_SYSVIEW_SEND_SYS_DESC_FUNC)(void);
/*********************************************************************
*
* Global data
*
**********************************************************************
*/
#ifdef EXTERN
#undef EXTERN
#endif
#ifndef SEGGER_SYSVIEW_C // Defined in SEGGER_SYSVIEW.c which includes this header beside other C-files
#define EXTERN extern
#else
#define EXTERN
#endif
EXTERN unsigned int SEGGER_SYSVIEW_TickCnt;
EXTERN unsigned int SEGGER_SYSVIEW_InterruptId;
#undef EXTERN
/*********************************************************************
*
* API functions
*
**********************************************************************
*/
typedef struct {
U64 (*pfGetTime) (void);
void (*pfSendTaskList) (void);
} SEGGER_SYSVIEW_OS_API;
/*********************************************************************
*
* Control and initialization functions
*/
void SEGGER_SYSVIEW_Init (U32 SysFreq, U32 CPUFreq, const SEGGER_SYSVIEW_OS_API *pOSAPI, SEGGER_SYSVIEW_SEND_SYS_DESC_FUNC pfSendSysDesc);
void SEGGER_SYSVIEW_SetRAMBase (U32 RAMBaseAddress);
void SEGGER_SYSVIEW_Start (void);
void SEGGER_SYSVIEW_Stop (void);
void SEGGER_SYSVIEW_GetSysDesc (void);
void SEGGER_SYSVIEW_SendTaskList (void);
void SEGGER_SYSVIEW_SendTaskInfo (const SEGGER_SYSVIEW_TASKINFO* pInfo);
void SEGGER_SYSVIEW_SendSysDesc (const char* sSysDesc);
int SEGGER_SYSVIEW_IsStarted (void);
int SEGGER_SYSVIEW_GetChannelID (void);
// Checks whether tracing has been started
U8 SEGGER_SYSVIEW_Started(void);
/*********************************************************************
*
* Event recording functions
*/
void SEGGER_SYSVIEW_RecordVoid (unsigned int EventId);
void SEGGER_SYSVIEW_RecordU32 (unsigned int EventId, U32 Para0);
void SEGGER_SYSVIEW_RecordU32x2 (unsigned int EventId, U32 Para0, U32 Para1);
void SEGGER_SYSVIEW_RecordU32x3 (unsigned int EventId, U32 Para0, U32 Para1, U32 Para2);
void SEGGER_SYSVIEW_RecordU32x4 (unsigned int EventId, U32 Para0, U32 Para1, U32 Para2, U32 Para3);
void SEGGER_SYSVIEW_RecordU32x5 (unsigned int EventId, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4);
void SEGGER_SYSVIEW_RecordU32x6 (unsigned int EventId, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5);
void SEGGER_SYSVIEW_RecordU32x7 (unsigned int EventId, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5, U32 Para6);
void SEGGER_SYSVIEW_RecordU32x8 (unsigned int EventId, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5, U32 Para6, U32 Para7);
void SEGGER_SYSVIEW_RecordU32x9 (unsigned int EventId, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5, U32 Para6, U32 Para7, U32 Para8);
void SEGGER_SYSVIEW_RecordU32x10 (unsigned int EventId, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5, U32 Para6, U32 Para7, U32 Para8, U32 Para9);
void SEGGER_SYSVIEW_RecordString (unsigned int EventId, const char* pString);
void SEGGER_SYSVIEW_RecordSystime (void);
void SEGGER_SYSVIEW_RecordEnterISR (U32 IrqId);
void SEGGER_SYSVIEW_RecordExitISR (void);
void SEGGER_SYSVIEW_RecordExitISRToScheduler (void);
void SEGGER_SYSVIEW_RecordEnterTimer (U32 TimerId);
void SEGGER_SYSVIEW_RecordExitTimer (void);
void SEGGER_SYSVIEW_RecordEndCall (unsigned int EventID);
void SEGGER_SYSVIEW_RecordEndCallU32 (unsigned int EventID, U32 Para0);
void SEGGER_SYSVIEW_OnIdle (void);
void SEGGER_SYSVIEW_OnTaskCreate (U32 TaskId);
void SEGGER_SYSVIEW_OnTaskTerminate (U32 TaskId);
void SEGGER_SYSVIEW_OnTaskStartExec (U32 TaskId);
void SEGGER_SYSVIEW_OnTaskStopExec (void);
void SEGGER_SYSVIEW_OnTaskStartReady (U32 TaskId);
void SEGGER_SYSVIEW_OnTaskStopReady (U32 TaskId, unsigned int Cause);
void SEGGER_SYSVIEW_MarkStart (unsigned int MarkerId);
void SEGGER_SYSVIEW_MarkStop (unsigned int MarkerId);
void SEGGER_SYSVIEW_Mark (unsigned int MarkerId);
void SEGGER_SYSVIEW_NameMarker (unsigned int MarkerId, const char* sName);
void SEGGER_SYSVIEW_HeapDefine (void* pHeap, void* pBase, unsigned int HeapSize, unsigned int MetadataSize);
void SEGGER_SYSVIEW_HeapAlloc (void* pHeap, void* pUserData, unsigned int UserDataLen);
void SEGGER_SYSVIEW_HeapAllocEx (void* pHeap, void* pUserData, unsigned int UserDataLen, unsigned int Tag);
void SEGGER_SYSVIEW_HeapFree (void* pHeap, void* pUserData);
void SEGGER_SYSVIEW_NameResource (U32 ResourceId, const char* sName);
int SEGGER_SYSVIEW_SendPacket (U8* pPacket, U8* pPayloadEnd, unsigned int EventId);
/*********************************************************************
*
* Event parameter encoding functions
*/
U8* SEGGER_SYSVIEW_EncodeU32 (U8* pPayload, U32 Value);
U8* SEGGER_SYSVIEW_EncodeData (U8* pPayload, const char* pSrc, unsigned int Len);
U8* SEGGER_SYSVIEW_EncodeString (U8* pPayload, const char* s, unsigned int MaxLen);
U8* SEGGER_SYSVIEW_EncodeId (U8* pPayload, U32 Id);
U32 SEGGER_SYSVIEW_ShrinkId (U32 Id);
/*********************************************************************
*
* Middleware module registration
*/
void SEGGER_SYSVIEW_RegisterModule (SEGGER_SYSVIEW_MODULE* pModule);
void SEGGER_SYSVIEW_RecordModuleDescription (const SEGGER_SYSVIEW_MODULE* pModule, const char* sDescription);
void SEGGER_SYSVIEW_SendModule (U8 ModuleId);
void SEGGER_SYSVIEW_SendModuleDescription (void);
void SEGGER_SYSVIEW_SendNumModules (void);
/*********************************************************************
*
* printf-Style functions
*/
#ifndef SEGGER_SYSVIEW_EXCLUDE_PRINTF // Define in project to avoid warnings about variable parameter list
void SEGGER_SYSVIEW_PrintfHostEx (const char* s, U32 Options, ...);
void SEGGER_SYSVIEW_PrintfTargetEx (const char* s, U32 Options, ...);
void SEGGER_SYSVIEW_PrintfHost (const char* s, ...);
void SEGGER_SYSVIEW_PrintfTarget (const char* s, ...);
void SEGGER_SYSVIEW_WarnfHost (const char* s, ...);
void SEGGER_SYSVIEW_WarnfTarget (const char* s, ...);
void SEGGER_SYSVIEW_ErrorfHost (const char* s, ...);
void SEGGER_SYSVIEW_ErrorfTarget (const char* s, ...);
#endif
void SEGGER_SYSVIEW_Print (const char* s);
void SEGGER_SYSVIEW_Warn (const char* s);
void SEGGER_SYSVIEW_Error (const char* s);
/*********************************************************************
*
* Run-time configuration functions
*/
void SEGGER_SYSVIEW_EnableEvents (U32 EnableMask);
void SEGGER_SYSVIEW_DisableEvents (U32 DisableMask);
/*********************************************************************
*
* Application-provided functions
*/
void SEGGER_SYSVIEW_Conf (void);
U32 SEGGER_SYSVIEW_X_GetTimestamp (void);
U32 SEGGER_SYSVIEW_X_GetInterruptId (void);
void SEGGER_SYSVIEW_X_StartComm (void);
void SEGGER_SYSVIEW_X_OnEventRecorded (unsigned NumBytes);
#ifdef __cplusplus
}
#endif
/*********************************************************************
*
* Compatibility API defines
*/
#define SEGGER_SYSVIEW_OnUserStart SEGGER_SYSVIEW_MarkStart
#define SEGGER_SYSVIEW_OnUserStop SEGGER_SYSVIEW_MarkStop
#endif
/*************************** End of file ****************************/

View File

@@ -0,0 +1,588 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*
* SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
-------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW_ConfDefaults.h
Purpose : Defines defaults for configurable defines used in
SEGGER SystemView.
Revision: $Rev: 26230 $
*/
#ifndef SEGGER_SYSVIEW_CONFDEFAULTS_H
#define SEGGER_SYSVIEW_CONFDEFAULTS_H
/*********************************************************************
*
* #include Section
*
**********************************************************************
*/
#include "SEGGER_SYSVIEW_Conf.h"
#include "SEGGER_RTT_Conf.h"
#ifdef __cplusplus
extern "C" {
#endif
/*********************************************************************
*
* Defines, fixed
*
**********************************************************************
*/
//
// Use auto-detection for SEGGER_SYSVIEW_CORE define
// based on compiler-/toolchain-specific defines
// to define SEGGER_SYSVIEW_GET_INTERRUPT_ID and SEGGER_SYSVIEW_GET_TIMESTAMP
//
#define SEGGER_SYSVIEW_CORE_OTHER 0
#define SEGGER_SYSVIEW_CORE_CM0 1 // Cortex-M0/M0+/M1
#define SEGGER_SYSVIEW_CORE_CM3 2 // Cortex-M3/M4/M7
#define SEGGER_SYSVIEW_CORE_RX 3 // Renesas RX
#ifndef SEGGER_SYSVIEW_CORE
#if (defined __SES_ARM) || (defined __CROSSWORKS_ARM) || (defined __SEGGER_CC__) || (defined __GNUC__) || (defined __clang__)
#if (defined __ARM_ARCH_6M__) || (defined __ARM_ARCH_8M_BASE__)
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_CM0
#elif (defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__))
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_CM3
#endif
#elif defined(__ICCARM__)
#if (defined (__ARM6M__) && (__CORE__ == __ARM6M__)) \
|| (defined (__ARM8M_BASELINE__) && (__CORE__ == __ARM8M_BASELINE__))
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_CM0
#elif (defined (__ARM7EM__) && (__CORE__ == __ARM7EM__)) \
|| (defined (__ARM7M__) && (__CORE__ == __ARM7M__)) \
|| (defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__)) \
|| (defined (__ARM8M_MAINLINE__) && (__CORE__ == __ARM8M_MAINLINE__))
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_CM3
#endif
#elif defined(__CC_ARM)
#if (defined(__TARGET_ARCH_6S_M))
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_CM0
#elif (defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M))
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_CM3
#endif
#elif defined(__TI_ARM__)
#ifdef __TI_ARM_V6M0__
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_CM0
#elif (defined(__TI_ARM_V7M3__) || defined(__TI_ARM_V7M4__))
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_CM3
#endif
#elif defined(__ICCRX__)
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_RX
#elif defined(__RX)
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_RX
#endif
#ifndef SEGGER_SYSVIEW_CORE
#define SEGGER_SYSVIEW_CORE SEGGER_SYSVIEW_CORE_OTHER
#endif
#endif
/*********************************************************************
*
* Defines, defaults
*
**********************************************************************
*/
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_APP_NAME
*
* Description
* The application name to be displayed in SystemView.
* Default
* "SystemView-enabled Application"
* Notes
* Convenience define to be used for SEGGER_SYSVIEW_SendSysDesc().
*/
#ifndef SEGGER_SYSVIEW_APP_NAME
#define SEGGER_SYSVIEW_APP_NAME "SystemView-enabled Application"
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_DEVICE_NAME
*
* Description
* The target device name to be displayed in SystemView.
* Default
* "undefined device"
* Notes
* Convenience define to be used for SEGGER_SYSVIEW_SendSysDesc().
*/
#ifndef SEGGER_SYSVIEW_DEVICE_NAME
#define SEGGER_SYSVIEW_DEVICE_NAME "undefined device"
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_GET_INTERRUPT_ID()
*
* Description
* Function macro to retrieve the Id of the currently active
* interrupt.
* Default
* Call user-supplied function SEGGER_SYSVIEW_X_GetInterruptId().
* Notes
* For some known compilers and cores, a ready-to-use, core-specific
* default is set.
* ARMv7M: Read ICSR[8:0] (active vector)
* ARMv6M: Read ICSR[5:0] (active vector)
*/
#ifndef SEGGER_SYSVIEW_GET_INTERRUPT_ID
#if SEGGER_SYSVIEW_CORE == SEGGER_SYSVIEW_CORE_CM3
#define SEGGER_SYSVIEW_GET_INTERRUPT_ID() ((*(U32*)(0xE000ED04)) & 0x1FF) // Get the currently active interrupt Id. (i.e. read Cortex-M ICSR[8:0] = active vector)
#elif SEGGER_SYSVIEW_CORE == SEGGER_SYSVIEW_CORE_CM0
#if defined(__ICCARM__)
#if (__VER__ > 6010000)
#define SEGGER_SYSVIEW_GET_INTERRUPT_ID() (__get_IPSR()) // Workaround for IAR, which might do a byte-access to 0xE000ED04. Read IPSR instead.
#else
#define SEGGER_SYSVIEW_GET_INTERRUPT_ID() ((*(U32*)(0xE000ED04)) & 0x3F) // Older versions of IAR do not include __get_IPSR, but might also not optimize to byte-access.
#endif
#else
#define SEGGER_SYSVIEW_GET_INTERRUPT_ID() ((*(U32*)(0xE000ED04)) & 0x3F) // Get the currently active interrupt Id. (i.e. read Cortex-M ICSR[5:0] = active vector)
#endif
#else
#define SEGGER_SYSVIEW_GET_INTERRUPT_ID() SEGGER_SYSVIEW_X_GetInterruptId() // Get the currently active interrupt Id from the user-provided function.
#endif
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_GET_TIMESTAMP()
*
* Description
* Function macro to retrieve a system timestamp for SYSVIEW events.
* Default
* Call user-supplied function SEGGER_SYSVIEW_X_GetTimestamp().
* Notes
* For some known compilers and cores, a ready-to-use, core-specific
* default is set.
* ARMv7M: Read Cortex-M Cycle Count register.
*
* The system timestamp clock frequency has to be passed in
* SEGGER_SYSVIEW_Init().
*/
#ifndef SEGGER_SYSVIEW_GET_TIMESTAMP
#if defined (SEGGER_SYSVIEW_CORE) && (SEGGER_SYSVIEW_CORE == SEGGER_SYSVIEW_CORE_CM3)
#define SEGGER_SYSVIEW_GET_TIMESTAMP() (*(U32 *)(0xE0001004)) // Retrieve a system timestamp. Cortex-M cycle counter.
#else
#define SEGGER_SYSVIEW_GET_TIMESTAMP() SEGGER_SYSVIEW_X_GetTimestamp() // Retrieve a system timestamp via user-defined function
#endif
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_TIMESTAMP_BITS
*
* Description
* Number of valid (low-order) bits delivered in system timestamp.
* Default
* 32
* Notes
* Value has to match system timestamp clock source.
*/
// Define number of valid bits low-order delivered by clock source.
#ifndef SEGGER_SYSVIEW_TIMESTAMP_BITS
#define SEGGER_SYSVIEW_TIMESTAMP_BITS 32
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_RTT_CHANNEL
*
* Description
* The RTT channel that SystemView will use.
* Default
* 0: Auto selection.
* Notes
* Value has to be lower than SEGGER_RTT_MAX_NUM_UP_BUFFERS.
*/
#ifndef SEGGER_SYSVIEW_RTT_CHANNEL
#define SEGGER_SYSVIEW_RTT_CHANNEL 1
#endif
// Sanity check of RTT channel
#if (SEGGER_SYSVIEW_RTT_CHANNEL == 0) && (SEGGER_RTT_MAX_NUM_UP_BUFFERS < 2)
#error "SEGGER_RTT_MAX_NUM_UP_BUFFERS in SEGGER_RTT_Conf.h has to be > 1!"
#elif (SEGGER_SYSVIEW_RTT_CHANNEL >= SEGGER_RTT_MAX_NUM_UP_BUFFERS)
#error "SEGGER_RTT_MAX_NUM_UP_BUFFERS in SEGGER_RTT_Conf.h has to be > SEGGER_SYSVIEW_RTT_CHANNEL!"
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_RTT_BUFFER_SIZE
*
* Description
* Number of bytes that SystemView uses for the RTT buffer.
* Default
* 1024
*/
#ifndef SEGGER_SYSVIEW_RTT_BUFFER_SIZE
#define SEGGER_SYSVIEW_RTT_BUFFER_SIZE 1024
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_SECTION
*
* Description
* Section to place the SystemView RTT Buffer into.
* Default
* undefined: Do not place into a specific section.
* Notes
* If SEGGER_RTT_SECTION is defined, the default changes to use
* this section for the SystemView RTT Buffer, too.
*/
#if !(defined SEGGER_SYSVIEW_SECTION) && (defined SEGGER_RTT_SECTION)
#define SEGGER_SYSVIEW_SECTION SEGGER_RTT_SECTION
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_CPU_CACHE_LINE_SIZE
*
* Description
* Largest cache line size (in bytes) in the target system.
* Default
* 0
* Notes
* Required in systems with caches to make sure that the SystemView
* RTT buffer can be aligned accordingly.
*/
#ifndef SEGGER_SYSVIEW_CPU_CACHE_LINE_SIZE
#define SEGGER_SYSVIEW_CPU_CACHE_LINE_SIZE 0
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_ID_BASE
*
* Description
* Lowest Id reported by the application.
* Default
* 0
* Notes
* Value is usually subtracted from mailboxes, semaphores, tasks,
* .... addresses, to compress event parameters.
* Should be the lowest RAM address of the system.
*/
#ifndef SEGGER_SYSVIEW_ID_BASE
#define SEGGER_SYSVIEW_ID_BASE 0
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_ID_SHIFT
*
* Description
* Number of bits to shift Ids.
* Default
* 0
* Notes
* Ids are shifted to compress event parameters.
* Should match the alignment of Ids (addresses),
* e.g. 2 when Ids are 4 byte aligned.
*/
#ifndef SEGGER_SYSVIEW_ID_SHIFT
#define SEGGER_SYSVIEW_ID_SHIFT 0
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_MAX_ARGUMENTS
*
* Description
* Maximum number of arguments which are handled with SystemView
* print routines or may be encoded in one recording function.
* routines.
* Default
* 16
*/
#ifndef SEGGER_SYSVIEW_MAX_ARGUMENTS
#define SEGGER_SYSVIEW_MAX_ARGUMENTS 16
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_MAX_STRING_LEN
*
* Description
* Maximum string length which can be used in SystemView print and
* system description routines.
* Default
* 128
*/
#ifndef SEGGER_SYSVIEW_MAX_STRING_LEN
#define SEGGER_SYSVIEW_MAX_STRING_LEN 128
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_SUPPORT_LONG_ID
*
* Description
* It set, support enconding Evend Ids longer than 14 bit.
* Default
* 1
*/
#ifndef SEGGER_SYSVIEW_SUPPORT_LONG_ID
#define SEGGER_SYSVIEW_SUPPORT_LONG_ID 1
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_SUPPORT_LONG_DATA
*
* Description
* It set, support enconding event data longer than 14 bit.
* Default
* 0
*/
#ifndef SEGGER_SYSVIEW_SUPPORT_LONG_DATA
#define SEGGER_SYSVIEW_SUPPORT_LONG_DATA 0
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT
*
* Description
* If enabled, on SEGGER_SYSVIEW_PrintHost, check the format string
* and if it includes unsupported formatters, use formatting on the
* target instead.
* Default
* 0: Disabled.
*/
#ifndef SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT
#define SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT 0
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_USE_INTERNAL_RECORDER
*
* Description
* If set, an internal recorder, such as UART or IP is used.
* Default
* 0: Disabled.
* Notes
* Convenience define to be used by SEGGER_SYSVIEW_Conf(),
* such as in embOS configuration to enable Cortex-M cycle counter.
*/
#ifndef SEGGER_SYSVIEW_USE_INTERNAL_RECORDER
#define SEGGER_SYSVIEW_USE_INTERNAL_RECORDER 0
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_CAN_RESTART
*
* Description
* If enabled, send the SystemView start sequence on every start
* command, not just on the first one.
* Enables restart when SystemView disconnected unexpectedly.
* Default
* 1: Enabled
*/
#ifndef SEGGER_SYSVIEW_CAN_RESTART
#define SEGGER_SYSVIEW_CAN_RESTART 1
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_START_ON_INIT
*
* Description
* Enable calling SEGGER_SYSVIEW_Start() after initialization.
* Default
* 0: Disabled.
* Notes
* Convenience define to be used by SEGGER_SYSVIEW_Conf(),
* such as in embOS configuration.
*/
#ifndef SEGGER_SYSVIEW_START_ON_INIT
#define SEGGER_SYSVIEW_START_ON_INIT 0
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_USE_STATIC_BUFFER
*
* Description
* If enabled, use a static buffer instead of a buffer on the stack
* for SystemView event packets.
* Default
* 1: Enabled.
* Notes
* If enabled, the static memory use by SystemView is increased by
* the maximum packet size. SystemView is locked on entry of a
* recording function.
* If disabled, the stack usage by SystemView recording functions
* might be increased by up to the maximum packet size. SystemView
* is locked when writing the packet to the RTT buffer.
*/
#ifndef SEGGER_SYSVIEW_USE_STATIC_BUFFER
#define SEGGER_SYSVIEW_USE_STATIC_BUFFER 1
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_MAX_PACKET_SIZE
*
* Description
* Maximum packet size for a SystemView event.
* Default
* Automatically calculated.
* Notes
* The maximum packet size is mainly defined by the maximum string
* length and the maximum number of arguments.
*/
#ifndef SEGGER_SYSVIEW_MAX_PACKET_SIZE
#define SEGGER_SYSVIEW_MAX_PACKET_SIZE (SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_MAX_STRING_LEN + 2 * SEGGER_SYSVIEW_QUANTA_U32 + SEGGER_SYSVIEW_MAX_ARGUMENTS * SEGGER_SYSVIEW_QUANTA_U32)
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_POST_MORTEM_MODE
*
* Description
* If enabled, SystemView records for post-mortem analysis instead
* of real-time analysis.
* Default
* 0: Disabled.
* Notes
* For more information refer to
* https://www.segger.com/products/development-tools/systemview/technology/post-mortem-mode
*/
#ifndef SEGGER_SYSVIEW_POST_MORTEM_MODE
#define SEGGER_SYSVIEW_POST_MORTEM_MODE 0
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_SYNC_PERIOD_SHIFT
*
* Description
* Configure how frequently syncronization is sent in post-mortem
* mode.
* Default
* 8: (1 << 8) = Every 256 Events.
* Notes
* In post-mortem mode, at least one sync has to be in the RTT buffer.
* Recommended sync frequency: Buffer Size / 16
* For more information refer to
* https://www.segger.com/products/development-tools/systemview/technology/post-mortem-mode
*/
#ifndef SEGGER_SYSVIEW_SYNC_PERIOD_SHIFT
#define SEGGER_SYSVIEW_SYNC_PERIOD_SHIFT 8
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_ON_EVENT_RECORDED()
*
* Description
* Function macro to notify recorder about a new event in buffer.
* Default
* undefined: Do not notify recorder.
* Notes
* Used for non-J-Link recorder,
* such as to enable transmission via UART or notify IP task.
*/
#ifndef SEGGER_SYSVIEW_ON_EVENT_RECORDED
#define SEGGER_SYSVIEW_ON_EVENT_RECORDED(NumBytes)
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_LOCK()
*
* Description
* Function macro to (nestable) lock SystemView recording.
* Default
* Use RTT Locking mechanism (defined by SEGGER_RTT_LOCK()).
* Notes
* If SystemView recording is not locked, recording events from
* interrupts and tasks may lead to unpredictable, undefined, event
* data.
*/
#ifndef SEGGER_SYSVIEW_LOCK
unsigned SEGGER_SYSVIEW_X_SysView_Lock(void);
#define SEGGER_SYSVIEW_LOCK() unsigned _SYSVIEW_int_state = SEGGER_SYSVIEW_X_SysView_Lock()
#endif
/*********************************************************************
*
* Define: SEGGER_SYSVIEW_UNLOCK
*
* Description
* Function macro to unlock SystemView recording.
* Default
* Use RTT Unlocking mechanism (defined by SEGGER_RTT_UNLOCK()).
*/
#ifndef SEGGER_SYSVIEW_UNLOCK
void SEGGER_SYSVIEW_X_SysView_Unlock(unsigned int_state);
#define SEGGER_SYSVIEW_UNLOCK() SEGGER_SYSVIEW_X_SysView_Unlock(_SYSVIEW_int_state)
#endif
#ifdef __cplusplus
}
#endif
#endif
/*************************** End of file ****************************/

View File

@@ -0,0 +1,104 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
-------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW_Int.h
Purpose : SEGGER SystemView internal header.
Revision: $Rev: 21281 $
*/
#ifndef SEGGER_SYSVIEW_INT_H
#define SEGGER_SYSVIEW_INT_H
/*********************************************************************
*
* #include Section
*
**********************************************************************
*/
#include "SEGGER_SYSVIEW.h"
#ifdef __cplusplus
extern "C" {
#endif
/*********************************************************************
*
* Private data types
*
**********************************************************************
*/
//
// Commands that Host can send to target
//
typedef enum {
SEGGER_SYSVIEW_COMMAND_ID_START = 1,
SEGGER_SYSVIEW_COMMAND_ID_STOP,
SEGGER_SYSVIEW_COMMAND_ID_GET_SYSTIME,
SEGGER_SYSVIEW_COMMAND_ID_GET_TASKLIST,
SEGGER_SYSVIEW_COMMAND_ID_GET_SYSDESC,
SEGGER_SYSVIEW_COMMAND_ID_GET_NUMMODULES,
SEGGER_SYSVIEW_COMMAND_ID_GET_MODULEDESC,
SEGGER_SYSVIEW_COMMAND_ID_HEARTBEAT = 127,
// Extended commands: Commands >= 128 have a second parameter
SEGGER_SYSVIEW_COMMAND_ID_GET_MODULE = 128
} SEGGER_SYSVIEW_COMMAND_ID;
#ifdef __cplusplus
}
#endif
#endif
/*************************** End of file ****************************/

View File

@@ -0,0 +1,6 @@
name: 'SystemView'
version: '3.42'
cpe: cpe:2.3:a:segger:systemview:{}:*:*:*:*:*:*:*
supplier: 'Organization: Espressif Systems (Shanghai) CO LTD'
originator: 'Organization: SEGGER Microcontroller GmbH'
description: Real-time recording and visualization tool for embedded systems.

View File

@@ -0,0 +1,285 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*
* SPDX-FileContributor: 2017-2024 Espressif Systems (Shanghai) CO LTD
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
-------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW_Config_FreeRTOS.c
Purpose : Sample setup configuration of SystemView with FreeRTOS.
Revision: $Rev: 7745 $
*/
#include <string.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "SEGGER_SYSVIEW.h"
#include "esp_app_trace.h"
#include "esp_app_trace_util.h"
#include "esp_intr_alloc.h"
#include "esp_cpu.h"
#include "soc/soc.h"
#include "soc/interrupts.h"
#include "esp_private/esp_clk.h"
extern const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI;
/*********************************************************************
*
* Defines, configurable
*
**********************************************************************
*/
// The application name to be displayed in SystemViewer
#define SYSVIEW_APP_NAME "FreeRTOS Application"
// The target device name
#define SYSVIEW_DEVICE_NAME CONFIG_IDF_TARGET
// The target core name
#if CONFIG_IDF_TARGET_ARCH_XTENSA
#define SYSVIEW_CORE_NAME "xtensa"
#elif CONFIG_IDF_TARGET_ARCH_RISCV
#define SYSVIEW_CORE_NAME "riscv"
#endif
// Determine which timer to use as timestamp source
#if CONFIG_APPTRACE_SV_TS_SOURCE_CCOUNT
#define TS_USE_CCOUNT 1
#elif CONFIG_APPTRACE_SV_TS_SOURCE_ESP_TIMER
#define TS_USE_ESP_TIMER 1
#else
#define TS_USE_TIMERGROUP 1
#endif
#if TS_USE_TIMERGROUP
#include "driver/gptimer.h"
// Timer group timer divisor
#define SYSVIEW_TIMER_DIV 2
// Frequency of the timestamp, using APB as GPTimer source clock
#define SYSVIEW_TIMESTAMP_FREQ (esp_clk_apb_freq() / SYSVIEW_TIMER_DIV)
// GPTimer handle
gptimer_handle_t s_sv_gptimer;
#endif // TS_USE_TIMERGROUP
#if TS_USE_ESP_TIMER
// esp_timer provides 1us resolution
#define SYSVIEW_TIMESTAMP_FREQ (1000000)
#endif // TS_USE_ESP_TIMER
#if TS_USE_CCOUNT
// CCOUNT is incremented at CPU frequency
#define SYSVIEW_TIMESTAMP_FREQ (CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ * 1000000)
#endif // TS_USE_CCOUNT
// System Frequency.
#define SYSVIEW_CPU_FREQ (esp_clk_cpu_freq())
// The lowest RAM address used for IDs (pointers)
#define SYSVIEW_RAM_BASE (SOC_DROM_LOW)
#ifdef CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER
#if CONFIG_FREERTOS_CORETIMER_0
#define SYSTICK_INTR_ID (ETS_INTERNAL_TIMER0_INTR_SOURCE+ETS_INTERNAL_INTR_SOURCE_OFF)
#endif
#if CONFIG_FREERTOS_CORETIMER_1
#define SYSTICK_INTR_ID (ETS_INTERNAL_TIMER1_INTR_SOURCE+ETS_INTERNAL_INTR_SOURCE_OFF)
#endif
#elif CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER
#define SYSTICK_INTR_ID (ETS_SYSTIMER_TARGET0_INTR_SOURCE)
#endif // CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER
// SystemView is single core specific: it implies that SEGGER_SYSVIEW_LOCK()
// disables IRQs (disables rescheduling globally). So we can not use finite timeouts for locks and return error
// in case of expiration, because error will not be handled and SEGGER's code will go further implying that
// everything is fine, so for multi-core env we have to wait on underlying lock forever
#define SEGGER_LOCK_WAIT_TMO ESP_APPTRACE_TMO_INFINITE
static esp_apptrace_lock_t s_sys_view_lock = {.mux = portMUX_INITIALIZER_UNLOCKED, .int_state = 0};
/*********************************************************************
*
* _cbSendSystemDesc()
*
* Function description
* Sends SystemView description strings.
*/
static void _cbSendSystemDesc(void) {
char irq_str[32] = "I#";
SEGGER_SYSVIEW_SendSysDesc("N="SYSVIEW_APP_NAME",D="SYSVIEW_DEVICE_NAME",C="SYSVIEW_CORE_NAME",O=FreeRTOS");
strcat(itoa(SYSTICK_INTR_ID, irq_str + 2, 10), "=SysTick");
SEGGER_SYSVIEW_SendSysDesc(irq_str);
size_t isr_count = sizeof(esp_isr_names)/sizeof(esp_isr_names[0]);
for (size_t i = 0; i < isr_count; ++i) {
if (esp_isr_names[i] == NULL || (ETS_INTERNAL_INTR_SOURCE_OFF + i) == SYSTICK_INTR_ID)
continue;
strcat(itoa(ETS_INTERNAL_INTR_SOURCE_OFF + i, irq_str + 2, 10), "=");
strncat(irq_str, esp_isr_names[i], sizeof(irq_str) - strlen(irq_str) - 1);
SEGGER_SYSVIEW_SendSysDesc(irq_str);
}
}
/*********************************************************************
*
* Global functions
*
**********************************************************************
*/
static void SEGGER_SYSVIEW_TS_Init(void)
{
/* We only need to initialize something if we use Timer Group.
* esp_timer and ccount can be used as is.
*/
#if TS_USE_TIMERGROUP
gptimer_config_t config = {
.clk_src = GPTIMER_CLK_SRC_DEFAULT,
.direction = GPTIMER_COUNT_UP,
.resolution_hz = SYSVIEW_TIMESTAMP_FREQ,
};
// pick any free GPTimer instance
ESP_ERROR_CHECK(gptimer_new_timer(&config, &s_sv_gptimer));
/* Start counting */
gptimer_enable(s_sv_gptimer);
gptimer_start(s_sv_gptimer);
#endif // TS_USE_TIMERGROUP
}
void SEGGER_SYSVIEW_Conf(void) {
U32 disable_evts = 0;
SEGGER_SYSVIEW_TS_Init();
SEGGER_SYSVIEW_Init(SYSVIEW_TIMESTAMP_FREQ, SYSVIEW_CPU_FREQ,
&SYSVIEW_X_OS_TraceAPI, _cbSendSystemDesc);
SEGGER_SYSVIEW_SetRAMBase(SYSVIEW_RAM_BASE);
#if !CONFIG_APPTRACE_SV_EVT_OVERFLOW_ENABLE
disable_evts |= SYSVIEW_EVTMASK_OVERFLOW;
#endif
#if !CONFIG_APPTRACE_SV_EVT_ISR_ENTER_ENABLE
disable_evts |= SYSVIEW_EVTMASK_ISR_ENTER;
#endif
#if !CONFIG_APPTRACE_SV_EVT_ISR_EXIT_ENABLE
disable_evts |= SYSVIEW_EVTMASK_ISR_EXIT;
#endif
#if !CONFIG_APPTRACE_SV_EVT_TASK_START_EXEC_ENABLE
disable_evts |= SYSVIEW_EVTMASK_TASK_START_EXEC;
#endif
#if !CONFIG_APPTRACE_SV_EVT_TASK_STOP_EXEC_ENABLE
disable_evts |= SYSVIEW_EVTMASK_TASK_STOP_EXEC;
#endif
#if !CONFIG_APPTRACE_SV_EVT_TASK_START_READY_ENABLE
disable_evts |= SYSVIEW_EVTMASK_TASK_START_READY;
#endif
#if !CONFIG_APPTRACE_SV_EVT_TASK_STOP_READY_ENABLE
disable_evts |= SYSVIEW_EVTMASK_TASK_STOP_READY;
#endif
#if !CONFIG_APPTRACE_SV_EVT_TASK_CREATE_ENABLE
disable_evts |= SYSVIEW_EVTMASK_TASK_CREATE;
#endif
#if !CONFIG_APPTRACE_SV_EVT_TASK_TERMINATE_ENABLE
disable_evts |= SYSVIEW_EVTMASK_TASK_TERMINATE;
#endif
#if !CONFIG_APPTRACE_SV_EVT_IDLE_ENABLE
disable_evts |= SYSVIEW_EVTMASK_IDLE;
#endif
#if !CONFIG_APPTRACE_SV_EVT_ISR_TO_SCHED_ENABLE
disable_evts |= SYSVIEW_EVTMASK_ISR_TO_SCHEDULER;
#endif
#if !CONFIG_APPTRACE_SV_EVT_TIMER_ENTER_ENABLE
disable_evts |= SYSVIEW_EVTMASK_TIMER_ENTER;
#endif
#if !CONFIG_APPTRACE_SV_EVT_TIMER_EXIT_ENABLE
disable_evts |= SYSVIEW_EVTMASK_TIMER_EXIT;
#endif
SEGGER_SYSVIEW_DisableEvents(disable_evts);
}
U32 SEGGER_SYSVIEW_X_GetTimestamp(void)
{
#if TS_USE_TIMERGROUP
uint64_t ts = 0;
gptimer_get_raw_count(s_sv_gptimer, &ts);
return (U32) ts; // return lower part of counter value
#elif TS_USE_CCOUNT
return esp_cpu_get_cycle_count();
#elif TS_USE_ESP_TIMER
return (U32) esp_timer_get_time(); // return lower part of counter value
#endif
}
void SEGGER_SYSVIEW_X_RTT_Lock(void)
{
}
void SEGGER_SYSVIEW_X_RTT_Unlock(void)
{
}
unsigned SEGGER_SYSVIEW_X_SysView_Lock(void)
{
esp_apptrace_tmo_t tmo;
esp_apptrace_tmo_init(&tmo, SEGGER_LOCK_WAIT_TMO);
esp_apptrace_lock_take(&s_sys_view_lock, &tmo);
// to be recursive save IRQ status on the stack of the caller to keep it from overwriting
return s_sys_view_lock.int_state;
}
void SEGGER_SYSVIEW_X_SysView_Unlock(unsigned int_state)
{
s_sys_view_lock.int_state = int_state;
esp_apptrace_lock_give(&s_sys_view_lock);
}
/*************************** End of file ****************************/

View File

@@ -0,0 +1,270 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*
* SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
-------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW_FreeRTOS.c
Purpose : Interface between FreeRTOS and SystemView.
Revision: $Rev: 7947 $
*/
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "SEGGER_SYSVIEW.h"
#include "SEGGER_SYSVIEW_FreeRTOS.h"
#include "string.h" // Required for memset
typedef struct SYSVIEW_FREERTOS_TASK_STATUS SYSVIEW_FREERTOS_TASK_STATUS;
struct SYSVIEW_FREERTOS_TASK_STATUS {
U32 xHandle;
const char* pcTaskName;
unsigned uxCurrentPriority;
U32 pxStack;
unsigned uStackHighWaterMark;
};
static SYSVIEW_FREERTOS_TASK_STATUS _aTasks[SYSVIEW_FREERTOS_MAX_NOF_TASKS];
static unsigned _NumTasks;
/*********************************************************************
*
* _cbSendTaskList()
*
* Function description
* This function is part of the link between FreeRTOS and SYSVIEW.
* Called from SystemView when asked by the host, it uses SYSVIEW
* functions to send the entire task list to the host.
*/
static void _cbSendTaskList(void) {
unsigned n;
for (n = 0; n < _NumTasks; n++) {
#if INCLUDE_uxTaskGetStackHighWaterMark // Report Task Stack High Watermark
_aTasks[n].uStackHighWaterMark = uxTaskGetStackHighWaterMark((TaskHandle_t)_aTasks[n].xHandle);
#endif
SYSVIEW_SendTaskInfo((U32)_aTasks[n].xHandle, _aTasks[n].pcTaskName, (unsigned)_aTasks[n].uxCurrentPriority, (U32)_aTasks[n].pxStack, (unsigned)_aTasks[n].uStackHighWaterMark);
}
}
/*********************************************************************
*
* _cbGetTime()
*
* Function description
* This function is part of the link between FreeRTOS and SYSVIEW.
* Called from SystemView when asked by the host, returns the
* current system time in micro seconds.
*/
__attribute__((unused)) static U64 _cbGetTime(void) {
U64 Time;
Time = xTaskGetTickCountFromISR();
Time *= portTICK_PERIOD_MS;
Time *= 1000;
return Time;
}
/*********************************************************************
*
* Global functions
*
**********************************************************************
*/
/*********************************************************************
*
* SYSVIEW_AddTask()
*
* Function description
* Add a task to the internal list and record its information.
*/
void SYSVIEW_AddTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark) {
/* On multi-core we have several idle tasks with 'IDLEx' names
Not best solution, because we can filter out user tasks starting with 'IDLE'.
But we can not use 'xTaskGetIdleTaskHandle' because at the moment when this
function is called array of idle tasks handles are not initialized yet. */
if (memcmp(pcTaskName, "IDLE", 4) == 0) {
return;
}
if (_NumTasks >= SYSVIEW_FREERTOS_MAX_NOF_TASKS) {
SEGGER_SYSVIEW_Warn("SYSTEMVIEW: Could not record task information. Maximum number of tasks reached.");
return;
}
_aTasks[_NumTasks].xHandle = xHandle;
_aTasks[_NumTasks].pcTaskName = pcTaskName;
_aTasks[_NumTasks].uxCurrentPriority = uxCurrentPriority;
_aTasks[_NumTasks].pxStack = pxStack;
_aTasks[_NumTasks].uStackHighWaterMark = uStackHighWaterMark;
_NumTasks++;
SYSVIEW_SendTaskInfo(xHandle, pcTaskName,uxCurrentPriority, pxStack, uStackHighWaterMark);
}
/*********************************************************************
*
* SYSVIEW_UpdateTask()
*
* Function description
* Update a task in the internal list and record its information.
*/
void SYSVIEW_UpdateTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark) {
unsigned n;
/* On multi-core we have several idle tasks with 'IDLEx' names
Not best solution, because we can filter out user tasks starting with 'IDLE'.
But we can not use 'xTaskGetIdleTaskHandle' because at the moment when this
function is called array of idle tasks handles are not initialized yet. */
if (memcmp(pcTaskName, "IDLE", 4) == 0) {
return;
}
for (n = 0; n < _NumTasks; n++) {
if (_aTasks[n].xHandle == xHandle) {
break;
}
}
if (n < _NumTasks) {
_aTasks[n].pcTaskName = pcTaskName;
_aTasks[n].uxCurrentPriority = uxCurrentPriority;
_aTasks[n].pxStack = pxStack;
_aTasks[n].uStackHighWaterMark = uStackHighWaterMark;
SYSVIEW_SendTaskInfo(xHandle, pcTaskName, uxCurrentPriority, pxStack, uStackHighWaterMark);
} else {
SYSVIEW_AddTask(xHandle, pcTaskName, uxCurrentPriority, pxStack, uStackHighWaterMark);
}
}
/*********************************************************************
*
* SYSVIEW_DeleteTask()
*
* Function description
* Delete a task from the internal list.
*/
void SYSVIEW_DeleteTask(U32 xHandle) {
unsigned n;
if (_NumTasks == 0) {
return; // Early out
}
for (n = 0; n < _NumTasks; n++) {
if (_aTasks[n].xHandle == xHandle) {
break;
}
}
if (n == (_NumTasks - 1)) {
//
// Task is last item in list.
// Simply zero the item and decrement number of tasks.
//
memset(&_aTasks[n], 0, sizeof(_aTasks[n]));
_NumTasks--;
} else if (n < _NumTasks) {
//
// Task is in the middle of the list.
// Move last item to current position and decrement number of tasks.
// Order of tasks does not really matter, so no need to move all following items.
//
_aTasks[n].xHandle = _aTasks[_NumTasks - 1].xHandle;
_aTasks[n].pcTaskName = _aTasks[_NumTasks - 1].pcTaskName;
_aTasks[n].uxCurrentPriority = _aTasks[_NumTasks - 1].uxCurrentPriority;
_aTasks[n].pxStack = _aTasks[_NumTasks - 1].pxStack;
_aTasks[n].uStackHighWaterMark = _aTasks[_NumTasks - 1].uStackHighWaterMark;
memset(&_aTasks[_NumTasks - 1], 0, sizeof(_aTasks[_NumTasks - 1]));
_NumTasks--;
}
}
/*********************************************************************
*
* SYSVIEW_SendTaskInfo()
*
* Function description
* Record task information.
*/
void SYSVIEW_SendTaskInfo(U32 TaskID, const char* sName, unsigned Prio, U32 StackBase, unsigned StackSize) {
SEGGER_SYSVIEW_TASKINFO TaskInfo;
memset(&TaskInfo, 0, sizeof(TaskInfo)); // Fill all elements with 0 to allow extending the structure in future version without breaking the code
TaskInfo.TaskID = TaskID;
TaskInfo.sName = sName;
TaskInfo.Prio = Prio;
TaskInfo.StackBase = StackBase;
TaskInfo.StackSize = StackSize;
SEGGER_SYSVIEW_SendTaskInfo(&TaskInfo);
}
/*********************************************************************
*
* Public API structures
*
**********************************************************************
*/
// Callbacks provided to SYSTEMVIEW by FreeRTOS
const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI = {
/* Callback _cbGetTime locks xKernelLock inside xTaskGetTickCountFromISR, this can cause deadlock on multi-core.
To prevent deadlock, always lock xKernelLock before s_sys_view_lock. Omitting the callback here results in sending
SYSVIEW_EVTID_SYSTIME_CYCLES events instead of SYSVIEW_EVTID_SYSTIME_US */
NULL,
_cbSendTaskList,
};
/*************************** End of file ****************************/

View File

@@ -0,0 +1,367 @@
/*
* SPDX-FileCopyrightText: 1995-2021 SEGGER Microcontroller GmbH
*
* SPDX-License-Identifier: BSD-1-Clause
*
* SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD
*/
/*********************************************************************
* SEGGER Microcontroller GmbH *
* The Embedded Experts *
**********************************************************************
* *
* (c) 1995 - 2021 SEGGER Microcontroller GmbH *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
* *
* SEGGER SystemView * Real-time application analysis *
* *
**********************************************************************
* *
* All rights reserved. *
* *
* SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. *
* *
* Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following *
* condition is met: *
* *
* o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
* DAMAGE. *
* *
**********************************************************************
* *
* SystemView version: 3.42 *
* *
**********************************************************************
-------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW_FreeRTOS.h
Purpose : Interface between FreeRTOS and SystemView.
Tested with FreeRTOS V10.4.3
Revision: $Rev: 7745 $
Notes:
(1) Include this file at the end of FreeRTOSConfig.h
*/
#ifndef SYSVIEW_FREERTOS_H
#define SYSVIEW_FREERTOS_H
#include "SEGGER_SYSVIEW.h"
/*********************************************************************
*
* Defines, configurable
*
**********************************************************************
*/
#define SYSVIEW_FREERTOS_MAX_NOF_TASKS CONFIG_APPTRACE_SV_MAX_TASKS
/*********************************************************************
*
* Defines, fixed
*
**********************************************************************
*/
// for dual-core targets we use event ID to keep core ID bit (0 or 1)
// use the highest - 1 bit of event ID to indicate core ID
// the highest bit can not be used due to event ID encoding method
// this reduces supported ID range to [0..63] (for 1 byte IDs) plus [128..16383] (for 2 bytes IDs)
// so original continuous event IDs range is split into two sub-ranges for 1-bytes IDs and 2-bytes ones
// events which use apiFastID_OFFSET will have 1 byte ID,
// so for the sake of bandwidth economy events which are generated more frequently should use this ID offset
// currently all used events fall into this range
#define apiFastID_OFFSET (32u)
#define apiID_VTASKDELETE (1u)
#define apiID_VTASKDELAY (2u)
#define apiID_VTASKDELAYUNTIL (3u)
#define apiID_VTASKSUSPEND (4u)
#define apiID_ULTASKNOTIFYTAKE (5u)
#define apiID_VTASKNOTIFYGIVEFROMISR (6u)
#define apiID_VTASKPRIORITYINHERIT (7u)
#define apiID_VTASKRESUME (8u)
#define apiID_VTASKSTEPTICK (9u)
#define apiID_XTASKPRIORITYDISINHERIT (10u)
#define apiID_XTASKRESUMEFROMISR (11u)
#define apiID_XTASKGENERICNOTIFY (12u)
#define apiID_XTASKGENERICNOTIFYFROMISR (13u)
#define apiID_XTASKNOTIFYWAIT (14u)
#define apiID_XQUEUEGENERICCREATE (15u)
#define apiID_VQUEUEDELETE (16u)
#define apiID_XQUEUEGENERICRECEIVE (17u)
#define apiID_XQUEUEPEEKFROMISR (18u)
#define apiID_XQUEUERECEIVEFROMISR (19u)
#define apiID_VQUEUEADDTOREGISTRY (20u)
#define apiID_XQUEUEGENERICSEND (21u)
#define apiID_XQUEUEGENERICSENDFROMISR (22u)
#define apiID_VTASKPRIORITYSET (23u)
#define apiID_UXTASKPRIORITYGETFROMISR (24u)
#define apiID_XTASKGETTICKCOUNTFROMISR (25u)
#define apiID_XEVENTGROUPCLEARBITSFROMISR (26u)
#define apiID_XEVENTGROUPSETBITSFROMISR (27u)
#define apiID_XEVENTGROUPGETBITSFROMISR (28u)
#define apiID_XQUEUEGIVEFROMISR (29u)
#define apiID_XQUEUEISQUEUEEMPTYFROMISR (30u)
#define apiID_XQUEUEISQUEUEFULLFROMISR (31u) // the maximum allowed apiID for the first ID range
// events which use apiSlowID_OFFSET will have 2-bytes ID
#define apiSlowID_OFFSET (127u)
#define apiID_VTASKALLOCATEMPUREGIONS (1u)
#define apiID_UXTASKPRIORITYGET (2u)
#define apiID_ETASKGETSTATE (3u)
#define apiID_VTASKSTARTSCHEDULER (4u)
#define apiID_VTASKENDSCHEDULER (5u)
#define apiID_VTASKSUSPENDALL (6u)
#define apiID_XTASKRESUMEALL (7u)
#define apiID_XTASKGETTICKCOUNT (8u)
#define apiID_UXTASKGETNUMBEROFTASKS (9u)
#define apiID_PCTASKGETTASKNAME (10u)
#define apiID_UXTASKGETSTACKHIGHWATERMARK (11u)
#define apiID_VTASKSETAPPLICATIONTASKTAG (12u)
#define apiID_XTASKGETAPPLICATIONTASKTAG (13u)
#define apiID_VTASKSETTHREADLOCALSTORAGEPOINTER (14u)
#define apiID_PVTASKGETTHREADLOCALSTORAGEPOINTER (15u)
#define apiID_XTASKCALLAPPLICATIONTASKHOOK (16u)
#define apiID_XTASKGETIDLETASKHANDLE (17u)
#define apiID_UXTASKGETSYSTEMSTATE (18u)
#define apiID_VTASKLIST (19u)
#define apiID_VTASKGETRUNTIMESTATS (20u)
#define apiID_XTASKNOTIFYSTATECLEAR (21u)
#define apiID_XTASKGETCURRENTTASKHANDLE (22u)
#define apiID_VTASKSETTIMEOUTSTATE (23u)
#define apiID_XTASKCHECKFORTIMEOUT (24u)
#define apiID_VTASKMISSEDYIELD (25u)
#define apiID_XTASKGETSCHEDULERSTATE (26u)
#define apiID_XTASKGENERICCREATE (27u)
#define apiID_UXTASKGETTASKNUMBER (28u)
#define apiID_VTASKSETTASKNUMBER (29u)
#define apiID_ETASKCONFIRMSLEEPMODESTATUS (30u)
#define apiID_XTIMERCREATE (31u)
#define apiID_PVTIMERGETTIMERID (32u)
#define apiID_VTIMERSETTIMERID (33u)
#define apiID_XTIMERISTIMERACTIVE (34u)
#define apiID_XTIMERGETTIMERDAEMONTASKHANDLE (35u)
#define apiID_XTIMERPENDFUNCTIONCALLFROMISR (36u)
#define apiID_XTIMERPENDFUNCTIONCALL (37u)
#define apiID_PCTIMERGETTIMERNAME (38u)
#define apiID_XTIMERCREATETIMERTASK (39u)
#define apiID_XTIMERGENERICCOMMAND (40u)
#define apiID_UXQUEUEMESSAGESWAITING (41u)
#define apiID_UXQUEUESPACESAVAILABLE (42u)
#define apiID_UXQUEUEMESSAGESWAITINGFROMISR (43u)
#define apiID_XQUEUEALTGENERICSEND (44u)
#define apiID_XQUEUEALTGENERICRECEIVE (45u)
#define apiID_XQUEUECRSENDFROMISR (46u)
#define apiID_XQUEUECRRECEIVEFROMISR (47u)
#define apiID_XQUEUECRSEND (48u)
#define apiID_XQUEUECRRECEIVE (49u)
#define apiID_XQUEUECREATEMUTEX (50u)
#define apiID_XQUEUECREATECOUNTINGSEMAPHORE (51u)
#define apiID_XQUEUEGETMUTEXHOLDER (52u)
#define apiID_XQUEUETAKEMUTEXRECURSIVE (53u)
#define apiID_XQUEUEGIVEMUTEXRECURSIVE (54u)
#define apiID_VQUEUEUNREGISTERQUEUE (55u)
#define apiID_XQUEUECREATESET (56u)
#define apiID_XQUEUEADDTOSET (57u)
#define apiID_XQUEUEREMOVEFROMSET (58u)
#define apiID_XQUEUESELECTFROMSET (59u)
#define apiID_XQUEUESELECTFROMSETFROMISR (60u)
#define apiID_XQUEUEGENERICRESET (61u)
#define apiID_VLISTINITIALISE (62u)
#define apiID_VLISTINITIALISEITEM (63u)
#define apiID_VLISTINSERT (64u)
#define apiID_VLISTINSERTEND (65u)
#define apiID_UXLISTREMOVE (66u)
#define apiID_XEVENTGROUPCREATE (67u)
#define apiID_XEVENTGROUPWAITBITS (68u)
#define apiID_XEVENTGROUPCLEARBITS (69u)
#define apiID_XEVENTGROUPSETBITS (70u)
#define apiID_XEVENTGROUPSYNC (71u)
#define apiID_VEVENTGROUPDELETE (72u)
#define apiID_UXEVENTGROUPGETNUMBER (73u)
#define apiID_XSTREAMBUFFERCREATE (74u)
#define apiID_VSTREAMBUFFERDELETE (75u)
#define apiID_XSTREAMBUFFERRESET (76u)
#define apiID_XSTREAMBUFFERSEND (77u)
#define apiID_XSTREAMBUFFERSENDFROMISR (78u)
#define apiID_XSTREAMBUFFERRECEIVE (79u)
#define apiID_XSTREAMBUFFERRECEIVEFROMISR (80u)
#ifdef CONFIG_FREERTOS_SMP
#define traceQUEUE_SEND( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), 0u, 0u, 0u)
#else // CONFIG_FREERTOS_SMP
#if ( configUSE_QUEUE_SETS != 1 )
#define traceQUEUE_SEND( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, xTicksToWait, xCopyPosition)
#else
#define traceQUEUE_SEND( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), 0u, 0u, 0u)
#endif
#endif // CONFIG_FREERTOS_SMP
#define traceSTART() SEGGER_SYSVIEW_Conf()
#define traceTASK_NOTIFY_TAKE(uxIndexToWait) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_ULTASKNOTIFYTAKE, xClearCountOnExit, xTicksToWait)
#define traceTASK_DELAY() SEGGER_SYSVIEW_RecordU32 (apiFastID_OFFSET + apiID_VTASKDELAY, xTicksToDelay)
#define traceTASK_DELAY_UNTIL(xTimeToWake) SEGGER_SYSVIEW_RecordVoid (apiFastID_OFFSET + apiID_VTASKDELAYUNTIL)
#define traceTASK_NOTIFY_GIVE_FROM_ISR(uxIndexToNotify) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_VTASKNOTIFYGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), (U32)pxHigherPriorityTaskWoken)
#define traceTASK_PRIORITY_INHERIT( pxTCB, uxPriority ) SEGGER_SYSVIEW_RecordU32 (apiFastID_OFFSET + apiID_VTASKPRIORITYINHERIT, (U32)pxMutexHolder)
#define traceTASK_RESUME( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiFastID_OFFSET + apiID_VTASKRESUME, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB))
#define traceINCREASE_TICK_COUNT( xTicksToJump ) SEGGER_SYSVIEW_RecordU32 (apiFastID_OFFSET + apiID_VTASKSTEPTICK, xTicksToJump)
#define traceTASK_SUSPEND( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiFastID_OFFSET + apiID_VTASKSUSPEND, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB))
#define traceTASK_PRIORITY_DISINHERIT( pxTCB, uxBasePriority ) SEGGER_SYSVIEW_RecordU32 (apiFastID_OFFSET + apiID_XTASKPRIORITYDISINHERIT, (U32)pxMutexHolder)
#define traceTASK_RESUME_FROM_ISR( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiFastID_OFFSET + apiID_XTASKRESUMEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB))
#define traceTASK_NOTIFY(uxIndexToNotify) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XTASKGENERICNOTIFY, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue)
#define traceTASK_NOTIFY_FROM_ISR(uxIndexToWait) SEGGER_SYSVIEW_RecordU32x5(apiFastID_OFFSET + apiID_XTASKGENERICNOTIFYFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue, (U32)pxHigherPriorityTaskWoken)
#define traceTASK_NOTIFY_WAIT(uxIndexToWait) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XTASKNOTIFYWAIT, ulBitsToClearOnEntry, ulBitsToClearOnExit, (U32)pulNotificationValue, xTicksToWait)
#define traceQUEUE_CREATE( pxNewQueue ) SEGGER_SYSVIEW_RecordU32x3(apiFastID_OFFSET + apiID_XQUEUEGENERICCREATE, uxQueueLength, uxItemSize, ucQueueType)
#define traceQUEUE_DELETE( pxQueue ) SEGGER_SYSVIEW_RecordU32 (apiFastID_OFFSET + apiID_VQUEUEDELETE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue))
#define traceQUEUE_PEEK( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer), xTicksToWait, 1)
#define traceQUEUE_PEEK_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEPEEKFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer))
#define traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEPEEKFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer))
#define traceQUEUE_RECEIVE( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 1)
#define traceQUEUE_RECEIVE_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 1)
#define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 0)
#define traceQUEUE_RECEIVE_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x3(apiFastID_OFFSET + apiID_XQUEUERECEIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer), (U32)pxHigherPriorityTaskWoken)
#define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x3(apiFastID_OFFSET + apiID_XQUEUERECEIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer), (U32)pxHigherPriorityTaskWoken)
#define traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_VQUEUEADDTOREGISTRY, SEGGER_SYSVIEW_ShrinkId((U32)xQueue), (U32)pcQueueName)
#define traceQUEUE_SEND_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, xTicksToWait, xCopyPosition)
#define traceQUEUE_SEND_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, (U32)pxHigherPriorityTaskWoken, xCopyPosition)
#define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, (U32)pxHigherPriorityTaskWoken, xCopyPosition)
#define traceQUEUE_GIVE_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken)
#define traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken)
#define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiSlowID_OFFSET + apiID_XSTREAMBUFFERCREATE, (U32)xIsMessageBuffer, (U32)pxStreamBuffer)
#define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiSlowID_OFFSET + apiID_XSTREAMBUFFERCREATE, (U32)xIsMessageBuffer, 0u)
#define traceSTREAM_BUFFER_DELETE( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32 (apiSlowID_OFFSET + apiID_VSTREAMBUFFERDELETE, (U32)xStreamBuffer)
#define traceSTREAM_BUFFER_RESET( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32 (apiSlowID_OFFSET + apiID_XSTREAMBUFFERRESET, (U32)xStreamBuffer)
#define traceSTREAM_BUFFER_SEND( xStreamBuffer, xBytesSent ) SEGGER_SYSVIEW_RecordU32x2(apiSlowID_OFFSET + apiID_XSTREAMBUFFERSEND, (U32)xStreamBuffer, (U32)xBytesSent)
#define traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiSlowID_OFFSET + apiID_XSTREAMBUFFERSEND, (U32)xStreamBuffer, 0u)
#define traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xBytesSent ) SEGGER_SYSVIEW_RecordU32x2(apiSlowID_OFFSET + apiID_XSTREAMBUFFERSENDFROMISR, (U32)xStreamBuffer, (U32)xBytesSent)
#define traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength ) SEGGER_SYSVIEW_RecordU32x2(apiSlowID_OFFSET + apiID_XSTREAMBUFFERRECEIVE, (U32)xStreamBuffer, (U32)xReceivedLength)
#define traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiSlowID_OFFSET + apiID_XSTREAMBUFFERRECEIVE, (U32)xStreamBuffer, 0u)
#define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength ) SEGGER_SYSVIEW_RecordU32x2(apiSlowID_OFFSET + apiID_XSTREAMBUFFERRECEIVEFROMISR, (U32)xStreamBuffer, (U32)xReceivedLength)
#define traceTASK_DELETE( pxTCB ) do { \
SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKDELETE, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)); \
SYSVIEW_DeleteTask((U32)pxTCB); \
} while(0)
#if( portSTACK_GROWTH < 0 )
#define traceTASK_CREATE(pxNewTCB) if (pxNewTCB != NULL) { \
SEGGER_SYSVIEW_OnTaskCreate((U32)pxNewTCB); \
SYSVIEW_AddTask((U32)pxNewTCB, \
&(pxNewTCB->pcTaskName[0]), \
pxNewTCB->uxPriority, \
(U32)pxNewTCB->pxStack, \
((U32)pxNewTCB->pxTopOfStack - (U32)pxNewTCB->pxStack) \
); \
}
#else
#define traceTASK_CREATE(pxNewTCB) if (pxNewTCB != NULL) { \
SEGGER_SYSVIEW_OnTaskCreate((U32)pxNewTCB); \
SYSVIEW_AddTask((U32)pxNewTCB, \
&(pxNewTCB->pcTaskName[0]), \
pxNewTCB->uxPriority, \
(U32)pxNewTCB->pxStack, \
(U32)(pxNewTCB->pxStack-pxNewTCB->pxTopOfStack) \
); \
}
#endif
#define traceTASK_PRIORITY_SET(pxTask, uxNewPriority) { \
SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET+apiID_VTASKPRIORITYSET, \
SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), \
uxNewPriority \
); \
SYSVIEW_UpdateTask((U32)pxTask, \
&(pxTask->pcTaskName[0]), \
uxNewPriority, \
(U32)pxTask->pxStack, \
0 \
); \
}
//
// Define INCLUDE_xTaskGetIdleTaskHandle as 1 in FreeRTOSConfig.h to allow identification of Idle state.
//
// SMP FreeRTOS uses unpinned IDLE tasks, so sometimes IDEL0 runs on CPU1, IDLE1 runs on CPU0 and so on.
// So IDLE state detection based on 'xTaskGetIdleTaskHandle' does not work for SMP kernel.
// We could compare current task handle with every element of the array returned by 'xTaskGetIdleTaskHandle',
// but it deos not seem to be efficient enough to be worth of making code more complex and less readabl.
// So always use task name comparison mechanism for SMP kernel.
#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 && !defined(CONFIG_FREERTOS_SMP))
#define traceTASK_SWITCHED_IN() if(prvGetTCBFromHandle(NULL) == xTaskGetIdleTaskHandle()) { \
SEGGER_SYSVIEW_OnIdle(); \
} else { \
SEGGER_SYSVIEW_OnTaskStartExec((U32)prvGetTCBFromHandle(NULL)); \
}
#else
#define traceTASK_SWITCHED_IN() { \
if (memcmp(prvGetTCBFromHandle(NULL)->pcTaskName, "IDLE", 4) != 0) { \
SEGGER_SYSVIEW_OnTaskStartExec((U32)prvGetTCBFromHandle(NULL)); \
} else { \
SEGGER_SYSVIEW_OnIdle(); \
} \
}
#endif
#define traceMOVED_TASK_TO_READY_STATE(pxTCB) SEGGER_SYSVIEW_OnTaskStartReady((U32)pxTCB)
#define traceREADDED_TASK_TO_READY_STATE(pxTCB)
#define traceMOVED_TASK_TO_DELAYED_LIST() SEGGER_SYSVIEW_OnTaskStopReady((U32)prvGetTCBFromHandle(NULL), (1u << 2))
#define traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST() SEGGER_SYSVIEW_OnTaskStopReady((U32)prvGetTCBFromHandle(NULL), (1u << 2))
#define traceMOVED_TASK_TO_SUSPENDED_LIST(pxTCB) SEGGER_SYSVIEW_OnTaskStopReady((U32)pxTCB, ((3u << 3) | 3))
#define traceISR_EXIT_TO_SCHEDULER() SEGGER_SYSVIEW_RecordExitISRToScheduler()
#define traceISR_EXIT() SEGGER_SYSVIEW_RecordExitISR()
#define traceISR_ENTER(n) SEGGER_SYSVIEW_RecordEnterISR(n)
/*********************************************************************
*
* API functions
*
**********************************************************************
*/
#ifdef __cplusplus
extern "C" {
#endif
void SYSVIEW_AddTask (U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark);
void SYSVIEW_UpdateTask (U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark);
void SYSVIEW_DeleteTask (U32 xHandle);
void SYSVIEW_SendTaskInfo (U32 TaskID, const char* sName, unsigned Prio, U32 StackBase, unsigned StackSize);
#ifdef __cplusplus
}
#endif
#endif
/*************************** End of file ****************************/

View File

@@ -0,0 +1,306 @@
/*
* SPDX-FileCopyrightText: 2017-2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "string.h"
#include "freertos/FreeRTOS.h"
#include "SEGGER_RTT.h"
#include "SEGGER_SYSVIEW.h"
#include "SEGGER_SYSVIEW_Conf.h"
#include "esp_app_trace.h"
#include "esp_log.h"
#include "esp_cpu.h"
#include "esp_private/startup_internal.h"
const static char *TAG = "segger_rtt";
#define SYSVIEW_EVENTS_BUF_SZ 255U
// size of down channel data buf
#define SYSVIEW_DOWN_BUF_SIZE 32
#define SEGGER_STOP_WAIT_TMO 1000000 //us
#if CONFIG_APPTRACE_SV_BUF_WAIT_TMO == -1
#define SEGGER_HOST_WAIT_TMO ESP_APPTRACE_TMO_INFINITE
#else
#define SEGGER_HOST_WAIT_TMO CONFIG_APPTRACE_SV_BUF_WAIT_TMO
#endif
static uint8_t s_events_buf[SYSVIEW_EVENTS_BUF_SZ];
static uint16_t s_events_buf_filled;
static uint8_t s_down_buf[SYSVIEW_DOWN_BUF_SIZE];
#if CONFIG_APPTRACE_SV_DEST_UART
#define ESP_APPTRACE_DEST_SYSVIEW ESP_APPTRACE_DEST_UART
#if CONFIG_APPTRACE_SV_DEST_CPU_0 || CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE
#define APPTRACE_SV_DEST_CPU 0
#else
#define APPTRACE_SV_DEST_CPU 1
#endif // CONFIG_APPTRACE_SV_DEST_CPU_0
#elif CONFIG_APPTRACE_SV_DEST_JTAG || (CONFIG_APPTRACE_ENABLE && CONFIG_APPTRACE_DEST_UART_NONE)
#define ESP_APPTRACE_DEST_SYSVIEW ESP_APPTRACE_DEST_TRAX
#endif
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* SEGGER_RTT_ESP_FlushNoLock()
*
* Function description
* Flushes buffered events.
*
* Parameters
* min_sz Threshold for flushing data. If current filling level is above this value, data will be flushed. TRAX destinations only.
* tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinetly.
*
* Return value
* None.
*/
void SEGGER_RTT_ESP_FlushNoLock(unsigned long min_sz, unsigned long tmo)
{
esp_err_t res;
if (s_events_buf_filled > 0) {
res = esp_apptrace_write(ESP_APPTRACE_DEST_SYSVIEW, s_events_buf, s_events_buf_filled, tmo);
if (res != ESP_OK) {
ESP_LOGE(TAG, "Failed to flush buffered events (%d)!", res);
}
}
// flush even if we failed to write buffered events, because no new events will be sent after STOP
res = esp_apptrace_flush_nolock(ESP_APPTRACE_DEST_SYSVIEW, min_sz, tmo);
if (res != ESP_OK) {
ESP_LOGE(TAG, "Failed to flush apptrace data (%d)!", res);
}
s_events_buf_filled = 0;
}
/*********************************************************************
*
* SEGGER_RTT_ESP_Flush()
*
* Function description
* Flushes buffered events.
*
* Parameters
* min_sz Threshold for flushing data. If current filling level is above this value, data will be flushed. TRAX destinations only.
* tmo Timeout for operation (in us). Use ESP_APPTRACE_TMO_INFINITE to wait indefinetly.
*
* Return value
* None.
*/
void SEGGER_RTT_ESP_Flush(unsigned long min_sz, unsigned long tmo)
{
SEGGER_SYSVIEW_LOCK();
SEGGER_RTT_ESP_FlushNoLock(min_sz, tmo);
SEGGER_SYSVIEW_UNLOCK();
}
/*********************************************************************
*
* SEGGER_RTT_ReadNoLock()
*
* Function description
* Reads characters from SEGGER real-time-terminal control block
* which have been previously stored by the host.
* Do not lock against interrupts and multiple access.
*
* Parameters
* BufferIndex Index of Down-buffer to be used (e.g. 0 for "Terminal").
* pBuffer Pointer to buffer provided by target application, to copy characters from RTT-down-buffer to.
* BufferSize Size of the target application buffer.
*
* Return value
* Number of bytes that have been read.
*/
unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned BufferSize) {
uint32_t size = BufferSize;
esp_err_t res = esp_apptrace_read(ESP_APPTRACE_DEST_SYSVIEW, pData, &size, 0);
if (res != ESP_OK) {
return 0;
}
return size;
}
/*********************************************************************
*
* SEGGER_RTT_WriteSkipNoLock
*
* Function description
* Stores a specified number of characters in SEGGER RTT
* control block which is then read by the host.
* SEGGER_RTT_WriteSkipNoLock does not lock the application and
* skips all data, if the data does not fit into the buffer.
*
* Parameters
* BufferIndex Index of "Up"-buffer to be used (e.g. 0 for "Terminal").
* pBuffer Pointer to character array. Does not need to point to a \0 terminated string.
* NumBytes Number of bytes to be stored in the SEGGER RTT control block.
*
* Return value
* Number of bytes which have been stored in the "Up"-buffer.
*
* Notes
* (1) If there is not enough space in the "Up"-buffer, all data is dropped.
* (2) For performance reasons this function does not call Init()
* and may only be called after RTT has been initialized.
* Either by calling SEGGER_RTT_Init() or calling another RTT API function first.
*/
unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
uint8_t *pbuf = (uint8_t *)pBuffer;
uint8_t event_id = *pbuf;
#if CONFIG_APPTRACE_SV_DEST_UART
if (
(APPTRACE_SV_DEST_CPU != esp_cpu_get_core_id()) &&
(
(event_id == SYSVIEW_EVTID_ISR_ENTER) ||
(event_id == SYSVIEW_EVTID_ISR_EXIT) ||
(event_id == SYSVIEW_EVTID_TASK_START_EXEC) ||
(event_id == SYSVIEW_EVTID_TASK_STOP_EXEC) ||
(event_id == SYSVIEW_EVTID_TASK_START_READY) ||
(event_id == SYSVIEW_EVTID_TASK_STOP_READY) ||
(event_id == SYSVIEW_EVTID_MARK_START) ||
(event_id == SYSVIEW_EVTID_MARK_STOP) ||
(event_id == SYSVIEW_EVTID_TIMER_ENTER) ||
(event_id == SYSVIEW_EVTID_TIMER_EXIT) ||
(event_id == SYSVIEW_EVTID_STACK_INFO) ||
(event_id == SYSVIEW_EVTID_MODULEDESC)
)
){
return NumBytes;
}
// This is workaround for SystemView!
// Without this line SystemView will hangs on when heap tracing enabled.
if(event_id == SYSVIEW_EVTID_MODULEDESC){
return NumBytes;
}
#endif // CONFIG_APPTRACE_SV_DEST_UART
if (NumBytes > SYSVIEW_EVENTS_BUF_SZ) {
ESP_LOGE(TAG, "Too large event %u bytes!", NumBytes);
return 0;
}
#if CONFIG_APPTRACE_SV_DEST_JTAG
if (esp_cpu_get_core_id()) { // dual core specific code
// use the highest - 1 bit of event ID to indicate core ID
// the highest bit can not be used due to event ID encoding method
// this reduces supported ID range to [0..63] (for 1 byte IDs) plus [128..16383] (for 2 bytes IDs)
if (*pbuf & 0x80) { // 2 bytes ID
*(pbuf + 1) |= (1 << 6);
} else if (NumBytes != 10 || *pbuf != 0) { // ignore sync sequence
*pbuf |= (1 << 6);
}
}
#endif // CONFIG_APPTRACE_SV_DEST_JTAG
#if CONFIG_APPTRACE_SV_DEST_JTAG
if (s_events_buf_filled + NumBytes > SYSVIEW_EVENTS_BUF_SZ) {
esp_err_t res = esp_apptrace_write(ESP_APPTRACE_DEST_SYSVIEW, s_events_buf, s_events_buf_filled, SEGGER_HOST_WAIT_TMO);
if (res != ESP_OK) {
return 0; // skip current data buffer only, accumulated events are kept
}
s_events_buf_filled = 0;
}
#endif
memcpy(&s_events_buf[s_events_buf_filled], pBuffer, NumBytes);
s_events_buf_filled += NumBytes;
#if CONFIG_APPTRACE_SV_DEST_UART
esp_err_t res = esp_apptrace_write(ESP_APPTRACE_DEST_SYSVIEW, pBuffer, NumBytes, SEGGER_HOST_WAIT_TMO);
if (res != ESP_OK)
{
return 0; // skip current data buffer only, accumulated events are kept
}
s_events_buf_filled = 0;
#endif
if (event_id == SYSVIEW_EVTID_TRACE_STOP)
{
SEGGER_RTT_ESP_FlushNoLock(0, SEGGER_STOP_WAIT_TMO);
}
return NumBytes;
}
/*********************************************************************
*
* SEGGER_RTT_ConfigUpBuffer
*
* Function description
* Run-time configuration of a specific up-buffer (T->H).
* Buffer to be configured is specified by index.
* This includes: Buffer address, size, name, flags, ...
*
* Parameters
* BufferIndex Index of the buffer to configure.
* sName Pointer to a constant name string.
* pBuffer Pointer to a buffer to be used.
* BufferSize Size of the buffer.
* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message).
*
* Return value
* >= 0 - O.K.
* < 0 - Error
*
* Additional information
* Buffer 0 is configured on compile-time.
* May only be called once per buffer.
* Buffer name and flags can be reconfigured using the appropriate functions.
*/
int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) {
s_events_buf_filled = 0;
return 0;
}
/*********************************************************************
*
* SEGGER_RTT_ConfigDownBuffer
*
* Function description
* Run-time configuration of a specific down-buffer (H->T).
* Buffer to be configured is specified by index.
* This includes: Buffer address, size, name, flags, ...
*
* Parameters
* BufferIndex Index of the buffer to configure.
* sName Pointer to a constant name string.
* pBuffer Pointer to a buffer to be used.
* BufferSize Size of the buffer.
* Flags Operating modes. Define behavior if buffer is full (not enough space for entire message).
*
* Return value
* >= 0 O.K.
* < 0 Error
*
* Additional information
* Buffer 0 is configured on compile-time.
* May only be called once per buffer.
* Buffer name and flags can be reconfigured using the appropriate functions.
*/
int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* pBuffer, unsigned BufferSize, unsigned Flags) {
esp_apptrace_down_buffer_config(s_down_buf, sizeof(s_down_buf));
return 0;
}
/*************************** Init hook ****************************
*
* This init function is placed here because this port file will be
* linked whenever SystemView is used.
*/
ESP_SYSTEM_INIT_FN(sysview_init, SECONDARY, BIT(0), 120)
{
SEGGER_SYSVIEW_Conf();
return ESP_OK;
}
/*************************** End of file ****************************/

View File

@@ -0,0 +1,92 @@
/*
* SPDX-FileCopyrightText: 2018-2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdint.h>
#include <sdkconfig.h>
#include "SEGGER_SYSVIEW.h"
#include "SEGGER_RTT.h"
#include "esp_app_trace.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
const static char *TAG = "sysview_heap_trace";
#ifdef CONFIG_HEAP_TRACING_STACK_DEPTH
#define CALLSTACK_SIZE CONFIG_HEAP_TRACING_STACK_DEPTH
#else
#define CALLSTACK_SIZE 0
#endif
static SEGGER_SYSVIEW_MODULE s_esp_sysview_heap_module = {
.sModule = "M=ESP32 SystemView Heap Tracing Module",
.NumEvents = 2,
};
static bool s_mod_registered;
esp_err_t esp_sysview_heap_trace_start(uint32_t tmo)
{
uint32_t tmo_ticks = tmo/(1000*portTICK_PERIOD_MS);
ESP_EARLY_LOGV(TAG, "%s", __func__);
do {
if (tmo != (uint32_t)-1) {
// Currently timeout implementation is simple and has granularity of 1 OS tick,
// so just count down the number of times to call vTaskDelay
if (tmo_ticks-- == 0) {
return ESP_ERR_TIMEOUT;
}
}
vTaskDelay(1);
} while(!SEGGER_SYSVIEW_Started());
SEGGER_SYSVIEW_RegisterModule(&s_esp_sysview_heap_module);
s_mod_registered = true;
return ESP_OK;
}
esp_err_t esp_sysview_heap_trace_stop(void)
{
ESP_EARLY_LOGV(TAG, "%s", __func__);
SEGGER_RTT_ESP_Flush(0, ESP_APPTRACE_TMO_INFINITE);
return ESP_OK;
}
void esp_sysview_heap_trace_alloc(const void *addr, uint32_t size, const void *callers)
{
U8 aPacket[SEGGER_SYSVIEW_INFO_SIZE + (2+CALLSTACK_SIZE)*SEGGER_SYSVIEW_QUANTA_U32];
U8* pPayload = SEGGER_SYSVIEW_PREPARE_PACKET(aPacket);
U32 *calls = (U32 *)callers;
if (!s_mod_registered) {
return;
}
ESP_EARLY_LOGV(TAG, "%s %p %lu", __func__, addr, size);
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, (U32)addr);
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, size);
for (int i = 0; i < CALLSTACK_SIZE; i++) {
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, calls[i]);
}
SEGGER_SYSVIEW_SendPacket(&aPacket[0], pPayload, s_esp_sysview_heap_module.EventOffset + 0);
}
void esp_sysview_heap_trace_free(const void *addr, const void *callers)
{
U8 aPacket[SEGGER_SYSVIEW_INFO_SIZE + (1+CALLSTACK_SIZE)*SEGGER_SYSVIEW_QUANTA_U32];
U8* pPayload = SEGGER_SYSVIEW_PREPARE_PACKET(aPacket);
U32 *calls = (U32 *)callers;
if (!s_mod_registered) {
return;
}
ESP_EARLY_LOGV(TAG, "%s %p", __func__, addr);
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, (U32)addr);
for (int i = 0; i < CALLSTACK_SIZE; i++) {
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, calls[i]);
}
SEGGER_SYSVIEW_SendPacket(&aPacket[0], pPayload, s_esp_sysview_heap_module.EventOffset + 1);
}

View File

@@ -0,0 +1,26 @@
/*
* SPDX-FileCopyrightText: 2018-2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdio.h>
#include <stdarg.h>
#include <sdkconfig.h>
#include "SEGGER_SYSVIEW_Int.h"
#include "freertos/FreeRTOS.h"
static portMUX_TYPE s_log_mutex = portMUX_INITIALIZER_UNLOCKED;
int esp_sysview_vprintf(const char * format, va_list args)
{
static char log_buffer[SEGGER_SYSVIEW_MAX_STRING_LEN];
portENTER_CRITICAL(&s_log_mutex);
size_t len = vsnprintf(log_buffer, sizeof(log_buffer), format, args);
if (len > sizeof(log_buffer) - 1) {
log_buffer[sizeof(log_buffer) - 1] = 0;
}
SEGGER_SYSVIEW_Print(log_buffer);
portEXIT_CRITICAL(&s_log_mutex);
return len;
}

View File

@@ -2,9 +2,12 @@
components/app_trace/test_apps:
depends_components:
- esp_trace
- esp_driver_gptimer
- app_trace
- esp_timer
- soc
- driver
- esp_hw_support
disable:
- if: IDF_TARGET in ["esp32h21", "esp32h4"]
- if: IDF_TARGET in ["esp32c5", "esp32c61"]
temporary: true
reason: not support yet # TODO: [ESP32H21] IDF-11539 [ESP32H4] IDF-12325
reason: not support yet # TODO: [ESP32C5] IDF-8705, [ESP32C61] IDF-9306

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.22)
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(COMPONENTS main)

View File

@@ -1,5 +1,5 @@
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 |
| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- |
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 |
| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
# app_trace test
@@ -8,4 +8,9 @@ To build and run this test app for app_trace related tests:
IDF_TARGET=esp32 idf.py @app_trace build flash monitor
```
`@app_trace` argument apply additional `idf.py` options, from [app_trace](app_trace) and file.
To build and run this test app for SystemView related tests:
```bash
IDF_TARGET=esp32 idf.py @sysview build flash monitor
```
`@app_trace` and `@sysview` arguments apply additional `idf.py` options, from [app_trace](app_trace) and [sysview](sysview) files.

View File

@@ -1,4 +1,4 @@
idf_component_register(SRCS "test_app_trace_main.c" "test_trace.c"
INCLUDE_DIRS "."
PRIV_REQUIRES esp_trace unity esp_driver_gptimer
PRIV_REQUIRES app_trace unity esp_driver_gptimer
WHOLE_ARCHIVE)

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -16,16 +16,17 @@
#include "freertos/FreeRTOS.h"
#include "freertos/semphr.h"
#include "freertos/task.h"
#include "esp_app_trace.h"
#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
#include "esp_log.h"
#include "esp_app_trace.h"
#include "esp_app_trace_util.h"
#define ESP_APPTRACE_TEST_USE_PRINT_LOCK 0
#define ESP_APPTRACE_TEST_PRN_WRERR_MAX 5
#define ESP_APPTRACE_TEST_BLOCKS_BEFORE_CRASH 100
#define ESP_APPTRACE_TEST_BLOCK_SIZE 1024
#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
#include "esp_log.h"
const static char *TAG = "esp_apptrace_test";
#if ESP_APPTRACE_TEST_USE_PRINT_LOCK == 1
@@ -65,9 +66,10 @@ const static char *TAG = "esp_apptrace_test";
#define ESP_APPTRACE_TEST_LOGV( format, ... ) ESP_APPTRACE_TEST_LOG_LEVEL(V, ESP_LOG_VERBOSE, format, ##__VA_ARGS__)
#define ESP_APPTRACE_TEST_LOGO( format, ... ) ESP_APPTRACE_TEST_LOG_LEVEL(E, ESP_LOG_NONE, format, ##__VA_ARGS__)
#define ESP_APPTRACE_TEST_WRITE(_b_, _s_) esp_apptrace_write(_b_, _s_, ESP_APPTRACE_TMO_INFINITE)
#define ESP_APPTRACE_TEST_WRITE_FROM_ISR(_b_, _s_) esp_apptrace_write(_b_, _s_, 0UL)
#define ESP_APPTRACE_TEST_WRITE_NOWAIT(_b_, _s_) esp_apptrace_write(_b_, _s_, 0)
#if CONFIG_APPTRACE_SV_ENABLE == 0
#define ESP_APPTRACE_TEST_WRITE(_b_, _s_) esp_apptrace_write(ESP_APPTRACE_DEST_TRAX, _b_, _s_, ESP_APPTRACE_TMO_INFINITE)
#define ESP_APPTRACE_TEST_WRITE_FROM_ISR(_b_, _s_) esp_apptrace_write(ESP_APPTRACE_DEST_TRAX, _b_, _s_, 0UL)
#define ESP_APPTRACE_TEST_WRITE_NOWAIT(_b_, _s_) esp_apptrace_write(ESP_APPTRACE_DEST_TRAX, _b_, _s_, 0)
typedef struct {
uint8_t *buf;
@@ -623,7 +625,7 @@ static int esp_logtrace_printf(const char *fmt, ...)
va_start(ap, fmt);
int ret = esp_apptrace_vprintf_to(ESP_APPTRACE_TMO_INFINITE, fmt, ap);
int ret = esp_apptrace_vprintf_to(ESP_APPTRACE_DEST_TRAX, ESP_APPTRACE_TMO_INFINITE, fmt, ap);
va_end(ap);
@@ -655,7 +657,7 @@ static void esp_logtrace_task(void *p)
break;
}
}
esp_err_t ret = esp_apptrace_flush(ESP_APPTRACE_TMO_INFINITE);
esp_err_t ret = esp_apptrace_flush(ESP_APPTRACE_DEST_TRAX, ESP_APPTRACE_TMO_INFINITE);
if (ret != ESP_OK) {
ESP_APPTRACE_TEST_LOGE("Failed to flush printf buf (%d)!", ret);
}
@@ -692,3 +694,233 @@ TEST_CASE("Log trace test (2 tasks)", "[trace][ignore]")
xSemaphoreTake(arg2.done, portMAX_DELAY);
vSemaphoreDelete(arg2.done);
}
#else // #if CONFIG_APPTRACE_SV_ENABLE == 0
typedef struct {
gptimer_handle_t gptimer;
uint32_t period;
int flags;
uint32_t id;
} esp_sysviewtrace_timer_arg_t;
typedef struct {
SemaphoreHandle_t done;
SemaphoreHandle_t *sync;
esp_sysviewtrace_timer_arg_t *timer;
uint32_t work_count;
uint32_t sleep_tmo;
uint32_t id;
} esp_sysviewtrace_task_arg_t;
static bool esp_sysview_test_timer_isr(gptimer_handle_t timer, const gptimer_alarm_event_data_t *edata, void *user_ctx)
{
esp_sysviewtrace_timer_arg_t *tim_arg = (esp_sysviewtrace_timer_arg_t *)user_ctx;
(void) tim_arg;
return false;
}
static void esp_sysviewtrace_test_task(void *p)
{
esp_sysviewtrace_task_arg_t *arg = (esp_sysviewtrace_task_arg_t *) p;
volatile uint32_t tmp = 0;
printf("%p: run sysview task\n", xTaskGetCurrentTaskHandle());
if (arg->timer) {
gptimer_alarm_config_t alarm_config = {
.reload_count = 0,
.alarm_count = arg->timer->period,
.flags.auto_reload_on_alarm = true,
};
gptimer_event_callbacks_t cbs = {
.on_alarm = esp_sysview_test_timer_isr,
};
TEST_ESP_OK(gptimer_register_event_callbacks(arg->timer->gptimer, &cbs, arg->timer));
TEST_ESP_OK(gptimer_enable(arg->timer->gptimer));
TEST_ESP_OK(gptimer_set_alarm_action(arg->timer->gptimer, &alarm_config));
TEST_ESP_OK(gptimer_start(arg->timer->gptimer));
}
int i = 0;
while (1) {
static uint32_t count;
printf("%" PRIu32, arg->id);
if ((++count % 80) == 0) {
printf("\n");
}
if (arg->sync) {
xSemaphoreTake(*arg->sync, portMAX_DELAY);
}
for (uint32_t k = 0; k < arg->work_count; k++) {
tmp++;
}
vTaskDelay(arg->sleep_tmo / portTICK_PERIOD_MS);
i++;
if (arg->sync) {
xSemaphoreGive(*arg->sync);
}
}
ESP_APPTRACE_TEST_LOGI("%p: finished", xTaskGetCurrentTaskHandle());
xSemaphoreGive(arg->done);
vTaskDelay(1);
vTaskDelete(NULL);
}
TEST_CASE("SysView trace test 1", "[trace][ignore]")
{
TaskHandle_t thnd;
esp_sysviewtrace_timer_arg_t tim_arg1 = {
.flags = ESP_INTR_FLAG_SHARED,
.id = 0,
.period = 500,
};
esp_sysviewtrace_task_arg_t arg1 = {
.done = xSemaphoreCreateBinary(),
.sync = NULL,
.work_count = 10000,
.sleep_tmo = 1,
.timer = &tim_arg1,
.id = 0,
};
esp_sysviewtrace_timer_arg_t tim_arg2 = {
.flags = 0,
.id = 1,
.period = 100,
};
esp_sysviewtrace_task_arg_t arg2 = {
.done = xSemaphoreCreateBinary(),
.sync = NULL,
.work_count = 10000,
.sleep_tmo = 1,
.timer = &tim_arg2,
.id = 1,
};
gptimer_config_t timer_config = {
.clk_src = GPTIMER_CLK_SRC_DEFAULT,
.direction = GPTIMER_COUNT_UP,
.resolution_hz = 1000000,
};
timer_config.flags.intr_shared = (tim_arg1.flags & ESP_INTR_FLAG_SHARED) == ESP_INTR_FLAG_SHARED;
TEST_ESP_OK(gptimer_new_timer(&timer_config, &tim_arg1.gptimer));
timer_config.flags.intr_shared = (tim_arg2.flags & ESP_INTR_FLAG_SHARED) == ESP_INTR_FLAG_SHARED;
TEST_ESP_OK(gptimer_new_timer(&timer_config, &tim_arg2.gptimer));
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svtrace0", 2048, &arg1, 3, &thnd, 0);
ESP_APPTRACE_TEST_LOGI("Created task %p", thnd);
#if CONFIG_FREERTOS_UNICORE == 0
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svtrace1", 2048, &arg2, 5, &thnd, 1);
#else
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svtrace1", 2048, &arg2, 5, &thnd, 0);
#endif
ESP_APPTRACE_TEST_LOGI("Created task %p", thnd);
xSemaphoreTake(arg1.done, portMAX_DELAY);
vSemaphoreDelete(arg1.done);
xSemaphoreTake(arg2.done, portMAX_DELAY);
vSemaphoreDelete(arg2.done);
TEST_ESP_OK(gptimer_stop(tim_arg1.gptimer));
TEST_ESP_OK(gptimer_disable(tim_arg1.gptimer));
TEST_ESP_OK(gptimer_del_timer(tim_arg1.gptimer));
TEST_ESP_OK(gptimer_stop(tim_arg2.gptimer));
TEST_ESP_OK(gptimer_disable(tim_arg2.gptimer));
TEST_ESP_OK(gptimer_del_timer(tim_arg2.gptimer));
}
TEST_CASE("SysView trace test 2", "[trace][ignore]")
{
TaskHandle_t thnd;
esp_sysviewtrace_timer_arg_t tim_arg1 = {
.flags = ESP_INTR_FLAG_SHARED,
.id = 0,
.period = 500,
};
esp_sysviewtrace_task_arg_t arg1 = {
.done = xSemaphoreCreateBinary(),
.sync = NULL,
.work_count = 10000,
.sleep_tmo = 1,
.timer = &tim_arg1,
.id = 0,
};
esp_sysviewtrace_timer_arg_t tim_arg2 = {
.flags = 0,
.id = 1,
.period = 100,
};
esp_sysviewtrace_task_arg_t arg2 = {
.done = xSemaphoreCreateBinary(),
.sync = NULL,
.work_count = 10000,
.sleep_tmo = 1,
.timer = &tim_arg2,
.id = 1,
};
SemaphoreHandle_t test_sync = xSemaphoreCreateBinary();
xSemaphoreGive(test_sync);
esp_sysviewtrace_task_arg_t arg3 = {
.done = xSemaphoreCreateBinary(),
.sync = &test_sync,
.work_count = 1000,
.sleep_tmo = 1,
.timer = NULL,
.id = 2,
};
esp_sysviewtrace_task_arg_t arg4 = {
.done = xSemaphoreCreateBinary(),
.sync = &test_sync,
.work_count = 10000,
.sleep_tmo = 1,
.timer = NULL,
.id = 3,
};
gptimer_config_t timer_config = {
.clk_src = GPTIMER_CLK_SRC_DEFAULT,
.direction = GPTIMER_COUNT_UP,
.resolution_hz = 1000000,
};
timer_config.flags.intr_shared = (tim_arg1.flags & ESP_INTR_FLAG_SHARED) == ESP_INTR_FLAG_SHARED;
TEST_ESP_OK(gptimer_new_timer(&timer_config, &tim_arg1.gptimer));
timer_config.flags.intr_shared = (tim_arg2.flags & ESP_INTR_FLAG_SHARED) == ESP_INTR_FLAG_SHARED;
TEST_ESP_OK(gptimer_new_timer(&timer_config, &tim_arg2.gptimer));
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svtrace0", 2048, &arg1, 3, &thnd, 0);
printf("Created task %p\n", thnd);
#if CONFIG_FREERTOS_UNICORE == 0
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svtrace1", 2048, &arg2, 4, &thnd, 1);
#else
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svtrace1", 2048, &arg2, 4, &thnd, 0);
#endif
printf("Created task %p\n", thnd);
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svsync0", 2048, &arg3, 3, &thnd, 0);
printf("Created task %p\n", thnd);
#if CONFIG_FREERTOS_UNICORE == 0
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svsync1", 2048, &arg4, 5, &thnd, 1);
#else
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svsync1", 2048, &arg4, 5, &thnd, 0);
#endif
printf("Created task %p\n", thnd);
xSemaphoreTake(arg1.done, portMAX_DELAY);
vSemaphoreDelete(arg1.done);
xSemaphoreTake(arg2.done, portMAX_DELAY);
vSemaphoreDelete(arg2.done);
xSemaphoreTake(arg3.done, portMAX_DELAY);
vSemaphoreDelete(arg3.done);
xSemaphoreTake(arg4.done, portMAX_DELAY);
vSemaphoreDelete(arg4.done);
vSemaphoreDelete(test_sync);
TEST_ESP_OK(gptimer_stop(tim_arg1.gptimer));
TEST_ESP_OK(gptimer_disable(tim_arg1.gptimer));
TEST_ESP_OK(gptimer_del_timer(tim_arg1.gptimer));
TEST_ESP_OK(gptimer_stop(tim_arg2.gptimer));
TEST_ESP_OK(gptimer_disable(tim_arg2.gptimer));
TEST_ESP_OK(gptimer_del_timer(tim_arg2.gptimer));
}
#endif // #if CONFIG_APPTRACE_SV_ENABLE == 0

View File

@@ -1,3 +1 @@
CONFIG_ESP_TRACE_LIB_NONE=y
CONFIG_ESP_TRACE_TRANSPORT_APPTRACE=y
CONFIG_APPTRACE_DEST_JTAG=y
# app_trace is already enabled by sdkconfig.defaults, so no options are needed here

View File

@@ -0,0 +1 @@
CONFIG_APPTRACE_SV_ENABLE=y

View File

@@ -1,2 +1,2 @@
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n
CONFIG_ESP_TRACE_ENABLE=y
CONFIG_APPTRACE_DEST_JTAG=y

Some files were not shown because too many files have changed in this diff Show More