Merge branch 'master' into release/v3.3.x
This commit is contained in:
commit
d81c19534f
50 changed files with 778 additions and 294 deletions
93
.github/scripts/set_push_chunks.sh
vendored
93
.github/scripts/set_push_chunks.sh
vendored
|
|
@ -2,93 +2,6 @@
|
||||||
|
|
||||||
build_all=false
|
build_all=false
|
||||||
chunks_count=0
|
chunks_count=0
|
||||||
last_check_files=""
|
|
||||||
last_check_result=""
|
|
||||||
gh_output=""
|
|
||||||
|
|
||||||
# Define the file patterns
|
|
||||||
core_files=(
|
|
||||||
'\.github/.*'
|
|
||||||
'cores/.*'
|
|
||||||
'package/.*'
|
|
||||||
'tools/.*'
|
|
||||||
'platform\.txt'
|
|
||||||
'programmers\.txt'
|
|
||||||
'variants/esp32/.*'
|
|
||||||
'variants/esp32c3/.*'
|
|
||||||
'variants/esp32c6/.*'
|
|
||||||
'variants/esp32h2/.*'
|
|
||||||
'variants/esp32p4/.*'
|
|
||||||
'variants/esp32s2/.*'
|
|
||||||
'variants/esp32s3/.*'
|
|
||||||
)
|
|
||||||
library_files=(
|
|
||||||
'libraries/.*/examples/.*'
|
|
||||||
'libraries/.*/src/.*'
|
|
||||||
)
|
|
||||||
networking_files=(
|
|
||||||
'libraries/Network/src/.*'
|
|
||||||
)
|
|
||||||
fs_files=(
|
|
||||||
'libraries/FS/src/.*'
|
|
||||||
)
|
|
||||||
static_sketches_files=(
|
|
||||||
'libraries/NetworkClientSecure/examples/WiFiClientSecure/WiFiClientSecure\.ino'
|
|
||||||
'libraries/BLE/examples/Server/Server\.ino'
|
|
||||||
'libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer\.ino'
|
|
||||||
'libraries/Insights/examples/MinimalDiagnostics/MinimalDiagnostics\.ino'
|
|
||||||
'libraries/NetworkClientSecure/src/.*'
|
|
||||||
'libraries/BLE/src/.*'
|
|
||||||
'libraries/Insights/src/.*'
|
|
||||||
)
|
|
||||||
idf_files=(
|
|
||||||
'idf_component\.yml'
|
|
||||||
'Kconfig\.projbuild'
|
|
||||||
'CMakeLists\.txt'
|
|
||||||
'variants/esp32c2/.*'
|
|
||||||
)
|
|
||||||
|
|
||||||
# Function to check if any files match the patterns
|
|
||||||
check_files() {
|
|
||||||
local patterns=("$@")
|
|
||||||
local files_found=""
|
|
||||||
for pattern in "${patterns[@]}"; do
|
|
||||||
echo "Checking pattern: $pattern"
|
|
||||||
matched_files=$(echo "$gh_output" | grep -E "$pattern")
|
|
||||||
echo "matched_files: $matched_files"
|
|
||||||
files_found+="$matched_files "
|
|
||||||
done
|
|
||||||
|
|
||||||
last_check_files=$(echo "$files_found" | xargs)
|
|
||||||
if [[ -n $last_check_files ]]; then
|
|
||||||
last_check_result="true"
|
|
||||||
else
|
|
||||||
last_check_result="false"
|
|
||||||
fi
|
|
||||||
echo "last_check_result: $last_check_result"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ $IS_PR != 'true' ]]; then
|
|
||||||
gh_output=$(gh api repos/espressif/arduino-esp32/commits/"$GITHUB_SHA" --jq '.files[].filename')
|
|
||||||
else
|
|
||||||
gh_output=$(gh pr diff "$PR_NUM" --name-only)
|
|
||||||
fi
|
|
||||||
echo "gh_output: $gh_output"
|
|
||||||
|
|
||||||
# Output the results
|
|
||||||
check_files "${core_files[@]}"
|
|
||||||
CORE_CHANGED=$last_check_result
|
|
||||||
check_files "${library_files[@]}"
|
|
||||||
LIB_CHANGED=$last_check_result
|
|
||||||
LIB_FILES=$last_check_files
|
|
||||||
check_files "${networking_files[@]}"
|
|
||||||
NETWORKING_CHANGED=$last_check_result
|
|
||||||
check_files "${fs_files[@]}"
|
|
||||||
FS_CHANGED=$last_check_result
|
|
||||||
check_files "${static_sketches_files[@]}"
|
|
||||||
STATIC_SKETCHES_CHANGED=$last_check_result
|
|
||||||
check_files "${idf_files[@]}"
|
|
||||||
IDF_CHANGED=$last_check_result
|
|
||||||
|
|
||||||
if [[ $CORE_CHANGED == 'true' ]] || [[ $IS_PR != 'true' ]]; then
|
if [[ $CORE_CHANGED == 'true' ]] || [[ $IS_PR != 'true' ]]; then
|
||||||
echo "Core files changed or not a PR. Building all."
|
echo "Core files changed or not a PR. Building all."
|
||||||
|
|
@ -163,9 +76,9 @@ chunks+="]"
|
||||||
|
|
||||||
{
|
{
|
||||||
echo "build_all=$build_all"
|
echo "build_all=$build_all"
|
||||||
echo "build_libraries=$LIB_CHANGED"
|
echo "build_libraries=$BUILD_LIBRARIES"
|
||||||
echo "build_static_sketches=$STATIC_SKETCHES_CHANGED"
|
echo "build_static_sketches=$BUILD_STATIC_SKETCHES"
|
||||||
echo "build_idf=$IDF_CHANGED"
|
echo "build_idf=$BUILD_IDF"
|
||||||
echo "chunk_count=$chunks_count"
|
echo "chunk_count=$chunks_count"
|
||||||
echo "chunks=$chunks"
|
echo "chunks=$chunks"
|
||||||
} >> "$GITHUB_OUTPUT"
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
|
||||||
10
.github/workflows/allboards.yml
vendored
10
.github/workflows/allboards.yml
vendored
|
|
@ -15,7 +15,7 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.client_payload.branch }}
|
ref: ${{ github.event.client_payload.branch }}
|
||||||
|
|
||||||
|
|
@ -32,13 +32,13 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.client_payload.branch }}
|
ref: ${{ github.event.client_payload.branch }}
|
||||||
|
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- name: Setup jq
|
- name: Setup jq
|
||||||
uses: dcarbone/install-jq-action@v1.0.1
|
uses: dcarbone/install-jq-action@e397bd87438d72198f81efd21f876461183d383a # v3.0.1
|
||||||
|
|
||||||
- id: set-test-chunks
|
- id: set-test-chunks
|
||||||
name: Set Chunks
|
name: Set Chunks
|
||||||
|
|
@ -64,7 +64,7 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.client_payload.branch }}
|
ref: ${{ github.event.client_payload.branch }}
|
||||||
|
|
||||||
|
|
@ -74,7 +74,7 @@ jobs:
|
||||||
FQBN: ${{ toJSON(matrix.chunk) }}
|
FQBN: ${{ toJSON(matrix.chunk) }}
|
||||||
|
|
||||||
- name: Compile sketch
|
- name: Compile sketch
|
||||||
uses: P-R-O-C-H-Y/compile-sketches@main
|
uses: P-R-O-C-H-Y/compile-sketches@a62f069b92dc8f5053da4ac439ea6d1950cf6379 # main
|
||||||
with:
|
with:
|
||||||
platforms: |
|
platforms: |
|
||||||
${{ env.REPOSITORY }}
|
${{ env.REPOSITORY }}
|
||||||
|
|
|
||||||
10
.github/workflows/boards.yml
vendored
10
.github/workflows/boards.yml
vendored
|
|
@ -22,10 +22,10 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
# This step makes the contents of the repository available to the workflow
|
# This step makes the contents of the repository available to the workflow
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Setup jq
|
- name: Setup jq
|
||||||
uses: dcarbone/install-jq-action@v1.0.1
|
uses: dcarbone/install-jq-action@e397bd87438d72198f81efd21f876461183d383a # v3.0.1
|
||||||
|
|
||||||
- name: Get board name
|
- name: Get board name
|
||||||
run: bash .github/scripts/find_new_boards.sh ${{ github.repository }} ${{github.base_ref}}
|
run: bash .github/scripts/find_new_boards.sh ${{ github.repository }} ${{github.base_ref}}
|
||||||
|
|
@ -47,7 +47,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
# This step makes the contents of the repository available to the workflow
|
# This step makes the contents of the repository available to the workflow
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Check if build.board is uppercase
|
- name: Check if build.board is uppercase
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -60,7 +60,7 @@ jobs:
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Get libs cache
|
- name: Get libs cache
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
with:
|
with:
|
||||||
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('package/package_esp32_index.template.json', 'tools/get.py') }}
|
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('package/package_esp32_index.template.json', 'tools/get.py') }}
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -73,7 +73,7 @@ jobs:
|
||||||
./tools/xtensa-*
|
./tools/xtensa-*
|
||||||
|
|
||||||
- name: Compile sketch
|
- name: Compile sketch
|
||||||
uses: P-R-O-C-H-Y/compile-sketches@main
|
uses: P-R-O-C-H-Y/compile-sketches@a62f069b92dc8f5053da4ac439ea6d1950cf6379 # main
|
||||||
with:
|
with:
|
||||||
platforms: |
|
platforms: |
|
||||||
${{ env.REPOSITORY }}
|
${{ env.REPOSITORY }}
|
||||||
|
|
|
||||||
33
.github/workflows/build_py_tools.yml
vendored
33
.github/workflows/build_py_tools.yml
vendored
|
|
@ -18,7 +18,7 @@ jobs:
|
||||||
all_changed_files: ${{ steps.verify-changed-files.outputs.all_changed_files }}
|
all_changed_files: ${{ steps.verify-changed-files.outputs.all_changed_files }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
ref: ${{ github.event.pull_request.head.ref }}
|
ref: ${{ github.event.pull_request.head.ref }}
|
||||||
|
|
@ -30,15 +30,16 @@ jobs:
|
||||||
echo "Make sure you are using a branch inside the repository and not a fork."
|
echo "Make sure you are using a branch inside the repository and not a fork."
|
||||||
|
|
||||||
- name: Verify Python Tools Changed
|
- name: Verify Python Tools Changed
|
||||||
|
uses: tj-actions/changed-files@2f7c5bfce28377bc069a65ba478de0a74aa0ca32 # v46.0.1
|
||||||
id: verify-changed-files
|
id: verify-changed-files
|
||||||
run: |
|
with:
|
||||||
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)
|
fetch_depth: "2"
|
||||||
echo "all_changed_files=$CHANGED_FILES" >> $GITHUB_OUTPUT
|
since_last_remote_commit: "true"
|
||||||
if [ -n "$CHANGED_FILES" ]; then
|
files: |
|
||||||
echo "any_changed=true" >> $GITHUB_OUTPUT
|
tools/get.py
|
||||||
else
|
tools/espota.py
|
||||||
echo "any_changed=false" >> $GITHUB_OUTPUT
|
tools/gen_esp32part.py
|
||||||
fi
|
tools/gen_insights_package.py
|
||||||
|
|
||||||
- name: List all changed files
|
- name: List all changed files
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
@ -88,25 +89,30 @@ jobs:
|
||||||
for tool in ${{ env.CHANGED_TOOLS }}; do
|
for tool in ${{ env.CHANGED_TOOLS }}; do
|
||||||
echo "tool $tool was changed"
|
echo "tool $tool was changed"
|
||||||
done
|
done
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.TOOLS_UPLOAD_PAT }}
|
token: ${{ secrets.TOOLS_UPLOAD_PAT }}
|
||||||
ref: ${{ github.event.pull_request.head.ref }}
|
ref: ${{ github.event.pull_request.head.ref }}
|
||||||
|
|
||||||
- name: Set up Python 3.8
|
- name: Set up Python 3.8
|
||||||
uses: actions/setup-python@master
|
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
with:
|
with:
|
||||||
python-version: 3.8
|
python-version: 3.8
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install pyinstaller requests
|
pip install pyinstaller requests
|
||||||
|
|
||||||
- name: Build with PyInstaller
|
- name: Build with PyInstaller
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
for tool in ${{ env.CHANGED_TOOLS }}; do
|
for tool in ${{ env.CHANGED_TOOLS }}; do
|
||||||
pyinstaller --distpath ./${{ env.DISTPATH }} -F --icon=.github/pytools/espressif.ico tools/$tool.py
|
pyinstaller --distpath ./${{ env.DISTPATH }} -F --icon=.github/pytools/espressif.ico tools/$tool.py
|
||||||
done
|
done
|
||||||
|
|
||||||
- name: Sign binaries
|
- name: Sign binaries
|
||||||
if: matrix.os == 'windows-latest'
|
if: matrix.os == 'windows-latest'
|
||||||
env:
|
env:
|
||||||
|
|
@ -119,12 +125,14 @@ jobs:
|
||||||
{
|
{
|
||||||
./.github/pytools/Sign-File.ps1 -Path ./${{ env.DISTPATH }}/$node.exe
|
./.github/pytools/Sign-File.ps1 -Path ./${{ env.DISTPATH }}/$node.exe
|
||||||
}
|
}
|
||||||
|
|
||||||
- name: Test binaries
|
- name: Test binaries
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
for tool in ${{ env.CHANGED_TOOLS }}; do
|
for tool in ${{ env.CHANGED_TOOLS }}; do
|
||||||
./${{ env.DISTPATH }}/$tool${{ matrix.EXTEN }} -h
|
./${{ env.DISTPATH }}/$tool${{ matrix.EXTEN }} -h
|
||||||
done
|
done
|
||||||
|
|
||||||
- name: Push binary to tools
|
- name: Push binary to tools
|
||||||
if: matrix.os == 'windows-latest'
|
if: matrix.os == 'windows-latest'
|
||||||
env:
|
env:
|
||||||
|
|
@ -135,8 +143,9 @@ jobs:
|
||||||
cp -f ./${{ env.DISTPATH }}/$tool.exe tools/$tool.exe
|
cp -f ./${{ env.DISTPATH }}/$tool.exe tools/$tool.exe
|
||||||
done
|
done
|
||||||
bash .github/scripts/upload_py_tools.sh "${{ env.CHANGED_TOOLS }}"
|
bash .github/scripts/upload_py_tools.sh "${{ env.CHANGED_TOOLS }}"
|
||||||
|
|
||||||
- name: Archive artifact
|
- name: Archive artifact
|
||||||
uses: actions/upload-artifact@master
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: ${{ env.DISTPATH }}
|
name: ${{ env.DISTPATH }}
|
||||||
path: ${{ env.DISTPATH }}
|
path: ${{ env.DISTPATH }}
|
||||||
|
|
|
||||||
4
.github/workflows/dangerjs.yml
vendored
4
.github/workflows/dangerjs.yml
vendored
|
|
@ -12,12 +12,12 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out PR head
|
- name: Check out PR head
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
|
|
||||||
- name: DangerJS pull request linter
|
- name: DangerJS pull request linter
|
||||||
uses: espressif/shared-github-dangerjs@v1
|
uses: espressif/shared-github-dangerjs@fb17367fd3e8ff7412603b8e946d9b19ffdb2d7f # v1
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
|
|
|
||||||
9
.github/workflows/docs_build.yml
vendored
9
.github/workflows/docs_build.yml
vendored
|
|
@ -21,14 +21,16 @@ jobs:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- uses: actions/setup-python@v5
|
|
||||||
|
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
with:
|
with:
|
||||||
cache-dependency-path: docs/requirements.txt
|
cache-dependency-path: docs/requirements.txt
|
||||||
cache: "pip"
|
cache: "pip"
|
||||||
python-version: "3.10"
|
python-version: "3.10"
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
sudo apt update
|
sudo apt update
|
||||||
|
|
@ -38,8 +40,9 @@ jobs:
|
||||||
cd ./docs
|
cd ./docs
|
||||||
PATH=/home/runner/.local/bin:$PATH pip3 install -r requirements.txt --prefer-binary
|
PATH=/home/runner/.local/bin:$PATH pip3 install -r requirements.txt --prefer-binary
|
||||||
PATH=/home/runner/.local/bin:$PATH SPHINXOPTS="-W" build-docs -l en
|
PATH=/home/runner/.local/bin:$PATH SPHINXOPTS="-W" build-docs -l en
|
||||||
|
|
||||||
- name: Archive Docs
|
- name: Archive Docs
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: docs
|
name: docs
|
||||||
path: docs
|
path: docs
|
||||||
|
|
|
||||||
7
.github/workflows/docs_deploy.yml
vendored
7
.github/workflows/docs_deploy.yml
vendored
|
|
@ -26,14 +26,17 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
echo "Release workflow failed. Exiting..."
|
echo "Release workflow failed. Exiting..."
|
||||||
exit 1
|
exit 1
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- uses: actions/setup-python@v5
|
|
||||||
|
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
with:
|
with:
|
||||||
cache-dependency-path: docs/requirements.txt
|
cache-dependency-path: docs/requirements.txt
|
||||||
cache: "pip"
|
cache: "pip"
|
||||||
python-version: "3.10"
|
python-version: "3.10"
|
||||||
|
|
||||||
- name: Deploy Documentation
|
- name: Deploy Documentation
|
||||||
env:
|
env:
|
||||||
# Deploy to production server
|
# Deploy to production server
|
||||||
|
|
|
||||||
4
.github/workflows/gh-pages.yml
vendored
4
.github/workflows/gh-pages.yml
vendored
|
|
@ -15,7 +15,9 @@ jobs:
|
||||||
name: Build GitHub Pages
|
name: Build GitHub Pages
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Copy Files
|
- name: Copy Files
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
|
||||||
38
.github/workflows/lib.json
vendored
38
.github/workflows/lib.json
vendored
|
|
@ -23,16 +23,44 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"source-url": "https://github.com/me-no-dev/ESPAsyncWebServer.git",
|
"source-url": "https://github.com/ESP32Async/ESPAsyncWebServer.git",
|
||||||
"required-libs": [
|
"required-libs": [
|
||||||
{"source-url": "https://github.com/me-no-dev/AsyncTCP.git"}
|
{"source-url": "https://github.com/ESP32Async/AsyncTCP.git"}
|
||||||
],
|
],
|
||||||
"exclude_targets": [],
|
"exclude_targets": [],
|
||||||
"sketch_path": [
|
"sketch_path": [
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Auth/Auth.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/CORS/CORS.ino",
|
||||||
"~/Arduino/libraries/ESPAsyncWebServer/examples/CaptivePortal/CaptivePortal.ino",
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/CaptivePortal/CaptivePortal.ino",
|
||||||
"~/Arduino/libraries/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/ESP_AsyncFSBrowser.ino",
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/CatchAllHandler/CatchAllHandler.ino",
|
||||||
"~/Arduino/libraries/ESPAsyncWebServer/examples/regex_patterns/regex_patterns.ino",
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/ChunkResponse/ChunkResponse.ino",
|
||||||
"~/Arduino/libraries/ESPAsyncWebServer/examples/simple_server/simple_server.ino"
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/ChunkRetryResponse/ChunkRetryResponse.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/EndBegin/EndBegin.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Filters/Filters.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/FlashResponse/FlashResponse.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/HeaderManipulation/HeaderManipulation.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Headers/Headers.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Json/Json.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Logging/Logging.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/MessagePack/MessagePack.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Middleware/Middleware.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Params/Params.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/PartitionDownloader/PartitionDownloader.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/PerfTests/PerfTests.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/RateLimit/RateLimit.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Redirect/Redirect.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/RequestContinuation/RequestContinuation.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/RequestContinuationComplete/RequestContinuationComplete.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/ResumableDownload/ResumableDownload.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Rewrite/Rewrite.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/ServerSentEvents/ServerSentEvents.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/ServerState/ServerState.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/SkipServerMiddleware/SkipServerMiddleware.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/SlowChunkResponse/SlowChunkResponse.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/StaticFile/StaticFile.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Templates/Templates.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/Upload/Upload.ino",
|
||||||
|
"~/Arduino/libraries/ESPAsyncWebServer/examples/WebSocket/WebSocket.ino"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
15
.github/workflows/lib.yml
vendored
15
.github/workflows/lib.yml
vendored
|
|
@ -62,10 +62,10 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
# This step makes the contents of the repository available to the workflow
|
# This step makes the contents of the repository available to the workflow
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Compile sketch
|
- name: Compile sketch
|
||||||
uses: P-R-O-C-H-Y/compile-sketches@main
|
uses: P-R-O-C-H-Y/compile-sketches@a62f069b92dc8f5053da4ac439ea6d1950cf6379 # main
|
||||||
with:
|
with:
|
||||||
platforms: |
|
platforms: |
|
||||||
${{ env.REPOSITORY }}
|
${{ env.REPOSITORY }}
|
||||||
|
|
@ -80,7 +80,7 @@ jobs:
|
||||||
- --warnings="all"
|
- --warnings="all"
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: ${{ env.SKETCHES_REPORTS_ARTIFACT_NAME }}-${{ matrix.target }}
|
name: ${{ env.SKETCHES_REPORTS_ARTIFACT_NAME }}-${{ matrix.target }}
|
||||||
path: ${{ env.SKETCHES_REPORTS_PATH }}
|
path: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
|
|
@ -92,7 +92,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
# Check out repository
|
# Check out repository
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
token: ${{ env.GITHUB_TOKEN }}
|
token: ${{ env.GITHUB_TOKEN }}
|
||||||
fetch-depth: "0"
|
fetch-depth: "0"
|
||||||
|
|
@ -102,14 +102,14 @@ jobs:
|
||||||
|
|
||||||
# This step is needed to get the size data produced by the compile jobs
|
# This step is needed to get the size data produced by the compile jobs
|
||||||
- name: Download sketches reports artifact
|
- name: Download sketches reports artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
with:
|
with:
|
||||||
pattern: ${{ env.SKETCHES_REPORTS_ARTIFACT_NAME }}-*
|
pattern: ${{ env.SKETCHES_REPORTS_ARTIFACT_NAME }}-*
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
path: ${{ env.SKETCHES_REPORTS_PATH }}
|
path: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
|
|
||||||
- name: Report results
|
- name: Report results
|
||||||
uses: P-R-O-C-H-Y/report-size-deltas@main
|
uses: P-R-O-C-H-Y/report-size-deltas@4a79caa6dcc3579024293638b97156106edc588e # main
|
||||||
with:
|
with:
|
||||||
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}
|
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
destination-file: ${{ env.RESULT_LIBRARY_TEST_FILE }}
|
destination-file: ${{ env.RESULT_LIBRARY_TEST_FILE }}
|
||||||
|
|
@ -136,8 +136,9 @@ jobs:
|
||||||
env:
|
env:
|
||||||
PR_NUM: ${{ github.event.number }}
|
PR_NUM: ${{ github.event.number }}
|
||||||
run: echo $PR_NUM > pr_num.txt
|
run: echo $PR_NUM > pr_num.txt
|
||||||
|
|
||||||
- name: Upload PR number
|
- name: Upload PR number
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: pr_number
|
name: pr_number
|
||||||
path: ./pr_num.txt
|
path: ./pr_num.txt
|
||||||
|
|
|
||||||
4
.github/workflows/pre-commit-status.yml
vendored
4
.github/workflows/pre-commit-status.yml
vendored
|
|
@ -17,7 +17,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Report success
|
- name: Report success
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const owner = '${{ github.repository_owner }}';
|
const owner = '${{ github.repository_owner }}';
|
||||||
|
|
@ -43,7 +43,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Report pending
|
- name: Report pending
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const owner = '${{ github.repository_owner }}';
|
const owner = '${{ github.repository_owner }}';
|
||||||
|
|
|
||||||
27
.github/workflows/pre-commit.yml
vendored
27
.github/workflows/pre-commit.yml
vendored
|
|
@ -23,7 +23,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout latest commit
|
- name: Checkout latest commit
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ jobs:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
|
||||||
- name: Set up Python 3
|
- name: Set up Python 3
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
with:
|
with:
|
||||||
cache-dependency-path: tools/pre-commit/requirements.txt
|
cache-dependency-path: tools/pre-commit/requirements.txt
|
||||||
cache: "pip"
|
cache: "pip"
|
||||||
|
|
@ -46,7 +46,7 @@ jobs:
|
||||||
echo "PY_HASH=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV
|
echo "PY_HASH=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Restore pre-commit cache
|
- name: Restore pre-commit cache
|
||||||
uses: actions/cache/restore@v4
|
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
id: restore-cache
|
id: restore-cache
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -58,28 +58,13 @@ jobs:
|
||||||
|
|
||||||
- name: Get changed files
|
- name: Get changed files
|
||||||
id: changed-files
|
id: changed-files
|
||||||
env:
|
uses: tj-actions/changed-files@2f7c5bfce28377bc069a65ba478de0a74aa0ca32 # v46.0.1
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
PR_NUM: ${{ github.event.pull_request.number }}
|
|
||||||
IS_PR: ${{ github.event_name == 'pull_request' }}
|
|
||||||
GITHUB_SHA: ${{ github.sha }}
|
|
||||||
run: |
|
|
||||||
if [[ $IS_PR != 'true' ]]; then
|
|
||||||
files_changed=$(gh api repos/espressif/arduino-esp32/commits/"$GITHUB_SHA" --jq '.files[].filename' | xargs)
|
|
||||||
else
|
|
||||||
files_changed=$(gh pr diff "$PR_NUM" --name-only | xargs)
|
|
||||||
fi
|
|
||||||
echo "all_changed_files=$files_changed" >> $GITHUB_OUTPUT
|
|
||||||
echo "Changed files:"
|
|
||||||
for file in $files_changed; do
|
|
||||||
echo " $file"
|
|
||||||
done
|
|
||||||
|
|
||||||
- name: Run pre-commit hooks in changed files
|
- name: Run pre-commit hooks in changed files
|
||||||
run: pre-commit run --color=always --show-diff-on-failure --files ${{ steps.changed-files.outputs.all_changed_files }}
|
run: pre-commit run --color=always --show-diff-on-failure --files ${{ steps.changed-files.outputs.all_changed_files }}
|
||||||
|
|
||||||
- name: Save pre-commit cache
|
- name: Save pre-commit cache
|
||||||
uses: actions/cache/save@v4
|
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
if: ${{ always() && steps.restore-cache.outputs.cache-hit != 'true' }}
|
if: ${{ always() && steps.restore-cache.outputs.cache-hit != 'true' }}
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
|
|
@ -88,7 +73,7 @@ jobs:
|
||||||
key: ${{ steps.restore-cache.outputs.cache-primary-key }}
|
key: ${{ steps.restore-cache.outputs.cache-primary-key }}
|
||||||
|
|
||||||
- name: Push changes using pre-commit-ci-lite
|
- name: Push changes using pre-commit-ci-lite
|
||||||
uses: pre-commit-ci/lite-action@v1.1.0
|
uses: pre-commit-ci/lite-action@5d6cc0eb514c891a40562a58a8e71576c5c7fb43 # v1.1.0
|
||||||
# Only push changes in PRs
|
# Only push changes in PRs
|
||||||
if: ${{ always() && github.event_name == 'pull_request' }}
|
if: ${{ always() && github.event_name == 'pull_request' }}
|
||||||
with:
|
with:
|
||||||
|
|
|
||||||
4
.github/workflows/publishlib.yml
vendored
4
.github/workflows/publishlib.yml
vendored
|
|
@ -44,12 +44,12 @@ jobs:
|
||||||
|
|
||||||
- name: Read the pr_num file
|
- name: Read the pr_num file
|
||||||
id: pr_num_reader
|
id: pr_num_reader
|
||||||
uses: juliangruber/read-file-action@v1
|
uses: juliangruber/read-file-action@b549046febe0fe86f8cb4f93c24e284433f9ab58 # v1.1.7
|
||||||
with:
|
with:
|
||||||
path: ./artifacts/workflows/pr_num.txt
|
path: ./artifacts/workflows/pr_num.txt
|
||||||
|
|
||||||
- name: Report results
|
- name: Report results
|
||||||
uses: P-R-O-C-H-Y/report-size-deltas@libs
|
uses: P-R-O-C-H-Y/report-size-deltas@256d1f13e4195cd7fd436d2f959e6dc4d5e4b406 # libs
|
||||||
with:
|
with:
|
||||||
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}
|
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
github-token: ${{ env.GITHUB_TOKEN }}
|
github-token: ${{ env.GITHUB_TOKEN }}
|
||||||
|
|
|
||||||
6
.github/workflows/publishsizes-2.x.yml
vendored
6
.github/workflows/publishsizes-2.x.yml
vendored
|
|
@ -14,8 +14,8 @@ jobs:
|
||||||
name: Sizes Comparison Results
|
name: Sizes Comparison Results
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout gh-pages branch
|
||||||
uses: actions/checkout@v4 # This step checks out the repository's code at gh-pages branch
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: gh-pages
|
ref: gh-pages
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ jobs:
|
||||||
mv v2.x_cli_compile/*.json artifacts/sizes-report/master/
|
mv v2.x_cli_compile/*.json artifacts/sizes-report/master/
|
||||||
|
|
||||||
- name: Report results
|
- name: Report results
|
||||||
uses: P-R-O-C-H-Y/report-size-deltas@sizes_v2
|
uses: P-R-O-C-H-Y/report-size-deltas@2043188c68f483a7b50527c4eacf609d05bb67a5 # sizes_v2
|
||||||
with:
|
with:
|
||||||
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}
|
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
github-token: ${{ env.GITHUB_TOKEN }}
|
github-token: ${{ env.GITHUB_TOKEN }}
|
||||||
|
|
|
||||||
8
.github/workflows/publishsizes.yml
vendored
8
.github/workflows/publishsizes.yml
vendored
|
|
@ -21,8 +21,8 @@ jobs:
|
||||||
github.event.workflow_run.conclusion == 'success'
|
github.event.workflow_run.conclusion == 'success'
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout gh-pages branch
|
||||||
uses: actions/checkout@v4 # This step checks out the repository's code at gh-pages branch
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: gh-pages
|
ref: gh-pages
|
||||||
|
|
||||||
|
|
@ -60,12 +60,12 @@ jobs:
|
||||||
|
|
||||||
- name: Read the pr_num file
|
- name: Read the pr_num file
|
||||||
id: pr_num_reader
|
id: pr_num_reader
|
||||||
uses: juliangruber/read-file-action@v1
|
uses: juliangruber/read-file-action@b549046febe0fe86f8cb4f93c24e284433f9ab58 # v1.1.7
|
||||||
with:
|
with:
|
||||||
path: ./artifacts/sizes-report/pr_num.txt
|
path: ./artifacts/sizes-report/pr_num.txt
|
||||||
|
|
||||||
- name: Report results
|
- name: Report results
|
||||||
uses: P-R-O-C-H-Y/report-size-deltas@sizes_v2
|
uses: P-R-O-C-H-Y/report-size-deltas@2043188c68f483a7b50527c4eacf609d05bb67a5 # sizes_v2
|
||||||
with:
|
with:
|
||||||
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}
|
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}
|
||||||
github-token: ${{ env.GITHUB_TOKEN }}
|
github-token: ${{ env.GITHUB_TOKEN }}
|
||||||
|
|
|
||||||
80
.github/workflows/push.yml
vendored
80
.github/workflows/push.yml
vendored
|
|
@ -67,7 +67,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: ${{ !(github.event_name == 'pull_request' && startsWith(github.head_ref, 'release/')) }}
|
if: ${{ !(github.event_name == 'pull_request' && startsWith(github.head_ref, 'release/')) }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- run: bash ./.github/scripts/check-cmakelists.sh
|
- run: bash ./.github/scripts/check-cmakelists.sh
|
||||||
|
|
||||||
gen-chunks:
|
gen-chunks:
|
||||||
|
|
@ -83,23 +83,69 @@ jobs:
|
||||||
chunks: ${{ steps.set-chunks.outputs.chunks }}
|
chunks: ${{ steps.set-chunks.outputs.chunks }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
|
|
||||||
|
- name: Get changed files
|
||||||
|
id: changed-files
|
||||||
|
uses: tj-actions/changed-files@2f7c5bfce28377bc069a65ba478de0a74aa0ca32 # v46.0.1
|
||||||
|
with:
|
||||||
|
files_yaml: |
|
||||||
|
core:
|
||||||
|
- '.github/**'
|
||||||
|
- 'cores/**'
|
||||||
|
- 'package/**'
|
||||||
|
- 'tools/**'
|
||||||
|
- 'platform.txt'
|
||||||
|
- 'programmers.txt'
|
||||||
|
- "variants/esp32/**/*"
|
||||||
|
- "variants/esp32c3/**/*"
|
||||||
|
- "variants/esp32c6/**/*"
|
||||||
|
- "variants/esp32h2/**/*"
|
||||||
|
- "variants/esp32p4/**/*"
|
||||||
|
- "variants/esp32s2/**/*"
|
||||||
|
- "variants/esp32s3/**/*"
|
||||||
|
libraries:
|
||||||
|
- 'libraries/**/examples/**'
|
||||||
|
- 'libraries/**/src/**'
|
||||||
|
networking:
|
||||||
|
- 'libraries/Network/src/**'
|
||||||
|
fs:
|
||||||
|
- 'libraries/FS/src/**'
|
||||||
|
static_sketeches:
|
||||||
|
- 'libraries/NetworkClientSecure/examples/WiFiClientSecure/WiFiClientSecure.ino'
|
||||||
|
- 'libraries/BLE/examples/Server/Server.ino'
|
||||||
|
- 'libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer.ino'
|
||||||
|
- 'libraries/Insights/examples/MinimalDiagnostics/MinimalDiagnostics.ino'
|
||||||
|
- 'libraries/NetworkClientSecure/src/**'
|
||||||
|
- 'libraries/BLE/src/**'
|
||||||
|
- 'libraries/Insights/src/**'
|
||||||
|
idf:
|
||||||
|
- 'idf_component.yml'
|
||||||
|
- 'Kconfig.projbuild'
|
||||||
|
- 'CMakeLists.txt'
|
||||||
|
- "variants/esp32c2/**/*"
|
||||||
|
|
||||||
- name: Set chunks
|
- name: Set chunks
|
||||||
id: set-chunks
|
id: set-chunks
|
||||||
env:
|
env:
|
||||||
|
LIB_FILES: ${{ steps.changed-files.outputs.libraries_all_changed_files }}
|
||||||
IS_PR: ${{ github.event_name == 'pull_request' }}
|
IS_PR: ${{ github.event_name == 'pull_request' }}
|
||||||
PR_NUM: ${{ github.event.pull_request.number }}
|
|
||||||
MAX_CHUNKS: ${{ env.MAX_CHUNKS }}
|
MAX_CHUNKS: ${{ env.MAX_CHUNKS }}
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
BUILD_IDF: ${{ steps.changed-files.outputs.idf_any_changed == 'true' }}
|
||||||
|
BUILD_LIBRARIES: ${{ steps.changed-files.outputs.libraries_any_changed == 'true' }}
|
||||||
|
BUILD_STATIC_SKETCHES: ${{ steps.changed-files.outputs.static_sketeches_any_changed == 'true' }}
|
||||||
|
FS_CHANGED: ${{ steps.changed-files.outputs.fs_any_changed == 'true' }}
|
||||||
|
NETWORKING_CHANGED: ${{ steps.changed-files.outputs.networking_any_changed == 'true' }}
|
||||||
|
CORE_CHANGED: ${{ steps.changed-files.outputs.core_any_changed == 'true' }}
|
||||||
|
LIB_CHANGED: ${{ steps.changed-files.outputs.libraries_any_changed == 'true' }}
|
||||||
run: |
|
run: |
|
||||||
bash ./.github/scripts/set_push_chunks.sh
|
bash ./.github/scripts/set_push_chunks.sh
|
||||||
|
|
||||||
- name: Upload sketches found
|
- name: Upload sketches found
|
||||||
if: ${{ steps.set-chunks.outputs.build_all == 'false' && steps.set-chunks.outputs.build_libraries == 'true' }}
|
if: ${{ steps.set-chunks.outputs.build_all == 'false' && steps.set-chunks.outputs.build_libraries == 'true' }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: sketches_found
|
name: sketches_found
|
||||||
path: sketches_found.txt
|
path: sketches_found.txt
|
||||||
|
|
@ -118,13 +164,13 @@ jobs:
|
||||||
chunk: ${{ fromJson(needs.gen-chunks.outputs.chunks) }}
|
chunk: ${{ fromJson(needs.gen-chunks.outputs.chunks) }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
with:
|
with:
|
||||||
python-version: "3.x"
|
python-version: "3.x"
|
||||||
|
|
||||||
- name: Get libs cache
|
- name: Get libs cache
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
with:
|
with:
|
||||||
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('package/package_esp32_index.template.json', 'tools/get.py') }}
|
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('package/package_esp32_index.template.json', 'tools/get.py') }}
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -152,7 +198,7 @@ jobs:
|
||||||
|
|
||||||
- name: Download sketches found
|
- name: Download sketches found
|
||||||
if: ${{ needs.gen-chunks.outputs.build_all == 'false' && needs.gen-chunks.outputs.build_libraries == 'true' }}
|
if: ${{ needs.gen-chunks.outputs.build_all == 'false' && needs.gen-chunks.outputs.build_libraries == 'true' }}
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
with:
|
with:
|
||||||
name: sketches_found
|
name: sketches_found
|
||||||
|
|
||||||
|
|
@ -162,7 +208,7 @@ jobs:
|
||||||
|
|
||||||
#Upload cli compile json as artifact
|
#Upload cli compile json as artifact
|
||||||
- name: Upload cli compile json
|
- name: Upload cli compile json
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: pr_cli_compile_${{ matrix.chunk }}
|
name: pr_cli_compile_${{ matrix.chunk }}
|
||||||
path: cli_compile_${{ matrix.chunk }}.json
|
path: cli_compile_${{ matrix.chunk }}.json
|
||||||
|
|
@ -180,8 +226,8 @@ jobs:
|
||||||
os: [windows-latest, macOS-latest]
|
os: [windows-latest, macOS-latest]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
with:
|
with:
|
||||||
python-version: "3.x"
|
python-version: "3.x"
|
||||||
- name: Build Sketches
|
- name: Build Sketches
|
||||||
|
|
@ -217,10 +263,11 @@ jobs:
|
||||||
container: espressif/idf:${{ matrix.idf_ver }}
|
container: espressif/idf:${{ matrix.idf_ver }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out arduino-esp32 as a component
|
- name: Check out arduino-esp32 as a component
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
path: components/arduino-esp32
|
path: components/arduino-esp32
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
env:
|
env:
|
||||||
IDF_TARGET: ${{ matrix.idf_target }}
|
IDF_TARGET: ${{ matrix.idf_target }}
|
||||||
|
|
@ -240,7 +287,7 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
# Check out repository
|
# Check out repository
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
token: ${{secrets.GITHUB_TOKEN}}
|
token: ${{secrets.GITHUB_TOKEN}}
|
||||||
fetch-depth: "0"
|
fetch-depth: "0"
|
||||||
|
|
@ -249,7 +296,7 @@ jobs:
|
||||||
run: git checkout remotes/origin/gh-pages
|
run: git checkout remotes/origin/gh-pages
|
||||||
|
|
||||||
- name: Download sketches reports artifact
|
- name: Download sketches reports artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
with:
|
with:
|
||||||
pattern: pr_cli_compile_*
|
pattern: pr_cli_compile_*
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
@ -279,8 +326,9 @@ jobs:
|
||||||
env:
|
env:
|
||||||
PR_NUM: ${{ github.event.number }}
|
PR_NUM: ${{ github.event.number }}
|
||||||
run: echo $PR_NUM > pr_num.txt
|
run: echo $PR_NUM > pr_num.txt
|
||||||
|
|
||||||
- name: Upload PR number
|
- name: Upload PR number
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: pr_number
|
name: pr_number
|
||||||
path: ./pr_num.txt
|
path: ./pr_num.txt
|
||||||
|
|
|
||||||
16
.github/workflows/release.yml
vendored
16
.github/workflows/release.yml
vendored
|
|
@ -10,14 +10,22 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@v5
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
with:
|
with:
|
||||||
python-version: "3.x"
|
python-version: "3.x"
|
||||||
- run: pip install packaging
|
|
||||||
- run: pip install pyserial
|
- name: Install packaging
|
||||||
|
run: pip install packaging
|
||||||
|
|
||||||
|
- name: Install pyserial
|
||||||
|
run: pip install pyserial
|
||||||
|
|
||||||
- name: Build Release
|
- name: Build Release
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
|
||||||
6
.github/workflows/tests.yml
vendored
6
.github/workflows/tests.yml
vendored
|
|
@ -43,7 +43,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: event_file
|
name: event_file
|
||||||
path: ${{ github.event_path }}
|
path: ${{ github.event_path }}
|
||||||
|
|
@ -62,7 +62,7 @@ jobs:
|
||||||
PERFORMANCE_ENABLED: ${{ contains(github.event.pull_request.labels.*.name, 'perf_test') }}
|
PERFORMANCE_ENABLED: ${{ contains(github.event.pull_request.labels.*.name, 'perf_test') }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
sparse-checkout: .github/scripts/tests_matrix.sh
|
sparse-checkout: .github/scripts/tests_matrix.sh
|
||||||
|
|
||||||
|
|
@ -71,7 +71,7 @@ jobs:
|
||||||
run: bash .github/scripts/tests_matrix.sh
|
run: bash .github/scripts/tests_matrix.sh
|
||||||
|
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: matrix_info
|
name: matrix_info
|
||||||
path: info/*
|
path: info/*
|
||||||
|
|
|
||||||
10
.github/workflows/tests_build.yml
vendored
10
.github/workflows/tests_build.yml
vendored
|
|
@ -22,7 +22,7 @@ jobs:
|
||||||
- name: Check if already built
|
- name: Check if already built
|
||||||
id: cache-build-binaries
|
id: cache-build-binaries
|
||||||
if: github.event.pull_request.number != null
|
if: github.event.pull_request.number != null
|
||||||
uses: actions/cache/restore@v4
|
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
with:
|
with:
|
||||||
key: tests-${{ env.id }}-bin
|
key: tests-${{ env.id }}-bin
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -46,10 +46,10 @@ jobs:
|
||||||
|
|
||||||
- name: Checkout user repository
|
- name: Checkout user repository
|
||||||
if: ${{ steps.check-build.outputs.enabled == 'true' }}
|
if: ${{ steps.check-build.outputs.enabled == 'true' }}
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Get libs cache
|
- name: Get libs cache
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
if: ${{ steps.check-build.outputs.enabled == 'true' }}
|
if: ${{ steps.check-build.outputs.enabled == 'true' }}
|
||||||
with:
|
with:
|
||||||
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('package/package_esp32_index.template.json', 'tools/get.py') }}
|
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('package/package_esp32_index.template.json', 'tools/get.py') }}
|
||||||
|
|
@ -68,7 +68,7 @@ jobs:
|
||||||
bash .github/scripts/tests_build.sh -c -type ${{ inputs.type }} -t ${{ inputs.chip }}
|
bash .github/scripts/tests_build.sh -c -type ${{ inputs.type }} -t ${{ inputs.chip }}
|
||||||
|
|
||||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} binaries as cache
|
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} binaries as cache
|
||||||
uses: actions/cache/save@v4
|
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
if: steps.check-build.outputs.enabled == 'true' && github.event.pull_request.number != null
|
if: steps.check-build.outputs.enabled == 'true' && github.event.pull_request.number != null
|
||||||
with:
|
with:
|
||||||
key: tests-${{ env.id }}-bin
|
key: tests-${{ env.id }}-bin
|
||||||
|
|
@ -79,7 +79,7 @@ jobs:
|
||||||
~/.arduino/tests/${{ inputs.chip }}/**/build*.tmp/sdkconfig
|
~/.arduino/tests/${{ inputs.chip }}/**/build*.tmp/sdkconfig
|
||||||
|
|
||||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} binaries as artifacts
|
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} binaries as artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
||||||
overwrite: true
|
overwrite: true
|
||||||
|
|
|
||||||
12
.github/workflows/tests_hw.yml
vendored
12
.github/workflows/tests_hw.yml
vendored
|
|
@ -37,7 +37,7 @@ jobs:
|
||||||
- name: Check if already passed
|
- name: Check if already passed
|
||||||
id: cache-results
|
id: cache-results
|
||||||
if: github.event.pull_request.number != null
|
if: github.event.pull_request.number != null
|
||||||
uses: actions/cache/restore@v4
|
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
with:
|
with:
|
||||||
key: tests-${{ env.id }}-results-hw
|
key: tests-${{ env.id }}-results-hw
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -59,13 +59,13 @@ jobs:
|
||||||
|
|
||||||
- name: Checkout user repository
|
- name: Checkout user repository
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
sparse-checkout: |
|
sparse-checkout: |
|
||||||
*
|
*
|
||||||
|
|
||||||
# setup-python currently only works on ubuntu images
|
# setup-python currently only works on ubuntu images
|
||||||
# - uses: actions/setup-python@v5
|
# - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
# if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
# if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
# with:
|
# with:
|
||||||
# cache-dependency-path: tests/requirements.txt
|
# cache-dependency-path: tests/requirements.txt
|
||||||
|
|
@ -82,7 +82,7 @@ jobs:
|
||||||
|
|
||||||
- name: Get binaries
|
- name: Get binaries
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
with:
|
with:
|
||||||
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -99,7 +99,7 @@ jobs:
|
||||||
bash .github/scripts/tests_run.sh -c -type ${{ inputs.type }} -t ${{ inputs.chip }} -i 0 -m 1 -e
|
bash .github/scripts/tests_run.sh -c -type ${{ inputs.type }} -t ${{ inputs.chip }} -i 0 -m 1 -e
|
||||||
|
|
||||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} hardware results as cache
|
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} hardware results as cache
|
||||||
uses: actions/cache/save@v4
|
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
if: steps.check-tests.outputs.enabled == 'true' && github.event.pull_request.number != null
|
if: steps.check-tests.outputs.enabled == 'true' && github.event.pull_request.number != null
|
||||||
with:
|
with:
|
||||||
key: tests-${{ env.id }}-results-hw
|
key: tests-${{ env.id }}-results-hw
|
||||||
|
|
@ -108,7 +108,7 @@ jobs:
|
||||||
tests/**/result_*.json
|
tests/**/result_*.json
|
||||||
|
|
||||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} hardware results as artifacts
|
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} hardware results as artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
name: tests-results-hw-${{ inputs.chip }}-${{ inputs.type }}
|
name: tests-results-hw-${{ inputs.chip }}-${{ inputs.type }}
|
||||||
|
|
|
||||||
18
.github/workflows/tests_qemu.yml
vendored
18
.github/workflows/tests_qemu.yml
vendored
|
|
@ -21,7 +21,7 @@ jobs:
|
||||||
- name: Check if already passed
|
- name: Check if already passed
|
||||||
id: get-cache-results
|
id: get-cache-results
|
||||||
if: github.event.pull_request.number != null
|
if: github.event.pull_request.number != null
|
||||||
uses: actions/cache/restore@v4
|
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
with:
|
with:
|
||||||
key: tests-${{ env.id }}-results-qemu
|
key: tests-${{ env.id }}-results-qemu
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -43,7 +43,7 @@ jobs:
|
||||||
|
|
||||||
- name: Checkout user repository
|
- name: Checkout user repository
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
@ -60,7 +60,7 @@ jobs:
|
||||||
cd .github
|
cd .github
|
||||||
curl https://codeload.github.com/${{ github.repository }}/tar.gz/master | tar -xz --strip=2 arduino-esp32-master/.github
|
curl https://codeload.github.com/${{ github.repository }}/tar.gz/master | tar -xz --strip=2 arduino-esp32-master/.github
|
||||||
|
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
with:
|
with:
|
||||||
cache-dependency-path: tests/requirements.txt
|
cache-dependency-path: tests/requirements.txt
|
||||||
|
|
@ -74,14 +74,14 @@ jobs:
|
||||||
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
|
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
|
||||||
|
|
||||||
- name: Install APT dependencies
|
- name: Install APT dependencies
|
||||||
uses: awalsh128/cache-apt-pkgs-action@v1.4.2
|
uses: awalsh128/cache-apt-pkgs-action@5902b33ae29014e6ca012c5d8025d4346556bd40 # v1.4.3
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
with:
|
with:
|
||||||
packages: libpixman-1-0 libnuma1 libglib2.0-0 libslirp0 libsdl2-2.0-0
|
packages: libpixman-1-0 libnuma1 libglib2.0-0 libslirp0 libsdl2-2.0-0
|
||||||
version: 1.0
|
version: 1.0
|
||||||
|
|
||||||
- name: Get QEMU version
|
- name: Get QEMU version
|
||||||
uses: pozetroninc/github-action-get-latest-release@v0.7.0
|
uses: pozetroninc/github-action-get-latest-release@2a61c339ea7ef0a336d1daa35ef0cb1418e7676c # v0.8.0
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
id: get-qemu-version
|
id: get-qemu-version
|
||||||
with:
|
with:
|
||||||
|
|
@ -92,7 +92,7 @@ jobs:
|
||||||
|
|
||||||
- name: Cache QEMU
|
- name: Cache QEMU
|
||||||
id: cache-qemu
|
id: cache-qemu
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -113,7 +113,7 @@ jobs:
|
||||||
|
|
||||||
- name: Get binaries
|
- name: Get binaries
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
with:
|
with:
|
||||||
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -124,7 +124,7 @@ jobs:
|
||||||
run: QEMU_PATH="${{ env.QEMU_INSTALL_PATH }}" bash .github/scripts/tests_run.sh -c -type ${{inputs.type}} -t ${{inputs.chip}} -i 0 -m 1 -Q
|
run: QEMU_PATH="${{ env.QEMU_INSTALL_PATH }}" bash .github/scripts/tests_run.sh -c -type ${{inputs.type}} -t ${{inputs.chip}} -i 0 -m 1 -Q
|
||||||
|
|
||||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} QEMU results as cache
|
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} QEMU results as cache
|
||||||
uses: actions/cache/save@v4
|
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
if: steps.check-tests.outputs.enabled == 'true' && github.event.pull_request.number != null
|
if: steps.check-tests.outputs.enabled == 'true' && github.event.pull_request.number != null
|
||||||
with:
|
with:
|
||||||
key: tests-${{ env.id }}-results-qemu
|
key: tests-${{ env.id }}-results-qemu
|
||||||
|
|
@ -133,7 +133,7 @@ jobs:
|
||||||
tests/**/result_*.json
|
tests/**/result_*.json
|
||||||
|
|
||||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} QEMU results as artifacts
|
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} QEMU results as artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
name: tests-results-qemu-${{ inputs.chip }}-${{ inputs.type }}
|
name: tests-results-qemu-${{ inputs.chip }}-${{ inputs.type }}
|
||||||
|
|
|
||||||
14
.github/workflows/tests_results.yml
vendored
14
.github/workflows/tests_results.yml
vendored
|
|
@ -24,12 +24,12 @@ jobs:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: gh-pages
|
ref: gh-pages
|
||||||
|
|
||||||
- name: Download and Extract Artifacts
|
- name: Download and Extract Artifacts
|
||||||
uses: dawidd6/action-download-artifact@v6
|
uses: dawidd6/action-download-artifact@07ab29fd4a977ae4d2b275087cf67563dfdf0295 # v9
|
||||||
with:
|
with:
|
||||||
run_id: ${{ github.event.workflow_run.id }}
|
run_id: ${{ github.event.workflow_run.id }}
|
||||||
path: ./artifacts
|
path: ./artifacts
|
||||||
|
|
@ -83,7 +83,7 @@ jobs:
|
||||||
echo "Wokwi tests: https://github.com/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}"
|
echo "Wokwi tests: https://github.com/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}"
|
||||||
|
|
||||||
- name: Publish Unit Test Results
|
- name: Publish Unit Test Results
|
||||||
uses: EnricoMi/publish-unit-test-result-action@v2
|
uses: EnricoMi/publish-unit-test-result-action@170bf24d20d201b842d7a52403b73ed297e6645b # v2.18.0
|
||||||
with:
|
with:
|
||||||
commit: ${{ env.original_sha }}
|
commit: ${{ env.original_sha }}
|
||||||
event_file: ./artifacts/parent-artifacts/event_file/event.json
|
event_file: ./artifacts/parent-artifacts/event_file/event.json
|
||||||
|
|
@ -95,7 +95,7 @@ jobs:
|
||||||
json_suite_details: true
|
json_suite_details: true
|
||||||
|
|
||||||
- name: Upload JSON
|
- name: Upload JSON
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
with:
|
with:
|
||||||
name: unity_results
|
name: unity_results
|
||||||
|
|
@ -109,7 +109,7 @@ jobs:
|
||||||
|
|
||||||
- name: Clean up caches
|
- name: Clean up caches
|
||||||
if: always()
|
if: always()
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const ref = process.env.original_ref;
|
const ref = process.env.original_ref;
|
||||||
|
|
@ -139,7 +139,7 @@ jobs:
|
||||||
});
|
});
|
||||||
|
|
||||||
- name: Report conclusion
|
- name: Report conclusion
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -175,7 +175,7 @@ jobs:
|
||||||
|
|
||||||
- name: Generate badge
|
- name: Generate badge
|
||||||
if: ${{ !cancelled() && (env.original_event == 'schedule' || env.original_event == 'workflow_dispatch') }} # codespell:ignore cancelled
|
if: ${{ !cancelled() && (env.original_event == 'schedule' || env.original_event == 'workflow_dispatch') }} # codespell:ignore cancelled
|
||||||
uses: jaywcjlove/generated-badges@v1.0.13
|
uses: jaywcjlove/generated-badges@0e078ae4d4bab3777ea4f137de496ab44688f5ad # v1.0.13
|
||||||
with:
|
with:
|
||||||
label: Runtime Tests
|
label: Runtime Tests
|
||||||
status: ${{ job.status == 'success' && 'passing' || 'failing' }}
|
status: ${{ job.status == 'success' && 'passing' || 'failing' }}
|
||||||
|
|
|
||||||
32
.github/workflows/tests_wokwi.yml
vendored
32
.github/workflows/tests_wokwi.yml
vendored
|
|
@ -27,7 +27,7 @@ jobs:
|
||||||
types: ${{ steps.set-ref.outputs.types }}
|
types: ${{ steps.set-ref.outputs.types }}
|
||||||
steps:
|
steps:
|
||||||
- name: Report pending
|
- name: Report pending
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const owner = '${{ github.repository_owner }}';
|
const owner = '${{ github.repository_owner }}';
|
||||||
|
|
@ -47,7 +47,7 @@ jobs:
|
||||||
core.info(`${name} is ${state}`);
|
core.info(`${name} is ${state}`);
|
||||||
|
|
||||||
- name: Download and extract event file
|
- name: Download and extract event file
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run-id: ${{ github.event.workflow_run.id }}
|
run-id: ${{ github.event.workflow_run.id }}
|
||||||
|
|
@ -55,7 +55,7 @@ jobs:
|
||||||
path: artifacts/event_file
|
path: artifacts/event_file
|
||||||
|
|
||||||
- name: Download and extract matrix info
|
- name: Download and extract matrix info
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run-id: ${{ github.event.workflow_run.id }}
|
run-id: ${{ github.event.workflow_run.id }}
|
||||||
|
|
@ -130,7 +130,7 @@ jobs:
|
||||||
echo "ref=$ref" >> $GITHUB_OUTPUT
|
echo "ref=$ref" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Download and extract parent hardware results
|
- name: Download and extract parent hardware results
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
@ -140,7 +140,7 @@ jobs:
|
||||||
path: artifacts/results/hw
|
path: artifacts/results/hw
|
||||||
|
|
||||||
- name: Download and extract parent QEMU results
|
- name: Download and extract parent QEMU results
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
@ -150,14 +150,14 @@ jobs:
|
||||||
path: artifacts/results/qemu
|
path: artifacts/results/qemu
|
||||||
|
|
||||||
- name: Upload parent artifacts
|
- name: Upload parent artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: parent-artifacts
|
name: parent-artifacts
|
||||||
path: artifacts
|
path: artifacts
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Report conclusion
|
- name: Report conclusion
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -197,7 +197,7 @@ jobs:
|
||||||
chip: ${{ fromJson(needs.get-artifacts.outputs.targets) }}
|
chip: ${{ fromJson(needs.get-artifacts.outputs.targets) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Report pending
|
- name: Report pending
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const owner = '${{ github.repository_owner }}';
|
const owner = '${{ github.repository_owner }}';
|
||||||
|
|
@ -219,7 +219,7 @@ jobs:
|
||||||
- name: Check if already passed
|
- name: Check if already passed
|
||||||
id: get-cache-results
|
id: get-cache-results
|
||||||
if: needs.get-artifacts.outputs.pr_num
|
if: needs.get-artifacts.outputs.pr_num
|
||||||
uses: actions/cache/restore@v4
|
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
with:
|
with:
|
||||||
key: tests-${{ env.id }}-results-wokwi
|
key: tests-${{ env.id }}-results-wokwi
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -243,11 +243,11 @@ jobs:
|
||||||
# DO NOT CHECKOUT THE USER'S REPOSITORY IN THIS WORKFLOW. IT HAS HIGH SECURITY RISKS.
|
# DO NOT CHECKOUT THE USER'S REPOSITORY IN THIS WORKFLOW. IT HAS HIGH SECURITY RISKS.
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ needs.get-artifacts.outputs.base || github.ref }}
|
ref: ${{ needs.get-artifacts.outputs.base || github.ref }}
|
||||||
|
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.0.4
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
with:
|
with:
|
||||||
cache-dependency-path: tests/requirements.txt
|
cache-dependency-path: tests/requirements.txt
|
||||||
|
|
@ -266,11 +266,11 @@ jobs:
|
||||||
|
|
||||||
- name: Wokwi CI Server
|
- name: Wokwi CI Server
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
uses: wokwi/wokwi-ci-server-action@v1
|
uses: wokwi/wokwi-ci-server-action@a6fabb5a49e080158c7a1d121ea5b789536a82c3 # v1
|
||||||
|
|
||||||
- name: Get binaries
|
- name: Get binaries
|
||||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run-id: ${{ github.event.workflow_run.id }}
|
run-id: ${{ github.event.workflow_run.id }}
|
||||||
|
|
@ -286,7 +286,7 @@ jobs:
|
||||||
bash .github/scripts/tests_run.sh -c -type ${{ matrix.type }} -t ${{ matrix.chip }} -i 0 -m 1 -W ${{ env.WOKWI_TIMEOUT }}
|
bash .github/scripts/tests_run.sh -c -type ${{ matrix.type }} -t ${{ matrix.chip }} -i 0 -m 1 -W ${{ env.WOKWI_TIMEOUT }}
|
||||||
|
|
||||||
- name: Upload ${{ matrix.chip }} ${{ matrix.type }} Wokwi results as cache
|
- name: Upload ${{ matrix.chip }} ${{ matrix.type }} Wokwi results as cache
|
||||||
uses: actions/cache/save@v4
|
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
|
||||||
if: steps.check-tests.outputs.enabled == 'true' && needs.get-artifacts.outputs.pr_num
|
if: steps.check-tests.outputs.enabled == 'true' && needs.get-artifacts.outputs.pr_num
|
||||||
with:
|
with:
|
||||||
key: tests-${{ env.id }}-results-wokwi
|
key: tests-${{ env.id }}-results-wokwi
|
||||||
|
|
@ -295,7 +295,7 @@ jobs:
|
||||||
tests/**/result_*.json
|
tests/**/result_*.json
|
||||||
|
|
||||||
- name: Upload ${{ matrix.chip }} ${{ matrix.type }} Wokwi results as artifacts
|
- name: Upload ${{ matrix.chip }} ${{ matrix.type }} Wokwi results as artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
name: tests-results-wokwi-${{ matrix.chip }}-${{ matrix.type }}
|
name: tests-results-wokwi-${{ matrix.chip }}-${{ matrix.type }}
|
||||||
|
|
@ -305,7 +305,7 @@ jobs:
|
||||||
tests/**/result_*.json
|
tests/**/result_*.json
|
||||||
|
|
||||||
- name: Report conclusion
|
- name: Report conclusion
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
|
||||||
4
.github/workflows/upload-idf-component.yml
vendored
4
.github/workflows/upload-idf-component.yml
vendored
|
|
@ -45,13 +45,13 @@ jobs:
|
||||||
echo "Tag: $tag"
|
echo "Tag: $tag"
|
||||||
echo "RELEASE_TAG=$tag" >> $GITHUB_ENV
|
echo "RELEASE_TAG=$tag" >> $GITHUB_ENV
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
ref: ${{ inputs.git_ref || env.RELEASE_TAG }}
|
ref: ${{ inputs.git_ref || env.RELEASE_TAG }}
|
||||||
submodules: "recursive"
|
submodules: "recursive"
|
||||||
|
|
||||||
- name: Upload components to the component registry
|
- name: Upload components to the component registry
|
||||||
uses: espressif/upload-components-ci-action@v1
|
uses: espressif/upload-components-ci-action@b78a19fa5424714997596d3ecffa634aef8ae20b # v1.0.5
|
||||||
with:
|
with:
|
||||||
name: arduino-esp32
|
name: arduino-esp32
|
||||||
version: ${{ env.RELEASE_TAG }}
|
version: ${{ env.RELEASE_TAG }}
|
||||||
|
|
|
||||||
|
|
@ -299,6 +299,7 @@ set(ARDUINO_LIBRARY_Zigbee_SRCS
|
||||||
libraries/Zigbee/src/ep/ZigbeeRangeExtender.cpp
|
libraries/Zigbee/src/ep/ZigbeeRangeExtender.cpp
|
||||||
libraries/Zigbee/src/ep/ZigbeeGateway.cpp
|
libraries/Zigbee/src/ep/ZigbeeGateway.cpp
|
||||||
libraries/Zigbee/src/ep/ZigbeeWindSpeedSensor.cpp
|
libraries/Zigbee/src/ep/ZigbeeWindSpeedSensor.cpp
|
||||||
|
libraries/Zigbee/src/ep/ZigbeeIlluminanceSensor.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(ARDUINO_LIBRARY_BLE_SRCS
|
set(ARDUINO_LIBRARY_BLE_SRCS
|
||||||
|
|
|
||||||
14
boards.txt
14
boards.txt
|
|
@ -1151,6 +1151,9 @@ esp32s3.menu.PartitionScheme.app5M_fat24M_32MB.upload.maximum_size=4718592
|
||||||
esp32s3.menu.PartitionScheme.app5M_little24M_32MB=32M Flash (4.8MB APP/22MB LittleFS)
|
esp32s3.menu.PartitionScheme.app5M_little24M_32MB=32M Flash (4.8MB APP/22MB LittleFS)
|
||||||
esp32s3.menu.PartitionScheme.app5M_little24M_32MB.build.partitions=large_littlefs_32MB
|
esp32s3.menu.PartitionScheme.app5M_little24M_32MB.build.partitions=large_littlefs_32MB
|
||||||
esp32s3.menu.PartitionScheme.app5M_little24M_32MB.upload.maximum_size=4718592
|
esp32s3.menu.PartitionScheme.app5M_little24M_32MB.upload.maximum_size=4718592
|
||||||
|
esp32s3.menu.PartitionScheme.app13M_data7M_32MB=32M Flash (13MB APP/6.75MB SPIFFS)
|
||||||
|
esp32s3.menu.PartitionScheme.app13M_data7M_32MB.build.partitions=default_32MB
|
||||||
|
esp32s3.menu.PartitionScheme.app13M_data7M_32MB.upload.maximum_size=13107200
|
||||||
esp32s3.menu.PartitionScheme.esp_sr_16=ESP SR 16M (3MB APP/7MB SPIFFS/2.9MB MODEL)
|
esp32s3.menu.PartitionScheme.esp_sr_16=ESP SR 16M (3MB APP/7MB SPIFFS/2.9MB MODEL)
|
||||||
esp32s3.menu.PartitionScheme.esp_sr_16.upload.maximum_size=3145728
|
esp32s3.menu.PartitionScheme.esp_sr_16.upload.maximum_size=3145728
|
||||||
esp32s3.menu.PartitionScheme.esp_sr_16.upload.extra_flags=0xD10000 {build.path}/srmodels.bin
|
esp32s3.menu.PartitionScheme.esp_sr_16.upload.extra_flags=0xD10000 {build.path}/srmodels.bin
|
||||||
|
|
@ -2359,6 +2362,9 @@ esp32s3-octal.menu.PartitionScheme.app5M_fat24M_32MB.upload.maximum_size=4718592
|
||||||
esp32s3-octal.menu.PartitionScheme.app5M_little24M_32MB=32M Flash (4.8MB APP/22MB LittleFS)
|
esp32s3-octal.menu.PartitionScheme.app5M_little24M_32MB=32M Flash (4.8MB APP/22MB LittleFS)
|
||||||
esp32s3-octal.menu.PartitionScheme.app5M_little24M_32MB.build.partitions=large_littlefs_32MB
|
esp32s3-octal.menu.PartitionScheme.app5M_little24M_32MB.build.partitions=large_littlefs_32MB
|
||||||
esp32s3-octal.menu.PartitionScheme.app5M_little24M_32MB.upload.maximum_size=4718592
|
esp32s3-octal.menu.PartitionScheme.app5M_little24M_32MB.upload.maximum_size=4718592
|
||||||
|
esp32s3-octal.menu.PartitionScheme.app13M_data7M_32MB=32M Flash (13MB APP/6.75MB SPIFFS)
|
||||||
|
esp32s3-octal.menu.PartitionScheme.app13M_data7M_32MB.build.partitions=default_32MB
|
||||||
|
esp32s3-octal.menu.PartitionScheme.app13M_data7M_32MB.upload.maximum_size=13107200
|
||||||
|
|
||||||
esp32s3-octal.menu.CPUFreq.240=240MHz (WiFi)
|
esp32s3-octal.menu.CPUFreq.240=240MHz (WiFi)
|
||||||
esp32s3-octal.menu.CPUFreq.240.build.f_cpu=240000000L
|
esp32s3-octal.menu.CPUFreq.240.build.f_cpu=240000000L
|
||||||
|
|
@ -35469,6 +35475,8 @@ XIAO_ESP32S3_Plus.menu.FlashMode.dio.build.flash_freq=80m
|
||||||
|
|
||||||
XIAO_ESP32S3_Plus.menu.FlashSize.8M=8MB (64Mb)
|
XIAO_ESP32S3_Plus.menu.FlashSize.8M=8MB (64Mb)
|
||||||
XIAO_ESP32S3_Plus.menu.FlashSize.8M.build.flash_size=8MB
|
XIAO_ESP32S3_Plus.menu.FlashSize.8M.build.flash_size=8MB
|
||||||
|
XIAO_ESP32S3_Plus.menu.FlashSize.16M=16MB (128Mb)
|
||||||
|
XIAO_ESP32S3_Plus.menu.FlashSize.16M.build.flash_size=16MB
|
||||||
|
|
||||||
XIAO_ESP32S3_Plus.menu.LoopCore.1=Core 1
|
XIAO_ESP32S3_Plus.menu.LoopCore.1=Core 1
|
||||||
XIAO_ESP32S3_Plus.menu.LoopCore.1.build.loop_core=-DARDUINO_RUNNING_CORE=1
|
XIAO_ESP32S3_Plus.menu.LoopCore.1.build.loop_core=-DARDUINO_RUNNING_CORE=1
|
||||||
|
|
@ -35507,6 +35515,12 @@ XIAO_ESP32S3_Plus.menu.UploadMode.cdc=USB-OTG CDC (TinyUSB)
|
||||||
XIAO_ESP32S3_Plus.menu.UploadMode.cdc.upload.use_1200bps_touch=true
|
XIAO_ESP32S3_Plus.menu.UploadMode.cdc.upload.use_1200bps_touch=true
|
||||||
XIAO_ESP32S3_Plus.menu.UploadMode.cdc.upload.wait_for_upload_port=true
|
XIAO_ESP32S3_Plus.menu.UploadMode.cdc.upload.wait_for_upload_port=true
|
||||||
|
|
||||||
|
XIAO_ESP32S3_Plus.menu.PartitionScheme.fatflash=16M Flash (2MB APP/12.5MB FATFS)
|
||||||
|
XIAO_ESP32S3_Plus.menu.PartitionScheme.fatflash.build.partitions=ffat
|
||||||
|
XIAO_ESP32S3_Plus.menu.PartitionScheme.fatflash.upload.maximum_size=2097152
|
||||||
|
XIAO_ESP32S3_Plus.menu.PartitionScheme.app3M_fat9M_16MB=16M Flash (3MB APP/9.9MB FATFS)
|
||||||
|
XIAO_ESP32S3_Plus.menu.PartitionScheme.app3M_fat9M_16MB.build.partitions=app3M_fat9M_16MB
|
||||||
|
XIAO_ESP32S3_Plus.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728
|
||||||
XIAO_ESP32S3_Plus.menu.PartitionScheme.default_8MB=Default with spiffs (3MB APP/1.5MB SPIFFS)
|
XIAO_ESP32S3_Plus.menu.PartitionScheme.default_8MB=Default with spiffs (3MB APP/1.5MB SPIFFS)
|
||||||
XIAO_ESP32S3_Plus.menu.PartitionScheme.default_8MB.build.partitions=default_8MB
|
XIAO_ESP32S3_Plus.menu.PartitionScheme.default_8MB.build.partitions=default_8MB
|
||||||
XIAO_ESP32S3_Plus.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336
|
XIAO_ESP32S3_Plus.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,8 @@ void printRunningTasks(Print &printer) {
|
||||||
#endif
|
#endif
|
||||||
configRUN_TIME_COUNTER_TYPE ulTotalRunTime = 0;
|
configRUN_TIME_COUNTER_TYPE ulTotalRunTime = 0;
|
||||||
TaskStatus_t *pxTaskStatusArray = NULL;
|
TaskStatus_t *pxTaskStatusArray = NULL;
|
||||||
volatile UBaseType_t uxArraySize = 0, x = 0;
|
volatile UBaseType_t uxArraySize = 0;
|
||||||
|
uint32_t x = 0;
|
||||||
const char *taskStates[] = {"Running", "Ready", "Blocked", "Suspended", "Deleted", "Invalid"};
|
const char *taskStates[] = {"Running", "Ready", "Blocked", "Suspended", "Deleted", "Invalid"};
|
||||||
|
|
||||||
// Take a snapshot of the number of tasks in case it changes while this function is executing.
|
// Take a snapshot of the number of tasks in case it changes while this function is executing.
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,7 @@ void BLEAdvertising::setScanFilter(bool scanRequestWhitelistOnly, bool connectWh
|
||||||
* @brief Set the advertisement data that is to be published in a regular advertisement.
|
* @brief Set the advertisement data that is to be published in a regular advertisement.
|
||||||
* @param [in] advertisementData The data to be advertised.
|
* @param [in] advertisementData The data to be advertised.
|
||||||
*/
|
*/
|
||||||
void BLEAdvertising::setAdvertisementData(BLEAdvertisementData &advertisementData) {
|
bool BLEAdvertising::setAdvertisementData(BLEAdvertisementData &advertisementData) {
|
||||||
log_v(">> setAdvertisementData");
|
log_v(">> setAdvertisementData");
|
||||||
esp_err_t errRc = ::esp_ble_gap_config_adv_data_raw((uint8_t *)advertisementData.getPayload().c_str(), advertisementData.getPayload().length());
|
esp_err_t errRc = ::esp_ble_gap_config_adv_data_raw((uint8_t *)advertisementData.getPayload().c_str(), advertisementData.getPayload().length());
|
||||||
if (errRc != ESP_OK) {
|
if (errRc != ESP_OK) {
|
||||||
|
|
@ -191,13 +191,14 @@ void BLEAdvertising::setAdvertisementData(BLEAdvertisementData &advertisementDat
|
||||||
}
|
}
|
||||||
m_customAdvData = true; // Set the flag that indicates we are using custom advertising data.
|
m_customAdvData = true; // Set the flag that indicates we are using custom advertising data.
|
||||||
log_v("<< setAdvertisementData");
|
log_v("<< setAdvertisementData");
|
||||||
|
return ESP_OK == errRc;
|
||||||
} // setAdvertisementData
|
} // setAdvertisementData
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set the advertisement data that is to be published in a scan response.
|
* @brief Set the advertisement data that is to be published in a scan response.
|
||||||
* @param [in] advertisementData The data to be advertised.
|
* @param [in] advertisementData The data to be advertised.
|
||||||
*/
|
*/
|
||||||
void BLEAdvertising::setScanResponseData(BLEAdvertisementData &advertisementData) {
|
bool BLEAdvertising::setScanResponseData(BLEAdvertisementData &advertisementData) {
|
||||||
log_v(">> setScanResponseData");
|
log_v(">> setScanResponseData");
|
||||||
esp_err_t errRc = ::esp_ble_gap_config_scan_rsp_data_raw((uint8_t *)advertisementData.getPayload().c_str(), advertisementData.getPayload().length());
|
esp_err_t errRc = ::esp_ble_gap_config_scan_rsp_data_raw((uint8_t *)advertisementData.getPayload().c_str(), advertisementData.getPayload().length());
|
||||||
if (errRc != ESP_OK) {
|
if (errRc != ESP_OK) {
|
||||||
|
|
@ -205,6 +206,7 @@ void BLEAdvertising::setScanResponseData(BLEAdvertisementData &advertisementData
|
||||||
}
|
}
|
||||||
m_customScanResponseData = true; // Set the flag that indicates we are using custom scan response data.
|
m_customScanResponseData = true; // Set the flag that indicates we are using custom scan response data.
|
||||||
log_v("<< setScanResponseData");
|
log_v("<< setScanResponseData");
|
||||||
|
return ESP_OK == errRc;
|
||||||
} // setScanResponseData
|
} // setScanResponseData
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -212,7 +214,7 @@ void BLEAdvertising::setScanResponseData(BLEAdvertisementData &advertisementData
|
||||||
* Start advertising.
|
* Start advertising.
|
||||||
* @return N/A.
|
* @return N/A.
|
||||||
*/
|
*/
|
||||||
void BLEAdvertising::start() {
|
bool BLEAdvertising::start() {
|
||||||
log_v(">> start: customAdvData: %d, customScanResponseData: %d", m_customAdvData, m_customScanResponseData);
|
log_v(">> start: customAdvData: %d, customScanResponseData: %d", m_customAdvData, m_customScanResponseData);
|
||||||
|
|
||||||
// We have a vector of service UUIDs that we wish to advertise. In order to use the
|
// We have a vector of service UUIDs that we wish to advertise. In order to use the
|
||||||
|
|
@ -225,7 +227,7 @@ void BLEAdvertising::start() {
|
||||||
m_advData.p_service_uuid = (uint8_t *)malloc(m_advData.service_uuid_len);
|
m_advData.p_service_uuid = (uint8_t *)malloc(m_advData.service_uuid_len);
|
||||||
if (!m_advData.p_service_uuid) {
|
if (!m_advData.p_service_uuid) {
|
||||||
log_e(">> start failed: out of memory");
|
log_e(">> start failed: out of memory");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t *p = m_advData.p_service_uuid;
|
uint8_t *p = m_advData.p_service_uuid;
|
||||||
|
|
@ -250,7 +252,7 @@ void BLEAdvertising::start() {
|
||||||
errRc = ::esp_ble_gap_config_adv_data(&m_advData);
|
errRc = ::esp_ble_gap_config_adv_data(&m_advData);
|
||||||
if (errRc != ESP_OK) {
|
if (errRc != ESP_OK) {
|
||||||
log_e("<< esp_ble_gap_config_adv_data: rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
log_e("<< esp_ble_gap_config_adv_data: rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -266,7 +268,7 @@ void BLEAdvertising::start() {
|
||||||
errRc = ::esp_ble_gap_config_adv_data(&m_scanRespData);
|
errRc = ::esp_ble_gap_config_adv_data(&m_scanRespData);
|
||||||
if (errRc != ESP_OK) {
|
if (errRc != ESP_OK) {
|
||||||
log_e("<< esp_ble_gap_config_adv_data (Scan response): rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
log_e("<< esp_ble_gap_config_adv_data (Scan response): rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -279,9 +281,10 @@ void BLEAdvertising::start() {
|
||||||
errRc = ::esp_ble_gap_start_advertising(&m_advParams);
|
errRc = ::esp_ble_gap_start_advertising(&m_advParams);
|
||||||
if (errRc != ESP_OK) {
|
if (errRc != ESP_OK) {
|
||||||
log_e("<< esp_ble_gap_start_advertising: rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
log_e("<< esp_ble_gap_start_advertising: rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
||||||
return;
|
} else {
|
||||||
}
|
|
||||||
log_v("<< start");
|
log_v("<< start");
|
||||||
|
}
|
||||||
|
return ESP_OK == errRc;
|
||||||
} // start
|
} // start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -289,14 +292,15 @@ void BLEAdvertising::start() {
|
||||||
* Stop advertising.
|
* Stop advertising.
|
||||||
* @return N/A.
|
* @return N/A.
|
||||||
*/
|
*/
|
||||||
void BLEAdvertising::stop() {
|
bool BLEAdvertising::stop() {
|
||||||
log_v(">> stop");
|
log_v(">> stop");
|
||||||
esp_err_t errRc = ::esp_ble_gap_stop_advertising();
|
esp_err_t errRc = ::esp_ble_gap_stop_advertising();
|
||||||
if (errRc != ESP_OK) {
|
if (errRc != ESP_OK) {
|
||||||
log_e("esp_ble_gap_stop_advertising: rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
log_e("esp_ble_gap_stop_advertising: rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
||||||
return;
|
} else {
|
||||||
}
|
|
||||||
log_v("<< stop");
|
log_v("<< stop");
|
||||||
|
}
|
||||||
|
return ESP_OK == errRc;
|
||||||
} // stop
|
} // stop
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -305,17 +309,17 @@ void BLEAdvertising::stop() {
|
||||||
* @param [in] Bluetooth address type.
|
* @param [in] Bluetooth address type.
|
||||||
* Set BLE address.
|
* Set BLE address.
|
||||||
*/
|
*/
|
||||||
|
bool BLEAdvertising::setDeviceAddress(esp_bd_addr_t addr, esp_ble_addr_type_t type) {
|
||||||
void BLEAdvertising::setDeviceAddress(esp_bd_addr_t addr, esp_ble_addr_type_t type) {
|
|
||||||
log_v(">> setPrivateAddress");
|
log_v(">> setPrivateAddress");
|
||||||
|
|
||||||
m_advParams.own_addr_type = type;
|
m_advParams.own_addr_type = type;
|
||||||
esp_err_t errRc = esp_ble_gap_set_rand_addr((uint8_t *)addr);
|
esp_err_t errRc = esp_ble_gap_set_rand_addr((uint8_t *)addr);
|
||||||
if (errRc != ESP_OK) {
|
if (errRc != ESP_OK) {
|
||||||
log_e("esp_ble_gap_set_rand_addr: rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
log_e("esp_ble_gap_set_rand_addr: rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
|
||||||
return;
|
} else {
|
||||||
}
|
|
||||||
log_v("<< setPrivateAddress");
|
log_v("<< setPrivateAddress");
|
||||||
|
}
|
||||||
|
return ESP_OK == errRc;
|
||||||
} // setPrivateAddress
|
} // setPrivateAddress
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -54,18 +54,18 @@ public:
|
||||||
bool removeServiceUUID(int index);
|
bool removeServiceUUID(int index);
|
||||||
bool removeServiceUUID(BLEUUID serviceUUID);
|
bool removeServiceUUID(BLEUUID serviceUUID);
|
||||||
bool removeServiceUUID(const char *serviceUUID);
|
bool removeServiceUUID(const char *serviceUUID);
|
||||||
void start();
|
bool start();
|
||||||
void stop();
|
bool stop();
|
||||||
void setAppearance(uint16_t appearance);
|
void setAppearance(uint16_t appearance);
|
||||||
void setAdvertisementType(esp_ble_adv_type_t adv_type);
|
void setAdvertisementType(esp_ble_adv_type_t adv_type);
|
||||||
void setAdvertisementChannelMap(esp_ble_adv_channel_t channel_map);
|
void setAdvertisementChannelMap(esp_ble_adv_channel_t channel_map);
|
||||||
void setMaxInterval(uint16_t maxinterval);
|
void setMaxInterval(uint16_t maxinterval);
|
||||||
void setMinInterval(uint16_t mininterval);
|
void setMinInterval(uint16_t mininterval);
|
||||||
void setAdvertisementData(BLEAdvertisementData &advertisementData);
|
bool setAdvertisementData(BLEAdvertisementData &advertisementData);
|
||||||
void setScanFilter(bool scanRequestWhitelistOnly, bool connectWhitelistOnly);
|
void setScanFilter(bool scanRequestWhitelistOnly, bool connectWhitelistOnly);
|
||||||
void setScanResponseData(BLEAdvertisementData &advertisementData);
|
bool setScanResponseData(BLEAdvertisementData &advertisementData);
|
||||||
void setPrivateAddress(esp_ble_addr_type_t type = BLE_ADDR_TYPE_RANDOM);
|
void setPrivateAddress(esp_ble_addr_type_t type = BLE_ADDR_TYPE_RANDOM);
|
||||||
void setDeviceAddress(esp_bd_addr_t addr, esp_ble_addr_type_t type = BLE_ADDR_TYPE_RANDOM);
|
bool setDeviceAddress(esp_bd_addr_t addr, esp_ble_addr_type_t type = BLE_ADDR_TYPE_RANDOM);
|
||||||
|
|
||||||
void handleGAPEvent(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param);
|
void handleGAPEvent(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param);
|
||||||
void setMinPreferred(uint16_t);
|
void setMinPreferred(uint16_t);
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This example demonstrates usage of RMT for receiving XJT D12 data
|
* @brief This example demonstrates usage of RMT for receiving XJT D16 data
|
||||||
*
|
*
|
||||||
* The output is the RMT data read and processed
|
* The output is the RMT data read and processed
|
||||||
*
|
*
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
//
|
//
|
||||||
// Note: This example uses a FrSKY device communication
|
// Note: This example uses a FrSKY device communication
|
||||||
// using XJT D12 protocol
|
// using XJT D16 protocol
|
||||||
//
|
//
|
||||||
// ; 0 bit = 6us low/10us high
|
// ; 0 bit = 6us low/10us high
|
||||||
// ; 1 bit = 14us low/10us high
|
// ; 1 bit = 14us low/10us high
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,8 @@ void ETHClass::_onEthEvent(int32_t event_id, void *event_data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ETHClass::ETHClass(uint8_t eth_index)
|
ETHClass::ETHClass(uint8_t eth_index)
|
||||||
: _eth_handle(NULL), _eth_index(eth_index), _phy_type(ETH_PHY_MAX), _glue_handle(NULL), _mac(NULL), _phy(NULL)
|
: _eth_handle(NULL), _eth_index(eth_index), _phy_type(ETH_PHY_MAX), _glue_handle(NULL), _mac(NULL), _phy(NULL), _eth_started(false), _link_speed(100),
|
||||||
|
_full_duplex(true), _auto_negotiation(true)
|
||||||
#if ETH_SPI_SUPPORTS_CUSTOM
|
#if ETH_SPI_SUPPORTS_CUSTOM
|
||||||
,
|
,
|
||||||
_spi(NULL)
|
_spi(NULL)
|
||||||
|
|
@ -136,7 +137,7 @@ ETHClass::ETHClass(uint8_t eth_index)
|
||||||
_pin_mcd(-1), _pin_mdio(-1), _pin_power(-1), _pin_rmii_clock(-1)
|
_pin_mcd(-1), _pin_mdio(-1), _pin_power(-1), _pin_rmii_clock(-1)
|
||||||
#endif /* CONFIG_ETH_USE_ESP32_EMAC */
|
#endif /* CONFIG_ETH_USE_ESP32_EMAC */
|
||||||
,
|
,
|
||||||
_task_stack_size(4096) {
|
_task_stack_size(4096), _eth_connected_event_handle(0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ETHClass::~ETHClass() {}
|
ETHClass::~ETHClass() {}
|
||||||
|
|
@ -351,6 +352,19 @@ bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int mdc, int mdio, i
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// auto negotiation needs to be disabled to change duplex mode and link speed
|
||||||
|
if (!_auto_negotiation) {
|
||||||
|
if (!_setAutoNegotiation(_auto_negotiation)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!_setFullDuplex(_full_duplex)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!_setLinkSpeed(_link_speed)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (_eth_ev_instance == NULL && esp_event_handler_instance_register(ETH_EVENT, ESP_EVENT_ANY_ID, &_eth_event_cb, NULL, &_eth_ev_instance)) {
|
if (_eth_ev_instance == NULL && esp_event_handler_instance_register(ETH_EVENT, ESP_EVENT_ANY_ID, &_eth_event_cb, NULL, &_eth_ev_instance)) {
|
||||||
log_e("event_handler_instance_register for ETH_EVENT Failed!");
|
log_e("event_handler_instance_register for ETH_EVENT Failed!");
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -359,7 +373,7 @@ bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int mdc, int mdio, i
|
||||||
/* attach to receive events */
|
/* attach to receive events */
|
||||||
initNetif((Network_Interface_ID)(ESP_NETIF_ID_ETH + _eth_index));
|
initNetif((Network_Interface_ID)(ESP_NETIF_ID_ETH + _eth_index));
|
||||||
|
|
||||||
Network.onSysEvent(onEthConnected, ARDUINO_EVENT_ETH_CONNECTED);
|
_eth_connected_event_handle = Network.onSysEvent(onEthConnected, ARDUINO_EVENT_ETH_CONNECTED);
|
||||||
|
|
||||||
ret = esp_eth_start(_eth_handle);
|
ret = esp_eth_start(_eth_handle);
|
||||||
if (ret != ESP_OK) {
|
if (ret != ESP_OK) {
|
||||||
|
|
@ -367,6 +381,8 @@ bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int mdc, int mdio, i
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_eth_started = true;
|
||||||
|
|
||||||
if (!perimanSetPinBus(_pin_rmii_clock, ESP32_BUS_TYPE_ETHERNET_CLK, (void *)(this), -1, -1)) {
|
if (!perimanSetPinBus(_pin_rmii_clock, ESP32_BUS_TYPE_ETHERNET_CLK, (void *)(this), -1, -1)) {
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
@ -788,6 +804,19 @@ bool ETHClass::beginSPI(
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// auto negotiation needs to be disabled to change duplex mode and link speed
|
||||||
|
if (!_auto_negotiation) {
|
||||||
|
if (!_setAutoNegotiation(_auto_negotiation)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!_setFullDuplex(_full_duplex)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!_setLinkSpeed(_link_speed)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (_eth_ev_instance == NULL && esp_event_handler_instance_register(ETH_EVENT, ESP_EVENT_ANY_ID, &_eth_event_cb, NULL, &_eth_ev_instance)) {
|
if (_eth_ev_instance == NULL && esp_event_handler_instance_register(ETH_EVENT, ESP_EVENT_ANY_ID, &_eth_event_cb, NULL, &_eth_ev_instance)) {
|
||||||
log_e("event_handler_instance_register for ETH_EVENT Failed!");
|
log_e("event_handler_instance_register for ETH_EVENT Failed!");
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -803,6 +832,8 @@ bool ETHClass::beginSPI(
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_eth_started = true;
|
||||||
|
|
||||||
// If Arduino's SPI is used, cs pin is in GPIO mode
|
// If Arduino's SPI is used, cs pin is in GPIO mode
|
||||||
#if ETH_SPI_SUPPORTS_CUSTOM
|
#if ETH_SPI_SUPPORTS_CUSTOM
|
||||||
if (_spi == NULL) {
|
if (_spi == NULL) {
|
||||||
|
|
@ -849,7 +880,7 @@ bool ETHClass::beginSPI(
|
||||||
perimanSetPinBusExtraType(_pin_rst, "ETH_RST");
|
perimanSetPinBusExtraType(_pin_rst, "ETH_RST");
|
||||||
}
|
}
|
||||||
|
|
||||||
Network.onSysEvent(onEthConnected, ARDUINO_EVENT_ETH_CONNECTED);
|
_eth_connected_event_handle = Network.onSysEvent(onEthConnected, ARDUINO_EVENT_ETH_CONNECTED);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
@ -885,7 +916,8 @@ static bool empty_ethDetachBus(void *bus_pointer) {
|
||||||
|
|
||||||
void ETHClass::end(void) {
|
void ETHClass::end(void) {
|
||||||
|
|
||||||
Network.removeEvent(onEthConnected, ARDUINO_EVENT_ETH_CONNECTED);
|
Network.removeEvent(_eth_connected_event_handle);
|
||||||
|
_eth_connected_event_handle = 0;
|
||||||
|
|
||||||
if (_eth_handle != NULL) {
|
if (_eth_handle != NULL) {
|
||||||
if (esp_eth_stop(_eth_handle) != ESP_OK) {
|
if (esp_eth_stop(_eth_handle) != ESP_OK) {
|
||||||
|
|
@ -896,6 +928,9 @@ void ETHClass::end(void) {
|
||||||
while (getStatusBits() & ESP_NETIF_STARTED_BIT) {
|
while (getStatusBits() & ESP_NETIF_STARTED_BIT) {
|
||||||
delay(10);
|
delay(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_eth_started = false;
|
||||||
|
|
||||||
//delete glue first
|
//delete glue first
|
||||||
if (_glue_handle != NULL) {
|
if (_glue_handle != NULL) {
|
||||||
if (esp_eth_del_netif_glue(_glue_handle) != ESP_OK) {
|
if (esp_eth_del_netif_glue(_glue_handle) != ESP_OK) {
|
||||||
|
|
@ -1009,7 +1044,7 @@ bool ETHClass::fullDuplex() const {
|
||||||
return (link_duplex == ETH_DUPLEX_FULL);
|
return (link_duplex == ETH_DUPLEX_FULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ETHClass::setFullDuplex(bool on) {
|
bool ETHClass::_setFullDuplex(bool on) {
|
||||||
if (_eth_handle == NULL) {
|
if (_eth_handle == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -1021,6 +1056,18 @@ bool ETHClass::setFullDuplex(bool on) {
|
||||||
return err == ESP_OK;
|
return err == ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ETHClass::setFullDuplex(bool on) {
|
||||||
|
if (_eth_started) {
|
||||||
|
log_e("This method must be called before ETH.begin()");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (_auto_negotiation) {
|
||||||
|
log_w("Auto Negotiation MUST be OFF for this setting to be applied");
|
||||||
|
}
|
||||||
|
_full_duplex = on;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool ETHClass::autoNegotiation() const {
|
bool ETHClass::autoNegotiation() const {
|
||||||
if (_eth_handle == NULL) {
|
if (_eth_handle == NULL) {
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -1030,7 +1077,7 @@ bool ETHClass::autoNegotiation() const {
|
||||||
return auto_nego;
|
return auto_nego;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ETHClass::setAutoNegotiation(bool on) {
|
bool ETHClass::_setAutoNegotiation(bool on) {
|
||||||
if (_eth_handle == NULL) {
|
if (_eth_handle == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -1041,6 +1088,15 @@ bool ETHClass::setAutoNegotiation(bool on) {
|
||||||
return err == ESP_OK;
|
return err == ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ETHClass::setAutoNegotiation(bool on) {
|
||||||
|
if (_eth_started) {
|
||||||
|
log_e("This method must be called before ETH.begin()");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_auto_negotiation = on;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t ETHClass::phyAddr() const {
|
uint32_t ETHClass::phyAddr() const {
|
||||||
if (_eth_handle == NULL) {
|
if (_eth_handle == NULL) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -1059,7 +1115,7 @@ uint16_t ETHClass::linkSpeed() const {
|
||||||
return (link_speed == ETH_SPEED_10M) ? 10 : 100;
|
return (link_speed == ETH_SPEED_10M) ? 10 : 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ETHClass::setLinkSpeed(uint16_t speed) {
|
bool ETHClass::_setLinkSpeed(uint16_t speed) {
|
||||||
if (_eth_handle == NULL) {
|
if (_eth_handle == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -1071,6 +1127,22 @@ bool ETHClass::setLinkSpeed(uint16_t speed) {
|
||||||
return err == ESP_OK;
|
return err == ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ETHClass::setLinkSpeed(uint16_t speed) {
|
||||||
|
if (speed != 10 && speed != 100) {
|
||||||
|
log_e("Ethernet currently supports only 10 or 100 Mbps link speed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (_eth_started) {
|
||||||
|
log_e("This method must be called before ETH.begin()");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (_auto_negotiation) {
|
||||||
|
log_w("Auto Negotiation MUST be OFF for this setting to be applied");
|
||||||
|
}
|
||||||
|
_link_speed = speed;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// void ETHClass::getMac(uint8_t* mac)
|
// void ETHClass::getMac(uint8_t* mac)
|
||||||
// {
|
// {
|
||||||
// if(_eth_handle != NULL && mac != NULL){
|
// if(_eth_handle != NULL && mac != NULL){
|
||||||
|
|
|
||||||
|
|
@ -229,6 +229,10 @@ private:
|
||||||
esp_eth_netif_glue_handle_t _glue_handle;
|
esp_eth_netif_glue_handle_t _glue_handle;
|
||||||
esp_eth_mac_t *_mac;
|
esp_eth_mac_t *_mac;
|
||||||
esp_eth_phy_t *_phy;
|
esp_eth_phy_t *_phy;
|
||||||
|
bool _eth_started;
|
||||||
|
uint16_t _link_speed;
|
||||||
|
bool _full_duplex;
|
||||||
|
bool _auto_negotiation;
|
||||||
#if ETH_SPI_SUPPORTS_CUSTOM
|
#if ETH_SPI_SUPPORTS_CUSTOM
|
||||||
SPIClass *_spi;
|
SPIClass *_spi;
|
||||||
char _cs_str[10];
|
char _cs_str[10];
|
||||||
|
|
@ -247,6 +251,7 @@ private:
|
||||||
int8_t _pin_rmii_clock;
|
int8_t _pin_rmii_clock;
|
||||||
#endif /* CONFIG_ETH_USE_ESP32_EMAC */
|
#endif /* CONFIG_ETH_USE_ESP32_EMAC */
|
||||||
size_t _task_stack_size;
|
size_t _task_stack_size;
|
||||||
|
network_event_handle_t _eth_connected_event_handle;
|
||||||
|
|
||||||
static bool ethDetachBus(void *bus_pointer);
|
static bool ethDetachBus(void *bus_pointer);
|
||||||
bool beginSPI(
|
bool beginSPI(
|
||||||
|
|
@ -256,6 +261,9 @@ private:
|
||||||
#endif
|
#endif
|
||||||
int sck, int miso, int mosi, spi_host_device_t spi_host, uint8_t spi_freq_mhz
|
int sck, int miso, int mosi, spi_host_device_t spi_host, uint8_t spi_freq_mhz
|
||||||
);
|
);
|
||||||
|
bool _setFullDuplex(bool on);
|
||||||
|
bool _setLinkSpeed(uint16_t speed);
|
||||||
|
bool _setAutoNegotiation(bool on);
|
||||||
|
|
||||||
friend class EthernetClass; // to access beginSPI
|
friend class EthernetClass; // to access beginSPI
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,8 @@ esp_modem_dce_t *PPPClass::handle() const {
|
||||||
|
|
||||||
PPPClass::PPPClass()
|
PPPClass::PPPClass()
|
||||||
: _dce(NULL), _pin_tx(-1), _pin_rx(-1), _pin_rts(-1), _pin_cts(-1), _flow_ctrl(ESP_MODEM_FLOW_CONTROL_NONE), _pin_rst(-1), _pin_rst_act_low(true),
|
: _dce(NULL), _pin_tx(-1), _pin_rx(-1), _pin_rts(-1), _pin_cts(-1), _flow_ctrl(ESP_MODEM_FLOW_CONTROL_NONE), _pin_rst(-1), _pin_rst_act_low(true),
|
||||||
_pin_rst_delay(200), _pin(NULL), _apn(NULL), _rx_buffer_size(4096), _tx_buffer_size(512), _mode(ESP_MODEM_MODE_COMMAND), _uart_num(UART_NUM_1) {}
|
_pin_rst_delay(200), _pin(NULL), _apn(NULL), _rx_buffer_size(4096), _tx_buffer_size(512), _mode(ESP_MODEM_MODE_COMMAND), _uart_num(UART_NUM_1),
|
||||||
|
_ppp_event_handle(0) {}
|
||||||
|
|
||||||
PPPClass::~PPPClass() {}
|
PPPClass::~PPPClass() {}
|
||||||
|
|
||||||
|
|
@ -360,7 +361,7 @@ bool PPPClass::begin(ppp_modem_model_t model, uint8_t uart_num, int baud_rate) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Network.onSysEvent(onPppArduinoEvent);
|
_ppp_event_handle = Network.onSysEvent(onPppArduinoEvent);
|
||||||
|
|
||||||
setStatusBits(ESP_NETIF_STARTED_BIT);
|
setStatusBits(ESP_NETIF_STARTED_BIT);
|
||||||
arduino_event_t arduino_event;
|
arduino_event_t arduino_event;
|
||||||
|
|
@ -402,7 +403,8 @@ void PPPClass::end(void) {
|
||||||
}
|
}
|
||||||
_esp_modem = NULL;
|
_esp_modem = NULL;
|
||||||
|
|
||||||
Network.removeEvent(onPppArduinoEvent);
|
Network.removeEvent(_ppp_event_handle);
|
||||||
|
_ppp_event_handle = 0;
|
||||||
|
|
||||||
if (_dce != NULL) {
|
if (_dce != NULL) {
|
||||||
esp_modem_destroy(_dce);
|
esp_modem_destroy(_dce);
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,7 @@ private:
|
||||||
int _tx_buffer_size;
|
int _tx_buffer_size;
|
||||||
esp_modem_dce_mode_t _mode;
|
esp_modem_dce_mode_t _mode;
|
||||||
uint8_t _uart_num;
|
uint8_t _uart_num;
|
||||||
|
network_event_handle_t _ppp_event_handle;
|
||||||
|
|
||||||
static bool pppDetachBus(void *bus_pointer);
|
static bool pppDetachBus(void *bus_pointer);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ void APClass::_onApEvent(int32_t event_id, void *event_data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
APClass::APClass() {
|
APClass::APClass() : _wifi_ap_event_handle(0) {
|
||||||
_ap_network_if = this;
|
_ap_network_if = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -163,7 +163,7 @@ bool APClass::onEnable() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (_esp_netif == NULL) {
|
if (_esp_netif == NULL) {
|
||||||
Network.onSysEvent(_onApArduinoEvent);
|
_wifi_ap_event_handle = Network.onSysEvent(_onApArduinoEvent);
|
||||||
_esp_netif = get_esp_interface_netif(ESP_IF_WIFI_AP);
|
_esp_netif = get_esp_interface_netif(ESP_IF_WIFI_AP);
|
||||||
/* attach to receive events */
|
/* attach to receive events */
|
||||||
initNetif(ESP_NETIF_ID_AP);
|
initNetif(ESP_NETIF_ID_AP);
|
||||||
|
|
@ -172,7 +172,8 @@ bool APClass::onEnable() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool APClass::onDisable() {
|
bool APClass::onDisable() {
|
||||||
Network.removeEvent(_onApArduinoEvent);
|
Network.removeEvent(_wifi_ap_event_handle);
|
||||||
|
_wifi_ap_event_handle = 0;
|
||||||
// we just set _esp_netif to NULL here, so destroyNetif() does not try to destroy it.
|
// we just set _esp_netif to NULL here, so destroyNetif() does not try to destroy it.
|
||||||
// That would be done by WiFi.enableAP(false) if STA is not enabled, or when it gets disabled
|
// That would be done by WiFi.enableAP(false) if STA is not enabled, or when it gets disabled
|
||||||
_esp_netif = NULL;
|
_esp_netif = NULL;
|
||||||
|
|
|
||||||
|
|
@ -228,7 +228,8 @@ void STAClass::_onStaEvent(int32_t event_id, void *event_data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
STAClass::STAClass()
|
STAClass::STAClass()
|
||||||
: _minSecurity(WIFI_AUTH_WPA2_PSK), _scanMethod(WIFI_FAST_SCAN), _sortMethod(WIFI_CONNECT_AP_BY_SIGNAL), _autoReconnect(true), _status(WL_STOPPED) {
|
: _minSecurity(WIFI_AUTH_WPA2_PSK), _scanMethod(WIFI_FAST_SCAN), _sortMethod(WIFI_CONNECT_AP_BY_SIGNAL), _autoReconnect(true), _status(WL_STOPPED),
|
||||||
|
_wifi_sta_event_handle(0) {
|
||||||
_sta_network_if = this;
|
_sta_network_if = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -276,14 +277,15 @@ bool STAClass::onEnable() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* attach to receive events */
|
/* attach to receive events */
|
||||||
Network.onSysEvent(_onStaArduinoEvent);
|
_wifi_sta_event_handle = Network.onSysEvent(_onStaArduinoEvent);
|
||||||
initNetif(ESP_NETIF_ID_STA);
|
initNetif(ESP_NETIF_ID_STA);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool STAClass::onDisable() {
|
bool STAClass::onDisable() {
|
||||||
Network.removeEvent(_onStaArduinoEvent);
|
Network.removeEvent(_wifi_sta_event_handle);
|
||||||
|
_wifi_sta_event_handle = 0;
|
||||||
// we just set _esp_netif to NULL here, so destroyNetif() does not try to destroy it.
|
// we just set _esp_netif to NULL here, so destroyNetif() does not try to destroy it.
|
||||||
// That would be done by WiFi.enableSTA(false) if AP is not enabled, or when it gets disabled
|
// That would be done by WiFi.enableSTA(false) if AP is not enabled, or when it gets disabled
|
||||||
_esp_netif = NULL;
|
_esp_netif = NULL;
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,8 @@ public:
|
||||||
void _onApEvent(int32_t event_id, void *event_data);
|
void _onApEvent(int32_t event_id, void *event_data);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
network_event_handle_t _wifi_ap_event_handle;
|
||||||
|
|
||||||
size_t printDriverInfo(Print &out) const;
|
size_t printDriverInfo(Print &out) const;
|
||||||
|
|
||||||
friend class WiFiGenericClass;
|
friend class WiFiGenericClass;
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,7 @@ protected:
|
||||||
wifi_sort_method_t _sortMethod;
|
wifi_sort_method_t _sortMethod;
|
||||||
bool _autoReconnect;
|
bool _autoReconnect;
|
||||||
wl_status_t _status;
|
wl_status_t _status;
|
||||||
|
network_event_handle_t _wifi_sta_event_handle;
|
||||||
|
|
||||||
size_t printDriverInfo(Print &out) const;
|
size_t printDriverInfo(Print &out) const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -92,9 +92,6 @@ int16_t
|
||||||
}
|
}
|
||||||
if (esp_wifi_scan_start(&config, false) == ESP_OK) {
|
if (esp_wifi_scan_start(&config, false) == ESP_OK) {
|
||||||
_scanStarted = millis();
|
_scanStarted = millis();
|
||||||
if (!_scanStarted) { //Prevent 0 from millis overflow
|
|
||||||
++_scanStarted;
|
|
||||||
}
|
|
||||||
|
|
||||||
WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT);
|
WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT);
|
||||||
WiFiGenericClass::setStatusBits(WIFI_SCANNING_BIT);
|
WiFiGenericClass::setStatusBits(WIFI_SCANNING_BIT);
|
||||||
|
|
@ -118,21 +115,20 @@ int16_t
|
||||||
void WiFiScanClass::_scanDone() {
|
void WiFiScanClass::_scanDone() {
|
||||||
esp_wifi_scan_get_ap_num(&(WiFiScanClass::_scanCount));
|
esp_wifi_scan_get_ap_num(&(WiFiScanClass::_scanCount));
|
||||||
if (WiFiScanClass::_scanResult) {
|
if (WiFiScanClass::_scanResult) {
|
||||||
delete[] reinterpret_cast<wifi_ap_record_t *>(WiFiScanClass::_scanResult);
|
free(WiFiScanClass::_scanResult);
|
||||||
WiFiScanClass::_scanResult = nullptr;
|
WiFiScanClass::_scanResult = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WiFiScanClass::_scanCount) {
|
if (WiFiScanClass::_scanCount) {
|
||||||
WiFiScanClass::_scanResult = new (std::nothrow) wifi_ap_record_t[WiFiScanClass::_scanCount];
|
WiFiScanClass::_scanResult = calloc(WiFiScanClass::_scanCount, sizeof(wifi_ap_record_t));
|
||||||
if (!WiFiScanClass::_scanResult) {
|
if (!WiFiScanClass::_scanResult) {
|
||||||
WiFiScanClass::_scanCount = 0;
|
WiFiScanClass::_scanCount = 0;
|
||||||
} else if (esp_wifi_scan_get_ap_records(&(WiFiScanClass::_scanCount), (wifi_ap_record_t *)_scanResult) != ESP_OK) {
|
} else if (esp_wifi_scan_get_ap_records(&(WiFiScanClass::_scanCount), (wifi_ap_record_t *)_scanResult) != ESP_OK) {
|
||||||
delete[] reinterpret_cast<wifi_ap_record_t *>(WiFiScanClass::_scanResult);
|
free(WiFiScanClass::_scanResult);
|
||||||
WiFiScanClass::_scanResult = nullptr;
|
WiFiScanClass::_scanResult = NULL;
|
||||||
WiFiScanClass::_scanCount = 0;
|
WiFiScanClass::_scanCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
WiFiScanClass::_scanStarted = 0; //Reset after a scan is completed for normal behavior
|
|
||||||
WiFiGenericClass::setStatusBits(WIFI_SCAN_DONE_BIT);
|
WiFiGenericClass::setStatusBits(WIFI_SCAN_DONE_BIT);
|
||||||
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
|
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
|
||||||
}
|
}
|
||||||
|
|
@ -161,15 +157,13 @@ int16_t WiFiScanClass::scanComplete() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WiFiGenericClass::getStatusBits() & WIFI_SCANNING_BIT) {
|
if (WiFiGenericClass::getStatusBits() & WIFI_SCANNING_BIT) {
|
||||||
return WIFI_SCAN_RUNNING;
|
// Check if the delay expired, return WIFI_SCAN_FAILED in this case
|
||||||
}
|
if ((millis() - WiFiScanClass::_scanStarted) > WiFiScanClass::_scanTimeout) {
|
||||||
// last one to avoid time affecting Async mode
|
|
||||||
if (WiFiScanClass::_scanStarted
|
|
||||||
&& (millis() - WiFiScanClass::_scanStarted)
|
|
||||||
> WiFiScanClass::_scanTimeout) { //Check is scan was started and if the delay expired, return WIFI_SCAN_FAILED in this case
|
|
||||||
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
|
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
|
||||||
return WIFI_SCAN_FAILED;
|
return WIFI_SCAN_FAILED;
|
||||||
}
|
}
|
||||||
|
return WIFI_SCAN_RUNNING;
|
||||||
|
}
|
||||||
|
|
||||||
return WIFI_SCAN_FAILED;
|
return WIFI_SCAN_FAILED;
|
||||||
}
|
}
|
||||||
|
|
@ -179,11 +173,12 @@ int16_t WiFiScanClass::scanComplete() {
|
||||||
*/
|
*/
|
||||||
void WiFiScanClass::scanDelete() {
|
void WiFiScanClass::scanDelete() {
|
||||||
WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT);
|
WiFiGenericClass::clearStatusBits(WIFI_SCAN_DONE_BIT);
|
||||||
|
WiFiGenericClass::clearStatusBits(WIFI_SCANNING_BIT);
|
||||||
if (WiFiScanClass::_scanResult) {
|
if (WiFiScanClass::_scanResult) {
|
||||||
delete[] reinterpret_cast<wifi_ap_record_t *>(WiFiScanClass::_scanResult);
|
free(WiFiScanClass::_scanResult);
|
||||||
WiFiScanClass::_scanResult = nullptr;
|
WiFiScanClass::_scanResult = NULL;
|
||||||
WiFiScanClass::_scanCount = 0;
|
|
||||||
}
|
}
|
||||||
|
WiFiScanClass::_scanCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
# Arduino-ESP32 Zigbee Illuminance Sensor Example
|
||||||
|
|
||||||
|
This example demonstrates how to use the Zigbee library to create an end device illuminance sensor and use it as a Home Automation (HA) extended illuminance sensor.
|
||||||
|
|
||||||
|
# Supported Targets
|
||||||
|
|
||||||
|
Currently, this example supports the following targets.
|
||||||
|
|
||||||
|
| Supported Targets | ESP32-C6 | ESP32-H2 |
|
||||||
|
| ----------------- | -------- | -------- |
|
||||||
|
|
||||||
|
## Illuminance Sensor Functions
|
||||||
|
|
||||||
|
1. Initialize a Zigbee illuminance sensor.
|
||||||
|
2. Measure illuminance value.
|
||||||
|
3. Report the measured value to the Zigbee network.
|
||||||
|
|
||||||
|
## Hardware Required
|
||||||
|
|
||||||
|
* ESP32-H2 or ESP32-C6 development board
|
||||||
|
* A USB cable for power supply and programming
|
||||||
|
* Some kind of light sensor, such as a photoresistor
|
||||||
|
|
||||||
|
### Configure the Project
|
||||||
|
|
||||||
|
In this example the raw analog value of a light sensor is used to calculate illuminance.
|
||||||
|
Alter the calculation according to your use case and calibrate it to receive correct lux values.
|
||||||
|
Set the illuminance sensor GPIO by changing the `illuminance_sensor_pin` variable to the pin to the pin to which your sensor is connected.
|
||||||
|
Set the button GPIO by changing the `button` variable. By default, it's the pin `BOOT_PIN` (BOOT button on ESP32-C6 and ESP32-H2).
|
||||||
|
|
||||||
|
#### Using Arduino IDE
|
||||||
|
|
||||||
|
To get more information about the Espressif boards see [Espressif Development Kits](https://www.espressif.com/en/products/devkits).
|
||||||
|
|
||||||
|
* Before Compile/Verify, select the correct board: `Tools -> Board`.
|
||||||
|
* Select the End device Zigbee mode: `Tools -> Zigbee mode: Zigbee ED (end device)`
|
||||||
|
* Select Partition Scheme for Zigbee: `Tools -> Partition Scheme: Zigbee 4MB with spiffs`
|
||||||
|
* Enable USB CDC to be able to use the serial monitor: `Tools -> USB CDC On Boot: Enabled`
|
||||||
|
* Select the COM port: `Tools -> Port: xxx` where the `xxx` is the detected COM port.
|
||||||
|
* Optional: Set debug level to verbose to see all logs from Zigbee stack: `Tools -> Core Debug Level: Verbose`.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
If the End device flashed with this example is not connecting to the coordinator, erase the flash of the End device before flashing the example to the board. It is recommended to do this if you re-flash the coordinator.
|
||||||
|
You can do the following:
|
||||||
|
|
||||||
|
* In the Arduino IDE go to the Tools menu and set `Erase All Flash Before Sketch Upload` to `Enabled`.
|
||||||
|
* Add to the sketch `Zigbee.factoryReset();` to reset the device and Zigbee stack.
|
||||||
|
|
||||||
|
By default, the coordinator network is closed after rebooting or flashing new firmware.
|
||||||
|
To open the network you have 2 options:
|
||||||
|
|
||||||
|
* Open network after reboot by setting `Zigbee.setRebootOpenNetwork(time);` before calling `Zigbee.begin();`.
|
||||||
|
* In application you can anytime call `Zigbee.openNetwork(time);` to open the network for devices to join.
|
||||||
|
|
||||||
|
***Important: Make sure that you are using a good quality USB cable with data lines and that you have a reliable power source***
|
||||||
|
|
||||||
|
* **LED not blinking:** Check the wiring connection and the IO selection.
|
||||||
|
* **Programming Fail:** If the programming/flash procedure fails, try reducing the serial connection speed.
|
||||||
|
* **COM port not detected:** Check the USB cable and the USB to Serial driver installation.
|
||||||
|
|
||||||
|
If the error persists, you can ask for help at the official [ESP32 forum](https://esp32.com) or see [Contribute](#contribute).
|
||||||
|
|
||||||
|
## Contribute
|
||||||
|
|
||||||
|
To know how to contribute to this project, see [How to contribute.](https://github.com/espressif/arduino-esp32/blob/master/CONTRIBUTING.rst)
|
||||||
|
|
||||||
|
If you have any **feedback** or **issue** to report on this example/library, please open an issue or fix it by creating a new PR. Contributions are more than welcome!
|
||||||
|
|
||||||
|
Before creating a new issue, be sure to try Troubleshooting and check if the same issue was already created by someone else.
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
* Official ESP32 Forum: [Link](https://esp32.com)
|
||||||
|
* Arduino-ESP32 Official Repository: [espressif/arduino-esp32](https://github.com/espressif/arduino-esp32)
|
||||||
|
* ESP32-C6 Datasheet: [Link to datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf)
|
||||||
|
* ESP32-H2 Datasheet: [Link to datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-h2_datasheet_en.pdf)
|
||||||
|
* Official ESP-IDF documentation: [ESP-IDF](https://idf.espressif.com)
|
||||||
|
|
@ -0,0 +1,141 @@
|
||||||
|
// Copyright 2025 Espressif Systems (Shanghai) PTE LTD
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This example demonstrates Zigbee illuminance sensor.
|
||||||
|
*
|
||||||
|
* The example demonstrates how to use Zigbee library to create a end device illuminance sensor.
|
||||||
|
* The illuminance sensor is a Zigbee end device, which is controlled by a Zigbee coordinator.
|
||||||
|
*
|
||||||
|
* Proper Zigbee mode must be selected in Tools->Zigbee mode
|
||||||
|
* and also the correct partition scheme must be selected in Tools->Partition Scheme.
|
||||||
|
*
|
||||||
|
* Please check the README.md for instructions and more detailed description.
|
||||||
|
*
|
||||||
|
* Created by MikaFromTheRoof (https://github.com/MikaFromTheRoof)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ZIGBEE_MODE_ED
|
||||||
|
#error "Zigbee end device mode is not selected in Tools->Zigbee mode"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "Zigbee.h"
|
||||||
|
|
||||||
|
#define ZIGBEE_ILLUMINANCE_SENSOR_ENDPOINT 9
|
||||||
|
uint8_t button = BOOT_PIN;
|
||||||
|
uint8_t illuminance_sensor_pin = 6; // Insert the analog pin to which the sensor (e.g. photoresistor) is connected
|
||||||
|
|
||||||
|
ZigbeeIlluminanceSensor zbIlluminanceSensor = ZigbeeIlluminanceSensor(ZIGBEE_ILLUMINANCE_SENSOR_ENDPOINT);
|
||||||
|
|
||||||
|
/********************* Illuminance sensor **************************/
|
||||||
|
static void illuminance_sensor_value_update(void *arg) {
|
||||||
|
for (;;) {
|
||||||
|
// read the raw analog value from the sensor
|
||||||
|
int lsens_analog_raw = analogRead(illuminance_sensor_pin);
|
||||||
|
Serial.printf("[Illuminance Sensor] raw analog value: %d\r\n", lsens_analog_raw);
|
||||||
|
|
||||||
|
// conversion into zigbee raw illuminance value (typically between 0 in darkness and 50000 in direct sunlight)
|
||||||
|
// depends on the value range of the raw analog sensor values and will need calibration for correct lux values
|
||||||
|
// for demonstration purpose map the 12-bit ADC value (0-4095) to Zigbee illuminance range (0-50000)
|
||||||
|
int lsens_illuminance_raw = map(lsens_analog_raw, 0, 4095, 0, 50000);
|
||||||
|
Serial.printf("[Illuminance Sensor] raw illuminance value: %d\r\n", lsens_illuminance_raw);
|
||||||
|
|
||||||
|
// according to zigbee documentation the formular 10^(lsens_illuminance_raw/10000)-1 can be used to calculate lux value from raw illuminance value
|
||||||
|
// Note: Zigbee2MQTT seems to be using the formular 10^(lsens_illuminance_raw/10000) instead (without -1)
|
||||||
|
int lsens_illuminance_lux = round(pow(10, (lsens_illuminance_raw / 10000.0)) - 1);
|
||||||
|
Serial.printf("[Illuminance Sensor] lux value: %d lux\r\n", lsens_illuminance_lux);
|
||||||
|
|
||||||
|
// Update illuminance in illuminance sensor EP
|
||||||
|
zbIlluminanceSensor.setIlluminance(lsens_illuminance_raw); // use raw illuminance here!
|
||||||
|
|
||||||
|
delay(1000); // reduce delay (in ms), if you want your device to react more quickly to changes in illuminance
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/********************* Arduino functions **************************/
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
// Optional: configure analog input
|
||||||
|
analogSetAttenuation(ADC_11db); // set analog to digital converter (ADC) attenuation to 11 dB (up to ~3.3V input)
|
||||||
|
analogReadResolution(12); // set analog read resolution to 12 bits (value range from 0 to 4095), 12 is default
|
||||||
|
|
||||||
|
// Init button for factory reset
|
||||||
|
pinMode(button, INPUT_PULLUP);
|
||||||
|
|
||||||
|
// Optional: Set Zigbee device name and model
|
||||||
|
zbIlluminanceSensor.setManufacturerAndModel("Espressif", "ZigbeeIlluminanceSensor");
|
||||||
|
|
||||||
|
// Optional: Set power source (choose between ZB_POWER_SOURCE_MAINS and ZB_POWER_SOURCE_BATTERY), defaults to unknown
|
||||||
|
zbIlluminanceSensor.setPowerSource(ZB_POWER_SOURCE_MAINS);
|
||||||
|
|
||||||
|
// Set minimum and maximum for raw illuminance value (0 min and 50000 max equals to 0 lux - 100,000 lux)
|
||||||
|
zbIlluminanceSensor.setMinMaxValue(0, 50000);
|
||||||
|
|
||||||
|
// Optional: Set tolerance for raw illuminance value
|
||||||
|
zbIlluminanceSensor.setTolerance(1);
|
||||||
|
|
||||||
|
// Add endpoint to Zigbee Core
|
||||||
|
Serial.println("Adding Zigbee illuminance sensor endpoint to Zigbee Core");
|
||||||
|
Zigbee.addEndpoint(&zbIlluminanceSensor);
|
||||||
|
|
||||||
|
Serial.println("Starting Zigbee...");
|
||||||
|
// When all EPs are registered, start Zigbee in End Device mode
|
||||||
|
if (!Zigbee.begin()) {
|
||||||
|
Serial.println("Zigbee failed to start!");
|
||||||
|
Serial.println("Rebooting...");
|
||||||
|
ESP.restart();
|
||||||
|
} else {
|
||||||
|
Serial.println("Zigbee started successfully!");
|
||||||
|
}
|
||||||
|
Serial.println("Connecting to network");
|
||||||
|
while (!Zigbee.connected()) {
|
||||||
|
Serial.print(".");
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
Serial.println();
|
||||||
|
|
||||||
|
// Start illuminance sensor reading task
|
||||||
|
xTaskCreate(illuminance_sensor_value_update, "illuminance_sensor_update", 2048, NULL, 10, NULL);
|
||||||
|
|
||||||
|
// Set reporting schedule for illuminance value measurement in seconds, must be called after Zigbee.begin()
|
||||||
|
// min_interval and max_interval in seconds, delta
|
||||||
|
// if min = 1 and max = 0, delta = 1000, reporting is sent when raw illuminance value changes by 1000, but at most once per second
|
||||||
|
// if min = 0 and max = 10, delta = 1000, reporting is sent every 10 seconds or if raw illuminance value changes by 1000
|
||||||
|
// if min = 0, max = 10 and delta = 0, reporting is sent every 10 seconds regardless of illuminance change
|
||||||
|
// Note: On pairing with Zigbee Home Automation or Zigbee2MQTT the reporting schedule will most likely be overwritten with their default settings
|
||||||
|
zbIlluminanceSensor.setReporting(1, 0, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/********************* Main loop **************************/
|
||||||
|
void loop() {
|
||||||
|
// Checking button for factory reset
|
||||||
|
if (digitalRead(button) == LOW) { // Push button pressed
|
||||||
|
// Key debounce handling
|
||||||
|
delay(100);
|
||||||
|
int startTime = millis();
|
||||||
|
while (digitalRead(button) == LOW) {
|
||||||
|
delay(50);
|
||||||
|
if ((millis() - startTime) > 3000) {
|
||||||
|
// If key pressed for more than 3 secs, factory reset Zigbee and reboot
|
||||||
|
Serial.println("Resetting Zigbee to factory and rebooting in 1s");
|
||||||
|
delay(1000);
|
||||||
|
Zigbee.factoryReset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// force report of illuminance when button is pressed
|
||||||
|
zbIlluminanceSensor.report();
|
||||||
|
}
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"fqbn_append": "PartitionScheme=zigbee,ZigbeeMode=ed",
|
||||||
|
"requires": [
|
||||||
|
"CONFIG_SOC_IEEE802154_SUPPORTED=y",
|
||||||
|
"CONFIG_ZB_ENABLED=y"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -29,6 +29,7 @@ ZigbeeGateway KEYWORD1
|
||||||
ZigbeeRangeExtender KEYWORD1
|
ZigbeeRangeExtender KEYWORD1
|
||||||
ZigbeeVibrationSensor KEYWORD1
|
ZigbeeVibrationSensor KEYWORD1
|
||||||
ZigbeeWindowCovering KEYWORD1
|
ZigbeeWindowCovering KEYWORD1
|
||||||
|
ZigbeeIlluminanceSensor KEYWORD1
|
||||||
|
|
||||||
# Other
|
# Other
|
||||||
zigbee_role_t KEYWORD1
|
zigbee_role_t KEYWORD1
|
||||||
|
|
@ -123,6 +124,9 @@ setHumidity KEYWORD2
|
||||||
setHumidityReporting KEYWORD2
|
setHumidityReporting KEYWORD2
|
||||||
reportHumidity KEYWORD2
|
reportHumidity KEYWORD2
|
||||||
|
|
||||||
|
# ZigbeeIlluminanceSensor
|
||||||
|
setIlluminance KEYWORD2
|
||||||
|
|
||||||
# ZigbeeFlowSensor
|
# ZigbeeFlowSensor
|
||||||
setFlow KEYWORD2
|
setFlow KEYWORD2
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
#include "ep/ZigbeeAnalog.h"
|
#include "ep/ZigbeeAnalog.h"
|
||||||
#include "ep/ZigbeeFlowSensor.h"
|
#include "ep/ZigbeeFlowSensor.h"
|
||||||
#include "ep/ZigbeeOccupancySensor.h"
|
#include "ep/ZigbeeOccupancySensor.h"
|
||||||
|
#include "ep/ZigbeeIlluminanceSensor.h"
|
||||||
#include "ep/ZigbeeCarbonDioxideSensor.h"
|
#include "ep/ZigbeeCarbonDioxideSensor.h"
|
||||||
#include "ep/ZigbeeContactSwitch.h"
|
#include "ep/ZigbeeContactSwitch.h"
|
||||||
#include "ep/ZigbeeDoorWindowHandle.h"
|
#include "ep/ZigbeeDoorWindowHandle.h"
|
||||||
|
|
|
||||||
74
libraries/Zigbee/src/ep/ZigbeeIlluminanceSensor.cpp
Normal file
74
libraries/Zigbee/src/ep/ZigbeeIlluminanceSensor.cpp
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
#include "ZigbeeIlluminanceSensor.h"
|
||||||
|
#if CONFIG_ZB_ENABLED
|
||||||
|
|
||||||
|
ZigbeeIlluminanceSensor::ZigbeeIlluminanceSensor(uint8_t endpoint) : ZigbeeEP(endpoint) {
|
||||||
|
_device_id = ESP_ZB_HA_LIGHT_SENSOR_DEVICE_ID;
|
||||||
|
|
||||||
|
esp_zb_light_sensor_cfg_t light_sensor_cfg = ZIGBEE_DEFAULT_ILLUMINANCE_SENSOR_CONFIG();
|
||||||
|
_cluster_list = esp_zb_light_sensor_clusters_create(&light_sensor_cfg);
|
||||||
|
|
||||||
|
_ep_config = {.endpoint = _endpoint, .app_profile_id = ESP_ZB_AF_HA_PROFILE_ID, .app_device_id = ESP_ZB_HA_LIGHT_SENSOR_DEVICE_ID, .app_device_version = 0};
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZigbeeIlluminanceSensor::setMinMaxValue(uint16_t min, uint16_t max) {
|
||||||
|
esp_zb_attribute_list_t *light_measure_cluster =
|
||||||
|
esp_zb_cluster_list_get_cluster(_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
|
||||||
|
esp_zb_cluster_update_attr(light_measure_cluster, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MIN_MEASURED_VALUE_ID, (void *)&min);
|
||||||
|
esp_zb_cluster_update_attr(light_measure_cluster, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MAX_MEASURED_VALUE_ID, (void *)&max);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZigbeeIlluminanceSensor::setTolerance(uint16_t tolerance) {
|
||||||
|
esp_zb_attribute_list_t *light_measure_cluster =
|
||||||
|
esp_zb_cluster_list_get_cluster(_cluster_list, ESP_ZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
|
||||||
|
esp_zb_illuminance_meas_cluster_add_attr(light_measure_cluster, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_TOLERANCE_ID, (void *)&tolerance);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZigbeeIlluminanceSensor::setReporting(uint16_t min_interval, uint16_t max_interval, uint16_t delta) {
|
||||||
|
esp_zb_zcl_reporting_info_t reporting_info;
|
||||||
|
memset(&reporting_info, 0, sizeof(esp_zb_zcl_reporting_info_t));
|
||||||
|
reporting_info.direction = ESP_ZB_ZCL_CMD_DIRECTION_TO_SRV;
|
||||||
|
reporting_info.ep = _endpoint;
|
||||||
|
reporting_info.cluster_id = ESP_ZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT;
|
||||||
|
reporting_info.cluster_role = ESP_ZB_ZCL_CLUSTER_SERVER_ROLE;
|
||||||
|
reporting_info.attr_id = ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MEASURED_VALUE_ID;
|
||||||
|
reporting_info.u.send_info.min_interval = min_interval;
|
||||||
|
reporting_info.u.send_info.max_interval = max_interval;
|
||||||
|
reporting_info.u.send_info.def_min_interval = min_interval;
|
||||||
|
reporting_info.u.send_info.def_max_interval = max_interval;
|
||||||
|
reporting_info.u.send_info.delta.u16 = delta;
|
||||||
|
reporting_info.dst.profile_id = ESP_ZB_AF_HA_PROFILE_ID;
|
||||||
|
reporting_info.manuf_code = ESP_ZB_ZCL_ATTR_NON_MANUFACTURER_SPECIFIC;
|
||||||
|
esp_zb_lock_acquire(portMAX_DELAY);
|
||||||
|
esp_zb_zcl_update_reporting_info(&reporting_info);
|
||||||
|
esp_zb_lock_release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZigbeeIlluminanceSensor::setIlluminance(uint16_t illuminanceValue) {
|
||||||
|
log_v("Updating Illuminance...");
|
||||||
|
/* Update illuminance sensor measured illuminance */
|
||||||
|
log_d("Setting Illuminance to %d", illuminanceValue);
|
||||||
|
esp_zb_lock_acquire(portMAX_DELAY);
|
||||||
|
esp_zb_zcl_set_attribute_val(
|
||||||
|
_endpoint, ESP_ZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE, ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MEASURED_VALUE_ID,
|
||||||
|
&illuminanceValue, false
|
||||||
|
);
|
||||||
|
esp_zb_lock_release();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZigbeeIlluminanceSensor::report() {
|
||||||
|
/* Send report attributes command */
|
||||||
|
esp_zb_zcl_report_attr_cmd_t report_attr_cmd;
|
||||||
|
report_attr_cmd.address_mode = ESP_ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
|
||||||
|
report_attr_cmd.attributeID = ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MEASURED_VALUE_ID;
|
||||||
|
report_attr_cmd.direction = ESP_ZB_ZCL_CMD_DIRECTION_TO_CLI;
|
||||||
|
report_attr_cmd.clusterID = ESP_ZB_ZCL_CLUSTER_ID_ILLUMINANCE_MEASUREMENT;
|
||||||
|
report_attr_cmd.zcl_basic_cmd.src_endpoint = _endpoint;
|
||||||
|
report_attr_cmd.manuf_code = ESP_ZB_ZCL_ATTR_NON_MANUFACTURER_SPECIFIC;
|
||||||
|
|
||||||
|
esp_zb_lock_acquire(portMAX_DELAY);
|
||||||
|
esp_zb_zcl_report_attr_cmd_req(&report_attr_cmd);
|
||||||
|
esp_zb_lock_release();
|
||||||
|
log_v("Illuminance report sent");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // CONFIG_ZB_ENABLED
|
||||||
51
libraries/Zigbee/src/ep/ZigbeeIlluminanceSensor.h
Normal file
51
libraries/Zigbee/src/ep/ZigbeeIlluminanceSensor.h
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
/* Class of Zigbee Illuminance sensor endpoint inherited from common EP class */
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "soc/soc_caps.h"
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
#if CONFIG_ZB_ENABLED
|
||||||
|
|
||||||
|
#include "ZigbeeEP.h"
|
||||||
|
#include "ha/esp_zigbee_ha_standard.h"
|
||||||
|
|
||||||
|
#define ZIGBEE_DEFAULT_ILLUMINANCE_SENSOR_CONFIG() \
|
||||||
|
{ \
|
||||||
|
.basic_cfg = \
|
||||||
|
{ \
|
||||||
|
.zcl_version = ESP_ZB_ZCL_BASIC_ZCL_VERSION_DEFAULT_VALUE, \
|
||||||
|
.power_source = ESP_ZB_ZCL_BASIC_POWER_SOURCE_DEFAULT_VALUE, \
|
||||||
|
}, \
|
||||||
|
.identify_cfg = \
|
||||||
|
{ \
|
||||||
|
.identify_time = ESP_ZB_ZCL_IDENTIFY_IDENTIFY_TIME_DEFAULT_VALUE, \
|
||||||
|
}, \
|
||||||
|
.illuminance_cfg = { \
|
||||||
|
.measured_value = ESP_ZB_ZCL_ILLUMINANCE_MEASUREMENT_LIGHT_SENSOR_TYPE_DEFAULT_VALUE, \
|
||||||
|
.min_value = ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MIN_MEASURED_VALUE_MIN_VALUE, \
|
||||||
|
.max_value = ESP_ZB_ZCL_ATTR_ILLUMINANCE_MEASUREMENT_MAX_MEASURED_VALUE_MAX_VALUE, \
|
||||||
|
}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
class ZigbeeIlluminanceSensor : public ZigbeeEP {
|
||||||
|
public:
|
||||||
|
ZigbeeIlluminanceSensor(uint8_t endpoint);
|
||||||
|
~ZigbeeIlluminanceSensor() {}
|
||||||
|
|
||||||
|
// Set the illuminance value
|
||||||
|
void setIlluminance(uint16_t value);
|
||||||
|
|
||||||
|
// Set the min and max value for the illuminance sensor
|
||||||
|
void setMinMaxValue(uint16_t min, uint16_t max);
|
||||||
|
|
||||||
|
// Set the tolerance value for the illuminance sensor
|
||||||
|
void setTolerance(uint16_t tolerance);
|
||||||
|
|
||||||
|
// Set the reporting interval for illuminance measurement in seconds and delta
|
||||||
|
void setReporting(uint16_t min_interval, uint16_t max_interval, uint16_t delta);
|
||||||
|
|
||||||
|
// Report the illuminance value
|
||||||
|
void report();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CONFIG_ZB_ENABLED
|
||||||
7
tools/partitions/default_32MB.csv
Normal file
7
tools/partitions/default_32MB.csv
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Name, Type, SubType, Offset, Size, Flags
|
||||||
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
|
otadata, data, ota, 0xe000, 0x2000,
|
||||||
|
app0, app, ota_0, 0x10000, 0xC80000,
|
||||||
|
app1, app, ota_1, 0xC90000,0xC80000,
|
||||||
|
spiffs, data, spiffs, 0x1910000,0x6C0000,
|
||||||
|
coredump, data, coredump,0x1FF0000,0x10000,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define Pins_Arduino_h
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define USB_VID 0x303a
|
#define USB_VID 0x303a
|
||||||
#define USB_PID 0x1001
|
#define USB_PID 0x1001
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,18 @@
|
||||||
#define Pins_Arduino_h
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "soc/soc_caps.h"
|
||||||
|
|
||||||
static const uint8_t LED_BUILTIN = 7;
|
// based on https://www.wemos.cc/en/latest/c3/c3_mini.html
|
||||||
|
// WS2812 RGB LED on pin 7
|
||||||
|
#define PIN_RGB_LED 7
|
||||||
|
// BUILTIN_LED can be used in new Arduino API digitalWrite() like in Blink.ino
|
||||||
|
static const uint8_t LED_BUILTIN = SOC_GPIO_PIN_COUNT + PIN_RGB_LED;
|
||||||
#define BUILTIN_LED LED_BUILTIN // backward compatibility
|
#define BUILTIN_LED LED_BUILTIN // backward compatibility
|
||||||
#define LED_BUILTIN LED_BUILTIN // allow testing #ifdef LED_BUILTIN
|
#define LED_BUILTIN LED_BUILTIN // allow testing #ifdef LED_BUILTIN
|
||||||
|
// RGB_BUILTIN and RGB_BRIGHTNESS can be used in new Arduino API rgbLedWrite()
|
||||||
|
#define RGB_BUILTIN LED_BUILTIN
|
||||||
|
#define RGB_BRIGHTNESS 64
|
||||||
|
|
||||||
static const uint8_t TX = 21;
|
static const uint8_t TX = 21;
|
||||||
static const uint8_t RX = 20;
|
static const uint8_t RX = 20;
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,18 @@
|
||||||
#define Pins_Arduino_h
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "soc/soc_caps.h"
|
||||||
|
|
||||||
static const uint8_t LED_BUILTIN = 7;
|
// based on https://www.wemos.cc/en/latest/c3/c3_pico.html
|
||||||
|
// WS2812 RGB LED on pin 7
|
||||||
|
#define PIN_RGB_LED 7
|
||||||
|
// BUILTIN_LED can be used in new Arduino API digitalWrite() like in Blink.ino
|
||||||
|
static const uint8_t LED_BUILTIN = SOC_GPIO_PIN_COUNT + PIN_RGB_LED;
|
||||||
#define BUILTIN_LED LED_BUILTIN // backward compatibility
|
#define BUILTIN_LED LED_BUILTIN // backward compatibility
|
||||||
#define LED_BUILTIN LED_BUILTIN // allow testing #ifdef LED_BUILTIN
|
#define LED_BUILTIN LED_BUILTIN // allow testing #ifdef LED_BUILTIN
|
||||||
|
// RGB_BUILTIN and RGB_BRIGHTNESS can be used in new Arduino API rgbLedWrite()
|
||||||
|
#define RGB_BUILTIN LED_BUILTIN
|
||||||
|
#define RGB_BRIGHTNESS 64
|
||||||
|
|
||||||
static const uint8_t TX = 21;
|
static const uint8_t TX = 21;
|
||||||
static const uint8_t RX = 20;
|
static const uint8_t RX = 20;
|
||||||
|
|
@ -17,7 +25,7 @@ static const uint8_t SCL = 10;
|
||||||
|
|
||||||
static const uint8_t VBAT = 3;
|
static const uint8_t VBAT = 3;
|
||||||
|
|
||||||
static const uint8_t SCK = 2;
|
static const uint8_t SCK = 1;
|
||||||
static const uint8_t MISO = 0;
|
static const uint8_t MISO = 0;
|
||||||
static const uint8_t MOSI = 4;
|
static const uint8_t MOSI = 4;
|
||||||
static const uint8_t SS = 5;
|
static const uint8_t SS = 5;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue