Skip to content

Commit 4557316

Browse files
authored
Merge branch 'espressif:master' into master
2 parents 787b08b + 6c04a93 commit 4557316

File tree

23 files changed

+591
-415
lines changed

23 files changed

+591
-415
lines changed

Diff for: .github/scripts/set_push_chunks.sh

+90-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,93 @@
22

33
build_all=false
44
chunks_count=0
5+
last_check_files=""
6+
last_check_result=""
7+
gh_output=""
8+
9+
# Define the file patterns
10+
core_files=(
11+
'\.github/.*'
12+
'cores/.*'
13+
'package/.*'
14+
'tools/.*'
15+
'platform\.txt'
16+
'programmers\.txt'
17+
'variants/esp32/.*'
18+
'variants/esp32c3/.*'
19+
'variants/esp32c6/.*'
20+
'variants/esp32h2/.*'
21+
'variants/esp32p4/.*'
22+
'variants/esp32s2/.*'
23+
'variants/esp32s3/.*'
24+
)
25+
library_files=(
26+
'libraries/.*/examples/.*'
27+
'libraries/.*/src/.*'
28+
)
29+
networking_files=(
30+
'libraries/Network/src/.*'
31+
)
32+
fs_files=(
33+
'libraries/FS/src/.*'
34+
)
35+
static_sketches_files=(
36+
'libraries/NetworkClientSecure/examples/WiFiClientSecure/WiFiClientSecure\.ino'
37+
'libraries/BLE/examples/Server/Server\.ino'
38+
'libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer\.ino'
39+
'libraries/Insights/examples/MinimalDiagnostics/MinimalDiagnostics\.ino'
40+
'libraries/NetworkClientSecure/src/.*'
41+
'libraries/BLE/src/.*'
42+
'libraries/Insights/src/.*'
43+
)
44+
idf_files=(
45+
'idf_component\.yml'
46+
'Kconfig\.projbuild'
47+
'CMakeLists\.txt'
48+
'variants/esp32c2/.*'
49+
)
50+
51+
# Function to check if any files match the patterns
52+
check_files() {
53+
local patterns=("$@")
54+
local files_found=""
55+
for pattern in "${patterns[@]}"; do
56+
echo "Checking pattern: $pattern"
57+
matched_files=$(echo "$gh_output" | grep -E "$pattern")
58+
echo "matched_files: $matched_files"
59+
files_found+="$matched_files "
60+
done
61+
62+
last_check_files=$(echo "$files_found" | xargs)
63+
if [[ -n $last_check_files ]]; then
64+
last_check_result="true"
65+
else
66+
last_check_result="false"
67+
fi
68+
echo "last_check_result: $last_check_result"
69+
}
70+
71+
if [[ $IS_PR != 'true' ]]; then
72+
gh_output=$(gh api repos/espressif/arduino-esp32/commits/"$GITHUB_SHA" --jq '.files[].filename')
73+
else
74+
gh_output=$(gh pr diff "$PR_NUM" --name-only)
75+
fi
76+
echo "gh_output: $gh_output"
77+
78+
# Output the results
79+
check_files "${core_files[@]}"
80+
CORE_CHANGED=$last_check_result
81+
check_files "${library_files[@]}"
82+
LIB_CHANGED=$last_check_result
83+
LIB_FILES=$last_check_files
84+
check_files "${networking_files[@]}"
85+
NETWORKING_CHANGED=$last_check_result
86+
check_files "${fs_files[@]}"
87+
FS_CHANGED=$last_check_result
88+
check_files "${static_sketches_files[@]}"
89+
STATIC_SKETCHES_CHANGED=$last_check_result
90+
check_files "${idf_files[@]}"
91+
IDF_CHANGED=$last_check_result
592

693
if [[ $CORE_CHANGED == 'true' ]] || [[ $IS_PR != 'true' ]]; then
794
echo "Core files changed or not a PR. Building all."
@@ -76,9 +163,9 @@ chunks+="]"
76163

77164
{
78165
echo "build_all=$build_all"
79-
echo "build_libraries=$BUILD_LIBRARIES"
80-
echo "build_static_sketches=$BUILD_STATIC_SKETCHES"
81-
echo "build_idf=$BUILD_IDF"
166+
echo "build_libraries=$LIB_CHANGED"
167+
echo "build_static_sketches=$STATIC_SKETCHES_CHANGED"
168+
echo "build_idf=$IDF_CHANGED"
82169
echo "chunk_count=$chunks_count"
83170
echo "chunks=$chunks"
84171
} >> "$GITHUB_OUTPUT"

Diff for: .github/workflows/build_py_tools.yml

+9-9
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,16 @@ jobs:
3030
echo "Make sure you are using a branch inside the repository and not a fork."
3131
3232
- name: Verify Python Tools Changed
33-
uses: tj-actions/changed-files@v41
3433
id: verify-changed-files
35-
with:
36-
fetch_depth: "2"
37-
since_last_remote_commit: "true"
38-
files: |
39-
tools/get.py
40-
tools/espota.py
41-
tools/gen_esp32part.py
42-
tools/gen_insights_package.py
34+
run: |
35+
CHANGED_FILES=$(git diff-tree --no-commit-id --name-only -r ^HEAD -- tools/get.py tools/espota.py tools/gen_esp32part.py tools/gen_insights_package.py | xargs)
36+
echo "all_changed_files=$CHANGED_FILES" >> $GITHUB_OUTPUT
37+
if [ -n "$CHANGED_FILES" ]; then
38+
echo "any_changed=true" >> $GITHUB_OUTPUT
39+
else
40+
echo "any_changed=false" >> $GITHUB_OUTPUT
41+
fi
42+
4343
- name: List all changed files
4444
shell: bash
4545
run: |

Diff for: .github/workflows/pre-commit.yml

+16-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,22 @@ jobs:
5858

5959
- name: Get changed files
6060
id: changed-files
61-
uses: tj-actions/[email protected]
61+
env:
62+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
63+
PR_NUM: ${{ github.event.pull_request.number }}
64+
IS_PR: ${{ github.event_name == 'pull_request' }}
65+
GITHUB_SHA: ${{ github.sha }}
66+
run: |
67+
if [[ $IS_PR != 'true' ]]; then
68+
files_changed=$(gh api repos/espressif/arduino-esp32/commits/"$GITHUB_SHA" --jq '.files[].filename' | xargs)
69+
else
70+
files_changed=$(gh pr diff "$PR_NUM" --name-only | xargs)
71+
fi
72+
echo "all_changed_files=$files_changed" >> $GITHUB_OUTPUT
73+
echo "Changed files:"
74+
for file in $files_changed; do
75+
echo " $file"
76+
done
6277
6378
- name: Run pre-commit hooks in changed files
6479
run: pre-commit run --color=always --show-diff-on-failure --files ${{ steps.changed-files.outputs.all_changed_files }}

Diff for: .github/workflows/push.yml

+5-49
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,13 @@ on:
4545
- "!.github/scripts/tests_*"
4646
- "!.github/scripts/upload_*"
4747
- "variants/esp32/**/*"
48-
- "variants/esp32s2/**/*"
49-
- "variants/esp32s3/**/*"
5048
- "variants/esp32c2/**/*"
5149
- "variants/esp32c3/**/*"
5250
- "variants/esp32c6/**/*"
5351
- "variants/esp32h2/**/*"
52+
- "variants/esp32p4/**/*"
53+
- "variants/esp32s2/**/*"
54+
- "variants/esp32s3/**/*"
5455

5556
concurrency:
5657
group: build-${{github.event.pull_request.number || github.ref}}
@@ -85,58 +86,13 @@ jobs:
8586
with:
8687
fetch-depth: 2
8788

88-
- name: Get changed files
89-
id: changed-files
90-
uses: tj-actions/changed-files@v44
91-
with:
92-
files_yaml: |
93-
core:
94-
- '.github/**'
95-
- 'cores/**'
96-
- 'package/**'
97-
- 'tools/**'
98-
- 'platform.txt'
99-
- 'programmers.txt'
100-
- "variants/esp32/**/*"
101-
- "variants/esp32s2/**/*"
102-
- "variants/esp32s3/**/*"
103-
- "variants/esp32c3/**/*"
104-
- "variants/esp32c6/**/*"
105-
- "variants/esp32h2/**/*"
106-
libraries:
107-
- 'libraries/**/examples/**'
108-
- 'libraries/**/src/**'
109-
networking:
110-
- 'libraries/Network/src/**'
111-
fs:
112-
- 'libraries/FS/src/**'
113-
static_sketeches:
114-
- 'libraries/NetworkClientSecure/examples/WiFiClientSecure/WiFiClientSecure.ino'
115-
- 'libraries/BLE/examples/Server/Server.ino'
116-
- 'libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer.ino'
117-
- 'libraries/Insights/examples/MinimalDiagnostics/MinimalDiagnostics.ino'
118-
- 'libraries/NetworkClientSecure/src/**'
119-
- 'libraries/BLE/src/**'
120-
- 'libraries/Insights/src/**'
121-
idf:
122-
- 'idf_component.yml'
123-
- 'Kconfig.projbuild'
124-
- 'CMakeLists.txt'
125-
- "variants/esp32c2/**/*"
126-
12789
- name: Set chunks
12890
id: set-chunks
12991
env:
130-
LIB_FILES: ${{ steps.changed-files.outputs.libraries_all_changed_files }}
13192
IS_PR: ${{ github.event_name == 'pull_request' }}
93+
PR_NUM: ${{ github.event.pull_request.number }}
13294
MAX_CHUNKS: ${{ env.MAX_CHUNKS }}
133-
BUILD_IDF: ${{ steps.changed-files.outputs.idf_any_changed == 'true' }}
134-
BUILD_LIBRARIES: ${{ steps.changed-files.outputs.libraries_any_changed == 'true' }}
135-
BUILD_STATIC_SKETCHES: ${{ steps.changed-files.outputs.static_sketeches_any_changed == 'true' }}
136-
FS_CHANGED: ${{ steps.changed-files.outputs.fs_any_changed == 'true' }}
137-
NETWORKING_CHANGED: ${{ steps.changed-files.outputs.networking_any_changed == 'true' }}
138-
CORE_CHANGED: ${{ steps.changed-files.outputs.core_any_changed == 'true' }}
139-
LIB_CHANGED: ${{ steps.changed-files.outputs.libraries_any_changed == 'true' }}
95+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
14096
run: |
14197
bash ./.github/scripts/set_push_chunks.sh
14298

Diff for: README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Arduino core for the ESP32, ESP32-P4, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6 and ESP32-H2
1+
# Arduino core for the ESP32, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-P4, ESP32-S2 and ESP32-S3.
22

33
[![Build Status](https://img.shields.io/github/actions/workflow/status/espressif/arduino-esp32/push.yml?branch=master&event=push&label=Compilation%20Tests)](https://github.com/espressif/arduino-esp32/actions/workflows/push.yml?query=branch%3Amaster+event%3Apush)
44
[![Verbose Build Status](https://img.shields.io/github/actions/workflow/status/espressif/arduino-esp32/push.yml?branch=master&event=schedule&label=Compilation%20Tests%20(Verbose))](https://github.com/espressif/arduino-esp32/actions/workflows/push.yml?query=branch%3Amaster+event%3Aschedule)
@@ -67,16 +67,17 @@ Here are the ESP32 series supported by the Arduino-ESP32 project:
6767
| **SoC** | **Stable** | **Development** | **Datasheet** |
6868
|----------|:----------:|:---------------:|:-------------------------------------------------------------------------------------------------:|
6969
| ESP32 | Yes | Yes | [ESP32](https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf) |
70-
| ESP32-S2 | Yes | Yes | [ESP32-S2](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) |
7170
| ESP32-C3 | Yes | Yes | [ESP32-C3](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf) |
72-
| ESP32-S3 | Yes | Yes | [ESP32-S3](https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf) |
7371
| ESP32-C6 | Yes | Yes | [ESP32-C6](https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf) |
7472
| ESP32-H2 | Yes | Yes | [ESP32-H2](https://www.espressif.com/sites/default/files/documentation/esp32-h2_datasheet_en.pdf) |
7573
| ESP32-P4 | Yes | Yes | [ESP32-P4](https://www.espressif.com/sites/default/files/documentation/esp32-p4_datasheet_en.pdf) |
74+
| ESP32-S2 | Yes | Yes | [ESP32-S2](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) |
75+
| ESP32-S3 | Yes | Yes | [ESP32-S3](https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf) |
7676

7777
> [!NOTE]
78-
> ESP32-C2 is also supported by Arduino-ESP32 but requires rebuilding the static libraries. This is not trivial and requires a good understanding of the ESP-IDF
79-
> build system. For more information, see the [Lib Builder documentation](https://docs.espressif.com/projects/arduino-esp32/en/latest/lib_builder.html).
78+
> ESP32-C2 is also supported by Arduino-ESP32 but requires using Arduino as an ESP-IDF component or rebuilding the static libraries.
79+
> For more information, see the [Arduino as an ESP-IDF component documentation](https://docs.espressif.com/projects/arduino-esp32/en/latest/esp-idf_component.html) or the
80+
> [Lib Builder documentation](https://docs.espressif.com/projects/arduino-esp32/en/latest/lib_builder.html), respectively.
8081
8182
For more details visit the [supported chips](https://docs.espressif.com/projects/arduino-esp32/en/latest/getting_started.html#supported-soc-s) documentation page.
8283

Diff for: boards.txt

+6
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,9 @@ esp32s3.menu.PartitionScheme.app5M_fat24M_32MB.upload.maximum_size=4718592
940940
esp32s3.menu.PartitionScheme.app5M_little24M_32MB=32M Flash (4.8MB APP/22MB LittleFS)
941941
esp32s3.menu.PartitionScheme.app5M_little24M_32MB.build.partitions=large_littlefs_32MB
942942
esp32s3.menu.PartitionScheme.app5M_little24M_32MB.upload.maximum_size=4718592
943+
esp32s3.menu.PartitionScheme.app13M_data7M_32MB=32M Flash (13MB APP/6.75MB SPIFFS)
944+
esp32s3.menu.PartitionScheme.app13M_data7M_32MB.build.partitions=default_32MB
945+
esp32s3.menu.PartitionScheme.app13M_data7M_32MB.upload.maximum_size=13107200
943946
esp32s3.menu.PartitionScheme.esp_sr_16=ESP SR 16M (3MB APP/7MB SPIFFS/2.9MB MODEL)
944947
esp32s3.menu.PartitionScheme.esp_sr_16.upload.maximum_size=3145728
945948
esp32s3.menu.PartitionScheme.esp_sr_16.upload.extra_flags=0xD10000 {build.path}/srmodels.bin
@@ -2148,6 +2151,9 @@ esp32s3-octal.menu.PartitionScheme.app5M_fat24M_32MB.upload.maximum_size=4718592
21482151
esp32s3-octal.menu.PartitionScheme.app5M_little24M_32MB=32M Flash (4.8MB APP/22MB LittleFS)
21492152
esp32s3-octal.menu.PartitionScheme.app5M_little24M_32MB.build.partitions=large_littlefs_32MB
21502153
esp32s3-octal.menu.PartitionScheme.app5M_little24M_32MB.upload.maximum_size=4718592
2154+
esp32s3-octal.menu.PartitionScheme.app13M_data7M_32MB=32M Flash (13MB APP/6.75MB SPIFFS)
2155+
esp32s3-octal.menu.PartitionScheme.app13M_data7M_32MB.build.partitions=default_32MB
2156+
esp32s3-octal.menu.PartitionScheme.app13M_data7M_32MB.upload.maximum_size=13107200
21512157

21522158
esp32s3-octal.menu.CPUFreq.240=240MHz (WiFi)
21532159
esp32s3-octal.menu.CPUFreq.240.build.f_cpu=240000000L

Diff for: cores/esp32/esp32-hal-uart.c

+34-13
Original file line numberDiff line numberDiff line change
@@ -585,17 +585,11 @@ uart_t *uartBegin(
585585
uartEnd(uart_nr);
586586
} else {
587587
bool retCode = true;
588-
UART_MUTEX_LOCK();
589588
//User may just want to change some parameters, such as baudrate, data length, parity, stop bits or pins
590589
if (uart->_baudrate != baudrate) {
591-
if (ESP_OK != uart_set_baudrate(uart_nr, baudrate)) {
592-
log_e("UART%d changing baudrate failed.", uart_nr);
593-
retCode = false;
594-
} else {
595-
log_v("UART%d changed baudrate to %d", uart_nr, baudrate);
596-
uart->_baudrate = baudrate;
597-
}
590+
retCode = uartSetBaudRate(uart, baudrate);
598591
}
592+
UART_MUTEX_LOCK();
599593
uart_word_length_t data_bits = (config & 0xc) >> 2;
600594
uart_parity_t parity = config & 0x3;
601595
uart_stop_bits_t stop_bits = (config & 0x30) >> 4;
@@ -763,7 +757,11 @@ bool uartSetRxTimeout(uart_t *uart, uint8_t numSymbTimeout) {
763757
if (uart == NULL) {
764758
return false;
765759
}
766-
760+
uint16_t maxRXTimeout = uart_get_max_rx_timeout(uart->num);
761+
if (numSymbTimeout > maxRXTimeout) {
762+
log_e("Invalid RX Timeout value, its limit is %d", maxRXTimeout);
763+
return false;
764+
}
767765
UART_MUTEX_LOCK();
768766
bool retCode = (ESP_OK == uart_set_rx_timeout(uart->num, numSymbTimeout));
769767
UART_MUTEX_UNLOCK();
@@ -972,10 +970,11 @@ void uartFlushTxOnly(uart_t *uart, bool txOnly) {
972970
UART_MUTEX_UNLOCK();
973971
}
974972

975-
void uartSetBaudRate(uart_t *uart, uint32_t baud_rate) {
973+
bool uartSetBaudRate(uart_t *uart, uint32_t baud_rate) {
976974
if (uart == NULL) {
977-
return;
975+
return false;
978976
}
977+
bool retCode = true;
979978
UART_MUTEX_LOCK();
980979
#if SOC_UART_SUPPORT_XTAL_CLK // ESP32-S3, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-H2 and ESP32-P4
981980
soc_module_clk_t newClkSrc = UART_SCLK_XTAL;
@@ -993,12 +992,14 @@ void uartSetBaudRate(uart_t *uart, uint32_t baud_rate) {
993992
uart_ll_set_sclk(UART_LL_GET_HW(uart->num), newClkSrc);
994993
#endif
995994
if (uart_set_baudrate(uart->num, baud_rate) == ESP_OK) {
996-
log_v("Setting UART%d baud rate to %d.", uart->num, baud_rate);
995+
log_v("Setting UART%d baud rate to %ld.", uart->num, baud_rate);
997996
uart->_baudrate = baud_rate;
998997
} else {
999-
log_e("Setting UART%d baud rate to %d has failed.", uart->num, baud_rate);
998+
retCode = false;
999+
log_e("Setting UART%d baud rate to %ld has failed.", uart->num, baud_rate);
10001000
}
10011001
UART_MUTEX_UNLOCK();
1002+
return retCode;
10021003
}
10031004

10041005
uint32_t uartGetBaudRate(uart_t *uart) {
@@ -1385,4 +1386,24 @@ int uart_send_msg_with_break(uint8_t uartNum, uint8_t *msg, size_t msgSize) {
13851386
return uart_write_bytes_with_break(uartNum, (const void *)msg, msgSize, 12);
13861387
}
13871388

1389+
// returns the maximum valid uart RX Timeout based on the UART Source Clock and Baudrate
1390+
uint16_t uart_get_max_rx_timeout(uint8_t uartNum) {
1391+
if (uartNum >= SOC_UART_NUM) {
1392+
log_e("UART%d is invalid. This device has %d UARTs, from 0 to %d.", uartNum, SOC_UART_NUM, SOC_UART_NUM - 1);
1393+
return (uint16_t)-1;
1394+
}
1395+
uint16_t tout_max_thresh = uart_ll_max_tout_thrd(UART_LL_GET_HW(uartNum));
1396+
uint8_t symbol_len = 1; // number of bits per symbol including start
1397+
uart_parity_t parity_mode;
1398+
uart_stop_bits_t stop_bit;
1399+
uart_word_length_t data_bit;
1400+
uart_ll_get_data_bit_num(UART_LL_GET_HW(uartNum), &data_bit);
1401+
uart_ll_get_stop_bits(UART_LL_GET_HW(uartNum), &stop_bit);
1402+
uart_ll_get_parity(UART_LL_GET_HW(uartNum), &parity_mode);
1403+
symbol_len += (data_bit < UART_DATA_BITS_MAX) ? (uint8_t)data_bit + 5 : 8;
1404+
symbol_len += (stop_bit > UART_STOP_BITS_1) ? 2 : 1;
1405+
symbol_len += (parity_mode > UART_PARITY_DISABLE) ? 1 : 0;
1406+
return (uint16_t)(tout_max_thresh / symbol_len);
1407+
}
1408+
13881409
#endif /* SOC_UART_SUPPORTED */

Diff for: cores/esp32/esp32-hal-uart.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ void uartWriteBuf(uart_t *uart, const uint8_t *data, size_t len);
5858
void uartFlush(uart_t *uart);
5959
void uartFlushTxOnly(uart_t *uart, bool txOnly);
6060

61-
void uartSetBaudRate(uart_t *uart, uint32_t baud_rate);
61+
bool uartSetBaudRate(uart_t *uart, uint32_t baud_rate);
6262
uint32_t uartGetBaudRate(uart_t *uart);
6363

6464
void uartSetRxInvert(uart_t *uart, bool invert);
@@ -116,6 +116,10 @@ void uart_send_break(uint8_t uartNum);
116116
// Sends a buffer and at the end of the stream, it generates BREAK in the line
117117
int uart_send_msg_with_break(uint8_t uartNum, uint8_t *msg, size_t msgSize);
118118

119+
// UART RX Timeout (in UART Symbols) depends on the UART Clock Source and the SoC that is used
120+
// This is a helper function that calculates what is the maximum RX Timeout that a running UART IDF driver allows.
121+
uint16_t uart_get_max_rx_timeout(uint8_t uartNum);
122+
119123
#ifdef __cplusplus
120124
}
121125
#endif

0 commit comments

Comments
 (0)