diff --git a/.github/ISSUE_TEMPLATE/Issue-report.yml b/.github/ISSUE_TEMPLATE/Issue-report.yml index f870646e647..5f8c7fbf466 100644 --- a/.github/ISSUE_TEMPLATE/Issue-report.yml +++ b/.github/ISSUE_TEMPLATE/Issue-report.yml @@ -41,6 +41,10 @@ body: options: - latest master (checkout manually) - latest development Release Candidate (RC-X) + - v3.0.0 + - v2.0.17 + - v2.0.16 + - v2.0.15 - v2.0.14 - v2.0.13 - v2.0.12 diff --git a/.github/scripts/find_new_boards.sh b/.github/scripts/find_new_boards.sh index 56e1493cb8c..77c98877d2a 100755 --- a/.github/scripts/find_new_boards.sh +++ b/.github/scripts/find_new_boards.sh @@ -54,7 +54,7 @@ do break fi board_name=$(echo "$line" | cut -d '.' -f1 | cut -d '#' -f1) - if [ "$board_name" != "" ] + if [ "$board_name" != "" ] && [ "$board_name" != "esp32_family" ] then if [ "$board_name" != "$previous_board" ] then diff --git a/.github/scripts/on-release.sh b/.github/scripts/on-release.sh index 9f250cd6fae..445b0e0223f 100755 --- a/.github/scripts/on-release.sh +++ b/.github/scripts/on-release.sh @@ -216,16 +216,23 @@ find "$PKG_DIR" -name '*.git*' -type f -delete ## RVTC_NAME="riscv32-esp-elf-gcc" RVTC_NEW_NAME="esp-rv32" +X32TC_NAME="xtensa-esp32-elf-gcc" +X32TC_NEW_NAME="esp-x32" +XS2TC_NAME="xtensa-esp32s2-elf-gcc" +XS2TC_NEW_NAME="esp-xs2" +XS3TC_NAME="xtensa-esp32s3-elf-gcc" +XS3TC_NEW_NAME="esp-xs3" # Replace tools locations in platform.txt echo "Generating platform.txt..." cat "$GITHUB_WORKSPACE/platform.txt" | \ sed "s/version=.*/version=$RELEASE_TAG/g" | \ +sed 's/tools\.esp32-arduino-libs\.path\.windows=.*//g' | \ sed 's/{runtime\.platform\.path}.tools.esp32-arduino-libs/\{runtime.tools.esp32-arduino-libs.path\}/g' | \ sed 's/{runtime\.platform\.path}.tools.xtensa-esp-elf-gdb/\{runtime.tools.xtensa-esp-elf-gdb.path\}/g' | \ -sed 's/{runtime\.platform\.path}.tools.xtensa-esp32-elf/\{runtime.tools.xtensa-esp32-elf-gcc.path\}/g' | \ -sed 's/{runtime\.platform\.path}.tools.xtensa-esp32s2-elf/\{runtime.tools.xtensa-esp32s2-elf-gcc.path\}/g' | \ -sed 's/{runtime\.platform\.path}.tools.xtensa-esp32s3-elf/\{runtime.tools.xtensa-esp32s3-elf-gcc.path\}/g' | \ +sed "s/{runtime\.platform\.path}.tools.xtensa-esp32-elf/\\{runtime.tools.$X32TC_NEW_NAME.path\\}/g" | \ +sed "s/{runtime\.platform\.path}.tools.xtensa-esp32s2-elf/\\{runtime.tools.$XS2TC_NEW_NAME.path\\}/g" | \ +sed "s/{runtime\.platform\.path}.tools.xtensa-esp32s3-elf/\\{runtime.tools.$XS3TC_NEW_NAME.path\\}/g" | \ sed 's/{runtime\.platform\.path}.tools.riscv32-esp-elf-gdb/\{runtime.tools.riscv32-esp-elf-gdb.path\}/g' | \ sed "s/{runtime\.platform\.path}.tools.riscv32-esp-elf/\\{runtime.tools.$RVTC_NEW_NAME.path\\}/g" | \ sed 's/{runtime\.platform\.path}.tools.esptool/\{runtime.tools.esptool_py.path\}/g' | \ @@ -341,7 +348,19 @@ rvtc_jq_arg="\ (.packages[0].platforms[0].toolsDependencies[] | select(.name==\"$RVTC_NAME\")).version = \"$RVTC_VERSION\" |\ (.packages[0].platforms[0].toolsDependencies[] | select(.name==\"$RVTC_NAME\")).name = \"$RVTC_NEW_NAME\" |\ (.packages[0].tools[] | select(.name==\"$RVTC_NAME\")).version = \"$RVTC_VERSION\" |\ - (.packages[0].tools[] | select(.name==\"$RVTC_NAME\")).name = \"$RVTC_NEW_NAME\"" + (.packages[0].tools[] | select(.name==\"$RVTC_NAME\")).name = \"$RVTC_NEW_NAME\" |\ + (.packages[0].platforms[0].toolsDependencies[] | select(.name==\"$X32TC_NAME\")).version = \"$RVTC_VERSION\" |\ + (.packages[0].platforms[0].toolsDependencies[] | select(.name==\"$X32TC_NAME\")).name = \"$X32TC_NEW_NAME\" |\ + (.packages[0].tools[] | select(.name==\"$X32TC_NAME\")).version = \"$RVTC_VERSION\" |\ + (.packages[0].tools[] | select(.name==\"$X32TC_NAME\")).name = \"$X32TC_NEW_NAME\" |\ + (.packages[0].platforms[0].toolsDependencies[] | select(.name==\"$XS2TC_NAME\")).version = \"$RVTC_VERSION\" |\ + (.packages[0].platforms[0].toolsDependencies[] | select(.name==\"$XS2TC_NAME\")).name = \"$XS2TC_NEW_NAME\" |\ + (.packages[0].tools[] | select(.name==\"$XS2TC_NAME\")).version = \"$RVTC_VERSION\" |\ + (.packages[0].tools[] | select(.name==\"$XS2TC_NAME\")).name = \"$XS2TC_NEW_NAME\" |\ + (.packages[0].platforms[0].toolsDependencies[] | select(.name==\"$XS3TC_NAME\")).version = \"$RVTC_VERSION\" |\ + (.packages[0].platforms[0].toolsDependencies[] | select(.name==\"$XS3TC_NAME\")).name = \"$XS3TC_NEW_NAME\" |\ + (.packages[0].tools[] | select(.name==\"$XS3TC_NAME\")).version = \"$RVTC_VERSION\" |\ + (.packages[0].tools[] | select(.name==\"$XS3TC_NAME\")).name = \"$XS3TC_NEW_NAME\"" cat "$PACKAGE_JSON_TEMPLATE" | jq "$rvtc_jq_arg" > "$OUTPUT_DIR/package-$LIBS_PROJ_NAME-rvfix.json" PACKAGE_JSON_TEMPLATE="$OUTPUT_DIR/package-$LIBS_PROJ_NAME-rvfix.json" diff --git a/.github/scripts/tests_run.sh b/.github/scripts/tests_run.sh index 62fdcfd5af1..4e8ad4bb3b1 100755 --- a/.github/scripts/tests_run.sh +++ b/.github/scripts/tests_run.sh @@ -7,6 +7,7 @@ function run_test() { local erase_flash=$4 local sketchdir=$(dirname $sketch) local sketchname=$(basename $sketchdir) + local result=0 if [[ -f "$sketchdir/.skip.$platform" ]] || [[ -f "$sketchdir/.skip.$target" ]] || [[ -f "$sketchdir/.skip.$platform.$target" ]]; then echo "Skipping $sketchname test for $target, platform: $platform" @@ -61,11 +62,18 @@ function run_test() { extra_args="--embedded-services esp,arduino" fi + result=0 echo "pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args" - bash -c "pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args" + bash -c "set +e; pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args; exit \$?" || result=$? result=$? if [ $result -ne 0 ]; then - return $result + result=0 + echo "Retrying test: $sketchname -- Config: $i" + bash -c "set +e; pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args; exit \$?" || result=$? + result=$? + if [ $result -ne 0 ]; then + exit $result + fi fi done } diff --git a/.github/scripts/update-version.sh b/.github/scripts/update-version.sh index aac4f527c0f..150d8594812 100755 --- a/.github/scripts/update-version.sh +++ b/.github/scripts/update-version.sh @@ -32,8 +32,8 @@ cat package.json | sed "s/.*\"version\":.*/ \"version\": \"$ESP_ARDUINO_VERSION echo "Updating cores/esp32/esp_arduino_version.h..." cat cores/esp32/esp_arduino_version.h | \ -sed "s/#define ESP_ARDUINO_VERSION_MAJOR.*/#define ESP_ARDUINO_VERSION_MAJOR $ESP_ARDUINO_VERSION_MAJOR/g" | \ -sed "s/#define ESP_ARDUINO_VERSION_MINOR.*/#define ESP_ARDUINO_VERSION_MINOR $ESP_ARDUINO_VERSION_MINOR/g" | \ -sed "s/#define ESP_ARDUINO_VERSION_PATCH.*/#define ESP_ARDUINO_VERSION_PATCH $ESP_ARDUINO_VERSION_PATCH/g" > __esp_arduino_version.h && mv __esp_arduino_version.h cores/esp32/esp_arduino_version.h +sed "s/#define ESP_ARDUINO_VERSION_MAJOR.*/#define ESP_ARDUINO_VERSION_MAJOR $ESP_ARDUINO_VERSION_MAJOR/g" | \ +sed "s/#define ESP_ARDUINO_VERSION_MINOR.*/#define ESP_ARDUINO_VERSION_MINOR $ESP_ARDUINO_VERSION_MINOR/g" | \ +sed "s/#define ESP_ARDUINO_VERSION_PATCH.*/#define ESP_ARDUINO_VERSION_PATCH $ESP_ARDUINO_VERSION_PATCH/g" > __esp_arduino_version.h && mv __esp_arduino_version.h cores/esp32/esp_arduino_version.h exit 0 diff --git a/.github/workflows/hil.yml b/.github/workflows/hil.yml index 9d864b2c67e..29b71921c55 100644 --- a/.github/workflows/hil.yml +++ b/.github/workflows/hil.yml @@ -59,6 +59,12 @@ jobs: echo "test_folder=${test_folder}" >> $GITHUB_OUTPUT echo "test_type=${test_type}" >> $GITHUB_OUTPUT + - name: Upload Event file + uses: actions/upload-artifact@v4 + with: + name: event_file + path: ${{github.event_path}} + build: needs: gen_chunks name: ${{matrix.chip}}-Build#${{matrix.chunks}} @@ -267,13 +273,3 @@ jobs: path: | tests/**/*.xml tests/**/result_*.json - - event_file: - name: "Event File" - runs-on: ubuntu-latest - steps: - - name: Upload - uses: actions/upload-artifact@v4 - with: - name: event_file - path: ${{github.event_path}} diff --git a/.github/workflows/lib.json b/.github/workflows/lib.json index 453267a2d2d..9b528e4cc43 100644 --- a/.github/workflows/lib.json +++ b/.github/workflows/lib.json @@ -35,6 +35,14 @@ "~/Arduino/libraries/ESPAsyncWebServer/examples/simple_server/simple_server.ino" ] }, + { + "name": "EthernetESP32", + "exclude_targets": [], + "sketch_path": [ + "~/Arduino/libraries/EthernetESP32/examples/LegacyEthernetTest/LegacyEthernetTest.ino", + "~/Arduino/libraries/EthernetESP32/examples/TwoEthernets/TwoEthernets.ino" + ] + }, { "name": "FastLED", "exclude_targets": [], @@ -62,5 +70,13 @@ "sketch_path": [ "~/Arduino/libraries/WS2812FX/examples/ws2812fx_spi/ws2812fx_spi.ino" ] + }, + { + "name": "ZACwire for TSic", + "exclude_targets": [], + "sketch_path": [ + "~/Arduino/libraries/ZACwire_for_TSic/examples/ReadingTwoTSICs/ReadingTwoTSICs.ino", + "~/Arduino/libraries/ZACwire_for_TSic/examples/ReadSingleTSIC206/ReadSingleTSIC206.ino" + ] } -] \ No newline at end of file +] diff --git a/.github/workflows/publishlib.yml b/.github/workflows/publishlib.yml index 7e7a4579ca9..7fd932f5309 100644 --- a/.github/workflows/publishlib.yml +++ b/.github/workflows/publishlib.yml @@ -32,7 +32,7 @@ jobs: IFS=$'\t' read name url <<< "$artifact" gh api $url > "$name.zip" unzip -j "$name.zip" -d "temp_$name" - if [[ "$name" == "pr_num" ]]; then + if [[ "$name" == "pr_number" ]]; then mv "temp_$name"/* workflows else mv "temp_$name"/* libraries-report diff --git a/.github/workflows/publishsizes-2.x.yml b/.github/workflows/publishsizes-2.x.yml new file mode 100644 index 00000000000..9c5583d02ab --- /dev/null +++ b/.github/workflows/publishsizes-2.x.yml @@ -0,0 +1,53 @@ +name: Sizes Results (master-v2.x) + +on: + workflow_dispatch: + +env: + # It's convenient to set variables for values used multiple times in the workflow + SKETCHES_REPORTS_PATH: artifacts/sizes-report + RESULT_SIZES_TEST_FILE: SIZES_TEST.md + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + +jobs: + sizes-test-results: + name: Sizes Comparsion Results + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 # This step checks out the repository's code at gh-pages branch + with: + ref: gh-pages + + - name: Create folder structure + run: | + mkdir -p artifacts && cd artifacts + mkdir -p sizes-report + mkdir -p sizes-report/master + mkdir -p sizes-report/pr + + # master folder is a base for comparison + # pr folder is for comparison with master + - name: Download JSON file + run: | + mv master_cli_compile/*.json artifacts/sizes-report/pr/ + mv v2.x_cli_compile/*.json artifacts/sizes-report/master/ + + - name: Report results + uses: P-R-O-C-H-Y/report-size-deltas@sizes_v2 + with: + sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }} + github-token: ${{ env.GITHUB_TOKEN }} + destination-file: ${{ env.RESULT_SIZES_TEST_FILE }} + + - name: Append file with action URL + run: + echo "/ [GitHub Action Link](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}})" >> ${{ env.RESULT_SIZES_TEST_FILE }} + + - name: Push to github repo + run: | + git config user.name github-actions + git config user.email github-actions@github.com + git add ${{ env.RESULT_SIZES_TEST_FILE }} + git commit -m "Generated Sizes Results (master-v2.x)" + git push origin HEAD:gh-pages diff --git a/.github/workflows/publishsizes.yml b/.github/workflows/publishsizes.yml index 8c4a957b22b..88b2eb0f113 100644 --- a/.github/workflows/publishsizes.yml +++ b/.github/workflows/publishsizes.yml @@ -46,7 +46,7 @@ jobs: IFS=$'\t' read name url <<< "$artifact" gh api $url > "$name.zip" unzip -j "$name.zip" -d "temp_$name" - if [[ "$name" == "pr_num" ]]; then + if [[ "$name" == "pr_number" ]]; then mv "temp_$name"/* sizes-report elif [[ "$name" == "pr_cli"* ]]; then mv "temp_$name"/* sizes-report/pr diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3a59d7a7dc4..1610be3f901 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,6 +16,7 @@ jobs: - uses: actions/setup-python@v5 with: python-version: '3.x' + - run: pip install packaging - name: Build Release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/wokwi.yml b/.github/workflows/wokwi.yml index 1f55235dd39..4678da7c0ba 100644 --- a/.github/workflows/wokwi.yml +++ b/.github/workflows/wokwi.yml @@ -95,6 +95,9 @@ jobs: - name: Install Wokwi CLI run: curl -L https://wokwi.com/ci/install.sh | sh + - name: Wokwi CI Server + uses: wokwi/wokwi-ci-server-action@v1 + - name: Install dependencies run: | pip install -U pip diff --git a/CMakeLists.txt b/CMakeLists.txt index 389097c6ac1..ba19b8cf035 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -288,7 +288,7 @@ set(includedirs variants/${CONFIG_ARDUINO_VARIANT}/ cores/esp32/ ${ARDUINO_LIBRA set(srcs ${CORE_SRCS} ${ARDUINO_LIBRARIES_SRCS}) set(priv_includes cores/esp32/libb64) set(requires spi_flash esp_partition mbedtls wifi_provisioning wpa_supplicant esp_adc esp_eth http_parser) -set(priv_requires fatfs nvs_flash app_update spiffs bootloader_support bt esp_hid usb ${ARDUINO_LIBRARIES_REQUIRES}) +set(priv_requires fatfs nvs_flash app_update spiffs bootloader_support bt esp_hid usb esp_psram ${ARDUINO_LIBRARIES_REQUIRES}) idf_component_register(INCLUDE_DIRS ${includedirs} PRIV_INCLUDE_DIRS ${priv_includes} SRCS ${srcs} REQUIRES ${requires} PRIV_REQUIRES ${priv_requires}) diff --git a/README.md b/README.md index 6f4f9b1ba16..a62f2f95b21 100644 --- a/README.md +++ b/README.md @@ -57,8 +57,8 @@ Here are the ESP32 series supported by the Arduino-ESP32 project: | ESP32-S2 | Yes | Yes | [ESP32-S2](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf) | | ESP32-C3 | Yes | Yes | [ESP32-C3](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf) | | ESP32-S3 | Yes | Yes | [ESP32-S3](https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf) | -| ESP32-C6 | No | Yes | [ESP32-C6](https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf) | -| ESP32-H2 | No | Yes | [ESP32-H2](https://www.espressif.com/sites/default/files/documentation/esp32-h2_datasheet_en.pdf) | +| ESP32-C6 | Yes | Yes | [ESP32-C6](https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf) | +| ESP32-H2 | Yes | Yes | [ESP32-H2](https://www.espressif.com/sites/default/files/documentation/esp32-h2_datasheet_en.pdf) | > [!NOTE] > ESP32-C2 is also supported by Arduino-ESP32 but requires rebuilding the static libraries. This is not trivial and requires a good understanding of the ESP-IDF diff --git a/boards.txt b/boards.txt index e0fb66b2e8c..4a64ecc65b0 100644 --- a/boards.txt +++ b/boards.txt @@ -33,6 +33,17 @@ menu.NetworkLogLevel=Network Log Level ### DO NOT PUT BOARDS ABOVE THE OFFICIAL ESPRESSIF BOARDS! ### ############################################################## +# Generic definition to be used for USB discovery of CDC/JTAG +esp32_family.name=ESP32 Family Device +esp32_family.hide=true +esp32_family.vid.0=0x303a +esp32_family.pid.0=0x1001 +esp32_family.upload_port.0.vid=0x303a +esp32_family.upload_port.0.pid=0x1001 +esp32_family.build.board=ESP32_FAMILY + +############################################################## + esp32c2.name=ESP32C2 Dev Module esp32c2.hide=true @@ -76,6 +87,9 @@ esp32c2.menu.PartitionScheme.default=Default 4MB with spiffs (1.2MB APP/1.5MB SP esp32c2.menu.PartitionScheme.default.build.partitions=default esp32c2.menu.PartitionScheme.defaultffat=Default 4MB with ffat (1.2MB APP/1.5MB FATFS) esp32c2.menu.PartitionScheme.defaultffat.build.partitions=default_ffat +esp32c2.menu.PartitionScheme.no_fs=No FS 4MB (2MB APP x2) +esp32c2.menu.PartitionScheme.no_fs.build.partitions=no_fs +esp32c2.menu.PartitionScheme.no_fs.upload.maximum_size=2031616 esp32c2.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) esp32c2.menu.PartitionScheme.no_ota.build.partitions=no_ota esp32c2.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 @@ -149,8 +163,6 @@ esp32c2.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32h2.name=ESP32H2 Dev Module -esp32h2.vid.0=0x303a -esp32h2.pid.0=0x1001 esp32h2.bootloader.tool=esptool_py esp32h2.bootloader.tool.default=esptool_py @@ -214,6 +226,9 @@ esp32h2.menu.PartitionScheme.default_8MB.build.partitions=default_8MB esp32h2.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 esp32h2.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) esp32h2.menu.PartitionScheme.minimal.build.partitions=minimal +esp32h2.menu.PartitionScheme.no_fs=No FS 4MB (2MB APP x2) +esp32h2.menu.PartitionScheme.no_fs.build.partitions=no_fs +esp32h2.menu.PartitionScheme.no_fs.upload.maximum_size=2031616 esp32h2.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) esp32h2.menu.PartitionScheme.no_ota.build.partitions=no_ota esp32h2.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 @@ -329,8 +344,6 @@ esp32h2.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_comm ############################################################## esp32c6.name=ESP32C6 Dev Module -esp32c6.vid.0=0x303a -esp32c6.pid.0=0x1001 esp32c6.bootloader.tool=esptool_py esp32c6.bootloader.tool.default=esptool_py @@ -393,6 +406,9 @@ esp32c6.menu.PartitionScheme.default_8MB.build.partitions=default_8MB esp32c6.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 esp32c6.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) esp32c6.menu.PartitionScheme.minimal.build.partitions=minimal +esp32c6.menu.PartitionScheme.no_fs=No FS 4MB (2MB APP x2) +esp32c6.menu.PartitionScheme.no_fs.build.partitions=no_fs +esp32c6.menu.PartitionScheme.no_fs.upload.maximum_size=2031616 esp32c6.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) esp32c6.menu.PartitionScheme.no_ota.build.partitions=no_ota esp32c6.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 @@ -515,8 +531,6 @@ esp32c6.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_comm ############################################################## esp32s3.name=ESP32S3 Dev Module -esp32s3.vid.0=0x303a -esp32s3.pid.0=0x1001 esp32s3.bootloader.tool=esptool_py esp32s3.bootloader.tool.default=esptool_py @@ -661,6 +675,9 @@ esp32s3.menu.PartitionScheme.default_8MB.build.partitions=default_8MB esp32s3.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 esp32s3.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) esp32s3.menu.PartitionScheme.minimal.build.partitions=minimal +esp32s3.menu.PartitionScheme.no_fs=No FS 4MB (2MB APP x2) +esp32s3.menu.PartitionScheme.no_fs.build.partitions=no_fs +esp32s3.menu.PartitionScheme.no_fs.upload.maximum_size=2031616 esp32s3.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) esp32s3.menu.PartitionScheme.no_ota.build.partitions=no_ota esp32s3.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 @@ -761,8 +778,6 @@ esp32s3.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_co ############################################################## esp32c3.name=ESP32C3 Dev Module -esp32c3.vid.0=0x303a -esp32c3.pid.0=0x1001 esp32c3.bootloader.tool=esptool_py esp32c3.bootloader.tool.default=esptool_py @@ -825,6 +840,9 @@ esp32c3.menu.PartitionScheme.default_8MB.build.partitions=default_8MB esp32c3.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 esp32c3.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) esp32c3.menu.PartitionScheme.minimal.build.partitions=minimal +esp32c3.menu.PartitionScheme.no_fs=No FS 4MB (2MB APP x2) +esp32c3.menu.PartitionScheme.no_fs.build.partitions=no_fs +esp32c3.menu.PartitionScheme.no_fs.upload.maximum_size=2031616 esp32c3.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) esp32c3.menu.PartitionScheme.no_ota.build.partitions=no_ota esp32c3.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 @@ -938,6 +956,8 @@ esp32c3.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_co esp32s2.name=ESP32S2 Dev Module esp32s2.vid.0=0x303a esp32s2.pid.0=0x0002 +esp32s2.upload_port.vid.0=0x303a +esp32s2.upload_port.pid.0=0x0002 esp32s2.bootloader.tool=esptool_py esp32s2.bootloader.tool.default=esptool_py @@ -1021,6 +1041,9 @@ esp32s2.menu.PartitionScheme.default_8MB.build.partitions=default_8MB esp32s2.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 esp32s2.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) esp32s2.menu.PartitionScheme.minimal.build.partitions=minimal +esp32s2.menu.PartitionScheme.no_fs=No FS 4MB (2MB APP x2) +esp32s2.menu.PartitionScheme.no_fs.build.partitions=no_fs +esp32s2.menu.PartitionScheme.no_fs.upload.maximum_size=2031616 esp32s2.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) esp32s2.menu.PartitionScheme.no_ota.build.partitions=no_ota esp32s2.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 @@ -1194,6 +1217,9 @@ esp32.menu.PartitionScheme.default_8MB.build.partitions=default_8MB esp32.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 esp32.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) esp32.menu.PartitionScheme.minimal.build.partitions=minimal +esp32.menu.PartitionScheme.no_fs=No FS 4MB (2MB APP x2) +esp32.menu.PartitionScheme.no_fs.build.partitions=no_fs +esp32.menu.PartitionScheme.no_fs.upload.maximum_size=2031616 esp32.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) esp32.menu.PartitionScheme.no_ota.build.partitions=no_ota esp32.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 @@ -1364,6 +1390,9 @@ esp32da.menu.PartitionScheme.default_8MB.build.partitions=default_8MB esp32da.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 esp32da.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) esp32da.menu.PartitionScheme.minimal.build.partitions=minimal +esp32da.menu.PartitionScheme.no_fs=No FS 4MB (2MB APP x2) +esp32da.menu.PartitionScheme.no_fs.build.partitions=no_fs +esp32da.menu.PartitionScheme.no_fs.upload.maximum_size=2031616 esp32da.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) esp32da.menu.PartitionScheme.no_ota.build.partitions=no_ota esp32da.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 @@ -1676,8 +1705,6 @@ pico32.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32s3-octal.name=ESP32S3 Dev Module Octal (WROOM2) -esp32s3-octal.vid.0=0x303a -esp32s3-octal.pid.0=0x1001 esp32s3-octal.bootloader.tool=esptool_py esp32s3-octal.bootloader.tool.default=esptool_py @@ -1906,8 +1933,6 @@ esp32s3-octal.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32s3box.name=ESP32-S3-Box -esp32s3box.vid.0=0x303a -esp32s3box.pid.0=0x1001 esp32s3box.bootloader.tool=esptool_py esp32s3box.bootloader.tool.default=esptool_py @@ -2004,8 +2029,6 @@ esp32s3box.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32s3usbotg.name=ESP32-S3-USB-OTG -esp32s3usbotg.vid.0=0x303a -esp32s3usbotg.pid.0=0x1001 esp32s3usbotg.bootloader.tool=esptool_py esp32s3usbotg.bootloader.tool.default=esptool_py @@ -2118,8 +2141,6 @@ esp32s3usbotg.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32s3camlcd.name=ESP32S3 CAM LCD -esp32s3camlcd.vid.0=0x303a -esp32s3camlcd.pid.0=0x1001 esp32s3camlcd.bootloader.tool=esptool_py esp32s3camlcd.bootloader.tool.default=esptool_py @@ -2243,6 +2264,8 @@ esp32s3camlcd.menu.EraseFlash.all.upload.erase_cmd=-e esp32s2usb.name=ESP32S2 Native USB esp32s2usb.vid.0=0x303a esp32s2usb.pid.0=0x0003 +esp32s2usb.upload_port.vid.0=0x303a +esp32s2usb.upload_port.pid.0=0x0003 esp32s2usb.bootloader.tool=esptool_py esp32s2usb.bootloader.tool.default=esptool_py @@ -2494,8 +2517,6 @@ esp32wroverkit.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## aventen_s3_sync.name=Aventen S3 Sync -aventen_s3_sync.vid.0=0x303a -aventen_s3_sync.pid.0=0x1001 ## Based upon ESP32-S3 Dev Board aventen_s3_sync.bootloader.tool=esptool_py @@ -2712,6 +2733,8 @@ aventen_s3_sync.menu.EraseFlash.all.upload.erase_cmd=-e um_bling.name=UM BLING um_bling.vid.0=0x303a um_bling.pid.0=0x817F +um_bling.upload_port.0.vid=0x303a +um_bling.upload_port.0.pid=0x817F um_bling.bootloader.tool=esptool_py um_bling.bootloader.tool.default=esptool_py @@ -2864,6 +2887,8 @@ um_bling.menu.EraseFlash.all.upload.erase_cmd=-e um_feathers2.name=UM FeatherS2 um_feathers2.vid.0=0x239A um_feathers2.pid.0=0x80AB +um_feathers2.upload_port.0.vid=0x239A +um_feathers2.upload_port.0.pid=0x80AB um_feathers2.bootloader.tool=esptool_py um_feathers2.bootloader.tool.default=esptool_py @@ -3015,6 +3040,8 @@ um_feathers2.menu.EraseFlash.all.upload.erase_cmd=-e um_feathers2neo.name=UM FeatherS2 Neo um_feathers2neo.vid.0=0x303a um_feathers2neo.pid.0=0x80B4 +um_feathers2neo.upload_port.0.vid=0x303a +um_feathers2neo.upload_port.0.pid=0x80B4 um_feathers2neo.bootloader.tool=esptool_py um_feathers2neo.bootloader.tool.default=esptool_py @@ -3152,6 +3179,8 @@ um_feathers2neo.menu.EraseFlash.all.upload.erase_cmd=-e um_feathers3.name=UM FeatherS3 um_feathers3.vid.0=0x303a um_feathers3.pid.0=0x80D6 +um_feathers3.upload_port.0.vid=0x303a +um_feathers3.upload_port.0.pid=0x80D6 um_feathers3.bootloader.tool=esptool_py um_feathers3.bootloader.tool.default=esptool_py @@ -3313,6 +3342,8 @@ um_feathers3.menu.EraseFlash.all.upload.erase_cmd=-e um_nanos3.name=UM NanoS3 um_nanos3.vid.0=0x303a um_nanos3.pid.0=0x8179 +um_nanos3.upload_port.0.vid=0x303a +um_nanos3.upload_port.0.pid=0x8179 um_nanos3.bootloader.tool=esptool_py um_nanos3.bootloader.tool.default=esptool_py @@ -3465,6 +3496,8 @@ um_nanos3.menu.EraseFlash.all.upload.erase_cmd=-e um_pros3.name=UM PROS3 um_pros3.vid.0=0x303a um_pros3.pid.0=0x80D3 +um_pros3.upload_port.0.vid=0x303a +um_pros3.upload_port.0.pid=0x80D3 um_pros3.bootloader.tool=esptool_py um_pros3.bootloader.tool.default=esptool_py @@ -3623,140 +3656,6 @@ um_pros3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## -um_rmp.name=UM RMP -um_rmp.vid.0=0x303a -um_rmp.pid.0=0x80F6 - -um_rmp.upload.tool=esptool_py -um_rmp.upload.tool.default=esptool_py -um_rmp.upload.tool.network=esp_ota - -um_rmp.upload.maximum_size=1310720 -um_rmp.upload.maximum_data_size=327680 -um_rmp.upload.flags= -um_rmp.upload.extra_flags= -um_rmp.upload.use_1200bps_touch=true -um_rmp.upload.wait_for_upload_port=true - -um_rmp.serial.disableDTR=false -um_rmp.serial.disableRTS=false - -um_rmp.build.tarch=xtensa -um_rmp.build.bootloader_addr=0x1000 -um_rmp.build.target=esp32s2 -um_rmp.build.mcu=esp32s2 -um_rmp.build.core=esp32 -um_rmp.build.variant=um_rmp -um_rmp.build.board=RMP - -um_rmp.build.cdc_on_boot=1 -um_rmp.build.msc_on_boot=0 -um_rmp.build.dfu_on_boot=0 -um_rmp.build.f_cpu=240000000L -um_rmp.build.flash_size=4MB -um_rmp.build.flash_freq=80m -um_rmp.build.flash_mode=dio -um_rmp.build.boot=qio -um_rmp.build.partitions=default -um_rmp.build.defines= - -um_rmp.menu.CDCOnBoot.cdc=Enabled -um_rmp.menu.CDCOnBoot.cdc.build.cdc_on_boot=1 -um_rmp.menu.CDCOnBoot.default=Disabled -um_rmp.menu.CDCOnBoot.default.build.cdc_on_boot=0 - -um_rmp.menu.MSCOnBoot.default=Disabled -um_rmp.menu.MSCOnBoot.default.build.msc_on_boot=0 -um_rmp.menu.MSCOnBoot.msc=Enabled -um_rmp.menu.MSCOnBoot.msc.build.msc_on_boot=1 - -um_rmp.menu.DFUOnBoot.default=Disabled -um_rmp.menu.DFUOnBoot.default.build.dfu_on_boot=0 -um_rmp.menu.DFUOnBoot.dfu=Enabled -um_rmp.menu.DFUOnBoot.dfu.build.dfu_on_boot=1 - -um_rmp.menu.PSRAM.enabled=Enabled -um_rmp.menu.PSRAM.enabled.build.defines=-DBOARD_HAS_PSRAM -um_rmp.menu.PSRAM.disabled=Disabled -um_rmp.menu.PSRAM.disabled.build.defines= - -um_rmp.menu.PartitionScheme.default=Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS) -um_rmp.menu.PartitionScheme.default.build.partitions=default -um_rmp.menu.PartitionScheme.defaultffat=Default 4MB with ffat (1.2MB APP/1.5MB FATFS) -um_rmp.menu.PartitionScheme.defaultffat.build.partitions=default_ffat -um_rmp.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) -um_rmp.menu.PartitionScheme.minimal.build.partitions=minimal -um_rmp.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) -um_rmp.menu.PartitionScheme.no_ota.build.partitions=no_ota -um_rmp.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 -um_rmp.menu.PartitionScheme.noota_3g=No OTA (1MB APP/3MB SPIFFS) -um_rmp.menu.PartitionScheme.noota_3g.build.partitions=noota_3g -um_rmp.menu.PartitionScheme.noota_3g.upload.maximum_size=1048576 -um_rmp.menu.PartitionScheme.noota_ffat=No OTA (2MB APP/2MB FATFS) -um_rmp.menu.PartitionScheme.noota_ffat.build.partitions=noota_ffat -um_rmp.menu.PartitionScheme.noota_ffat.upload.maximum_size=2097152 -um_rmp.menu.PartitionScheme.noota_3gffat=No OTA (1MB APP/3MB FATFS) -um_rmp.menu.PartitionScheme.noota_3gffat.build.partitions=noota_3gffat -um_rmp.menu.PartitionScheme.noota_3gffat.upload.maximum_size=1048576 -um_rmp.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS) -um_rmp.menu.PartitionScheme.huge_app.build.partitions=huge_app -um_rmp.menu.PartitionScheme.huge_app.upload.maximum_size=3145728 -um_rmp.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS) -um_rmp.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs -um_rmp.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080 - -um_rmp.menu.CPUFreq.240=240MHz (WiFi) -um_rmp.menu.CPUFreq.240.build.f_cpu=240000000L -um_rmp.menu.CPUFreq.160=160MHz (WiFi) -um_rmp.menu.CPUFreq.160.build.f_cpu=160000000L -um_rmp.menu.CPUFreq.80=80MHz (WiFi) -um_rmp.menu.CPUFreq.80.build.f_cpu=80000000L -um_rmp.menu.CPUFreq.40=40MHz -um_rmp.menu.CPUFreq.40.build.f_cpu=40000000L -um_rmp.menu.CPUFreq.20=20MHz -um_rmp.menu.CPUFreq.20.build.f_cpu=20000000L -um_rmp.menu.CPUFreq.10=10MHz -um_rmp.menu.CPUFreq.10.build.f_cpu=10000000L - -um_rmp.menu.FlashSize.4M=4MB (32Mb) -um_rmp.menu.FlashSize.4M.build.flash_size=4MB -um_rmp.menu.FlashSize.2M=2MB (16Mb) -um_rmp.menu.FlashSize.2M.build.flash_size=2MB -um_rmp.menu.FlashSize.2M.build.partitions=minimal - -um_rmp.menu.UploadSpeed.921600=921600 -um_rmp.menu.UploadSpeed.921600.upload.speed=921600 -um_rmp.menu.UploadSpeed.115200=115200 -um_rmp.menu.UploadSpeed.115200.upload.speed=115200 -um_rmp.menu.UploadSpeed.256000.windows=256000 -um_rmp.menu.UploadSpeed.256000.upload.speed=256000 -um_rmp.menu.UploadSpeed.230400.windows.upload.speed=256000 -um_rmp.menu.UploadSpeed.230400=230400 -um_rmp.menu.UploadSpeed.230400.upload.speed=230400 -um_rmp.menu.UploadSpeed.460800.linux=460800 -um_rmp.menu.UploadSpeed.460800.macosx=460800 -um_rmp.menu.UploadSpeed.460800.upload.speed=460800 - -um_rmp.menu.DebugLevel.none=None -um_rmp.menu.DebugLevel.none.build.code_debug=0 -um_rmp.menu.DebugLevel.error=Error -um_rmp.menu.DebugLevel.error.build.code_debug=1 -um_rmp.menu.DebugLevel.warn=Warn -um_rmp.menu.DebugLevel.warn.build.code_debug=2 -um_rmp.menu.DebugLevel.info=Info -um_rmp.menu.DebugLevel.info.build.code_debug=3 -um_rmp.menu.DebugLevel.debug=Debug -um_rmp.menu.DebugLevel.debug.build.code_debug=4 -um_rmp.menu.DebugLevel.verbose=Verbose -um_rmp.menu.DebugLevel.verbose.build.code_debug=5 - -um_rmp.menu.EraseFlash.none=Disabled -um_rmp.menu.EraseFlash.none.upload.erase_cmd= -um_rmp.menu.EraseFlash.all=Enabled -um_rmp.menu.EraseFlash.all.upload.erase_cmd=-e - -############################################################## - um_tinypico.name=UM TinyPICO um_tinypico.bootloader.tool=esptool_py @@ -3854,8 +3753,6 @@ um_tinypico.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## um_tinyc6.name=UM TinyC6 -um_tinyc6.vid.0=0x303a -um_tinyc6.pid.0=0x1001 um_tinyc6.bootloader.tool=esptool_py um_tinyc6.bootloader.tool.default=esptool_py @@ -3915,6 +3812,12 @@ um_tinyc6.menu.PartitionScheme.default_8MB.upload.maximum_size=3342336 um_tinyc6.menu.PartitionScheme.rainmaker=RainMaker um_tinyc6.menu.PartitionScheme.rainmaker.build.partitions=rainmaker um_tinyc6.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728 +um_tinyc6.menu.PartitionScheme.zigbee=Zigbee 4MB with spiffs +um_tinyc6.menu.PartitionScheme.zigbee.build.partitions=zigbee +um_tinyc6.menu.PartitionScheme.zigbee.upload.maximum_size=1310720 +um_tinyc6.menu.PartitionScheme.zigbee_zczr=Zigbee ZCZR 4MB with spiffs +um_tinyc6.menu.PartitionScheme.zigbee_zczr.build.partitions=zigbee_zczr +um_tinyc6.menu.PartitionScheme.zigbee_zczr.upload.maximum_size=1310720 um_tinyc6.menu.PartitionScheme.custom=Custom um_tinyc6.menu.PartitionScheme.custom.build.partitions= um_tinyc6.menu.PartitionScheme.custom.upload.maximum_size=16777216 @@ -3979,11 +3882,26 @@ um_tinyc6.menu.EraseFlash.none.upload.erase_cmd= um_tinyc6.menu.EraseFlash.all=Enabled um_tinyc6.menu.EraseFlash.all.upload.erase_cmd=-e +um_tinyc6.menu.ZigbeeMode.default=Disabled +um_tinyc6.menu.ZigbeeMode.default.build.zigbee_mode= +um_tinyc6.menu.ZigbeeMode.default.build.zigbee_libs= +um_tinyc6.menu.ZigbeeMode.ed=Zigbee ED (end device) +um_tinyc6.menu.ZigbeeMode.ed.build.zigbee_mode=-DZIGBEE_MODE_ED +um_tinyc6.menu.ZigbeeMode.ed.build.zigbee_libs=-lesp_zb_api_ed -lesp_zb_cli_command -lzboss_stack.ed -lzboss_port +um_tinyc6.menu.ZigbeeMode.zczr=Zigbee ZCZR (coordinator) +um_tinyc6.menu.ZigbeeMode.zczr.build.zigbee_mode=-DZIGBEE_MODE_ZCZR +um_tinyc6.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_command -lzboss_stack.zczr -lzboss_port +um_tinyc6.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor) +um_tinyc6.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP +um_tinyc6.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port + ############################################################## um_tinys2.name=UM TinyS2 um_tinys2.vid.0=0x303a um_tinys2.pid.0=0x8001 +um_tinys2.upload_port.0.vid=0x303a +um_tinys2.upload_port.0.pid=0x8001 um_tinys2.bootloader.tool=esptool_py um_tinys2.bootloader.tool.default=esptool_py @@ -4121,6 +4039,8 @@ um_tinys2.menu.EraseFlash.all.upload.erase_cmd=-e um_tinys3.name=UM TinyS3 um_tinys3.vid.0=0x303a um_tinys3.pid.0=0x80D0 +um_tinys3.upload_port.0.vid=0x303a +um_tinys3.upload_port.0.pid=0x80D0 um_tinys3.bootloader.tool=esptool_py um_tinys3.bootloader.tool.default=esptool_py @@ -4493,8 +4413,6 @@ lilygo_t_display.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## lilygo_t_display_s3.name=LilyGo T-Display-S3 -lilygo_t_display_s3.vid.0=0x303a -lilygo_t_display_s3.pid.0=0x1001 lilygo_t_display_s3.bootloader.tool=esptool_py lilygo_t_display_s3.bootloader.tool.default=esptool_py @@ -5961,8 +5879,6 @@ sparkfun_esp32s2_thing_plus.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## sparkfun_esp32c6_thing_plus.name=SparkFun ESP32-C6 Thing Plus -sparkfun_esp32c6_thing_plus.vid.0=0x303a -sparkfun_esp32c6_thing_plus.pid.0=0x1001 sparkfun_esp32c6_thing_plus.bootloader.tool=esptool_py sparkfun_esp32c6_thing_plus.bootloader.tool.default=esptool_py @@ -6052,6 +5968,12 @@ sparkfun_esp32c6_thing_plus.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum sparkfun_esp32c6_thing_plus.menu.PartitionScheme.rainmaker=RainMaker sparkfun_esp32c6_thing_plus.menu.PartitionScheme.rainmaker.build.partitions=rainmaker sparkfun_esp32c6_thing_plus.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728 +sparkfun_esp32c6_thing_plus.menu.PartitionScheme.zigbee=Zigbee 4MB with spiffs +sparkfun_esp32c6_thing_plus.menu.PartitionScheme.zigbee.build.partitions=zigbee +sparkfun_esp32c6_thing_plus.menu.PartitionScheme.zigbee.upload.maximum_size=1310720 +sparkfun_esp32c6_thing_plus.menu.PartitionScheme.zigbee_zczr=Zigbee ZCZR 4MB with spiffs +sparkfun_esp32c6_thing_plus.menu.PartitionScheme.zigbee_zczr.build.partitions=zigbee_zczr +sparkfun_esp32c6_thing_plus.menu.PartitionScheme.zigbee_zczr.upload.maximum_size=1310720 sparkfun_esp32c6_thing_plus.menu.PartitionScheme.custom=Custom sparkfun_esp32c6_thing_plus.menu.PartitionScheme.custom.build.partitions= sparkfun_esp32c6_thing_plus.menu.PartitionScheme.custom.upload.maximum_size=16777216 @@ -6123,6 +6045,19 @@ sparkfun_esp32c6_thing_plus.menu.EraseFlash.none.upload.erase_cmd= sparkfun_esp32c6_thing_plus.menu.EraseFlash.all=Enabled sparkfun_esp32c6_thing_plus.menu.EraseFlash.all.upload.erase_cmd=-e +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.default=Disabled +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.default.build.zigbee_mode= +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.default.build.zigbee_libs= +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.ed=Zigbee ED (end device) +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.ed.build.zigbee_mode=-DZIGBEE_MODE_ED +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.ed.build.zigbee_libs=-lesp_zb_api_ed -lesp_zb_cli_command -lzboss_stack.ed -lzboss_port +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.zczr=Zigbee ZCZR (coordinator) +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.zczr.build.zigbee_mode=-DZIGBEE_MODE_ZCZR +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_command -lzboss_stack.zczr -lzboss_port +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor) +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP +sparkfun_esp32c6_thing_plus.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port + ############################################################## esp32micromod.name=SparkFun ESP32 MicroMod @@ -6531,8 +6466,6 @@ sparkfun_esp32_iot_redboard.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## sparkfun_esp32c6_qwiic_pocket.name=SparkFun ESP32-C6 Qwiic Pocket -sparkfun_esp32c6_qwiic_pocket.vid.0=0x303a -sparkfun_esp32c6_qwiic_pocket.pid.0=0x1001 sparkfun_esp32c6_qwiic_pocket.bootloader.tool=esptool_py sparkfun_esp32c6_qwiic_pocket.bootloader.tool.default=esptool_py @@ -6622,6 +6555,12 @@ sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.app3M_fat9M_16MB.upload.maxim sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.rainmaker=RainMaker sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.rainmaker.build.partitions=rainmaker sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728 +sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.zigbee=Zigbee 4MB with spiffs +sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.zigbee.build.partitions=zigbee +sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.zigbee.upload.maximum_size=1310720 +sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.zigbee_zczr=Zigbee ZCZR 4MB with spiffs +sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.zigbee_zczr.build.partitions=zigbee_zczr +sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.zigbee_zczr.upload.maximum_size=1310720 sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.custom=Custom sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.custom.build.partitions= sparkfun_esp32c6_qwiic_pocket.menu.PartitionScheme.custom.upload.maximum_size=16777216 @@ -6693,6 +6632,19 @@ sparkfun_esp32c6_qwiic_pocket.menu.EraseFlash.none.upload.erase_cmd= sparkfun_esp32c6_qwiic_pocket.menu.EraseFlash.all=Enabled sparkfun_esp32c6_qwiic_pocket.menu.EraseFlash.all.upload.erase_cmd=-e +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.default=Disabled +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.default.build.zigbee_mode= +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.default.build.zigbee_libs= +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.ed=Zigbee ED (end device) +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.ed.build.zigbee_mode=-DZIGBEE_MODE_ED +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.ed.build.zigbee_libs=-lesp_zb_api_ed -lesp_zb_cli_command -lzboss_stack.ed -lzboss_port +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.zczr=Zigbee ZCZR (coordinator) +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.zczr.build.zigbee_mode=-DZIGBEE_MODE_ZCZR +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_command -lzboss_stack.zczr -lzboss_port +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor) +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP +sparkfun_esp32c6_qwiic_pocket.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port + ############################################################## # SparkFun Pro Micro ESP32C3 @@ -6988,8 +6940,6 @@ nina_w10.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## nora_w10.name=u-blox NORA-W10 series (ESP32-S3) -nora_w10.vid.0=0x303a -nora_w10.pid.0=0x1001 nora_w10.bootloader.tool=esptool_py nora_w10.bootloader.tool.default=esptool_py @@ -7590,8 +7540,6 @@ d32_pro.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## lolin_c3_mini.name=LOLIN C3 Mini -lolin_c3_mini.vid.0=0x303a -lolin_c3_mini.pid.0=0x1001 lolin_c3_mini.bootloader.tool=esptool_py lolin_c3_mini.bootloader.tool.default=esptool_py @@ -7707,8 +7655,6 @@ lolin_c3_mini.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## lolin_c3_pico.name=LOLIN C3 Pico -lolin_c3_pico.vid.0=0x303a -lolin_c3_pico.pid.0=0x1001 lolin_c3_pico.bootloader.tool=esptool_py lolin_c3_pico.bootloader.tool.default=esptool_py @@ -8017,8 +7963,6 @@ lolin_s2_pico.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## lolin_s3.name=LOLIN S3 -lolin_s3.vid.0=0x303a -lolin_s3.pid.0=0x1001 lolin_s3.bootloader.tool=esptool_py lolin_s3.bootloader.tool.default=esptool_py @@ -9234,10 +9178,6 @@ hornbill32minima.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## dfrobot_beetle_esp32c3.name=DFRobot Beetle ESP32-C3 -#dfrobot_beetle_esp32c3.vid.0=0x3343 -#dfrobot_beetle_esp32c3.pid.0=0x8364 -dfrobot_beetle_esp32c3.vid.0=0x303a -dfrobot_beetle_esp32c3.pid.0=0x1001 dfrobot_beetle_esp32c3.bootloader.tool=esptool_py dfrobot_beetle_esp32c3.bootloader.tool.default=esptool_py @@ -9378,8 +9318,6 @@ dfrobot_beetle_esp32c3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## dfrobot_beetle_esp32c6.name=DFRobot Beetle ESP32-C6 -dfrobot_beetle_esp32c6.vid.0=0x303a -dfrobot_beetle_esp32c6.pid.0=0x1001 dfrobot_beetle_esp32c6.bootloader.tool=esptool_py dfrobot_beetle_esp32c6.bootloader.tool.default=esptool_py @@ -9460,6 +9398,12 @@ dfrobot_beetle_esp32c6.menu.PartitionScheme.min_spiffs.upload.maximum_size=19660 dfrobot_beetle_esp32c6.menu.PartitionScheme.rainmaker=RainMaker dfrobot_beetle_esp32c6.menu.PartitionScheme.rainmaker.build.partitions=rainmaker dfrobot_beetle_esp32c6.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728 +dfrobot_beetle_esp32c6.menu.PartitionScheme.zigbee=Zigbee 4MB with spiffs +dfrobot_beetle_esp32c6.menu.PartitionScheme.zigbee.build.partitions=zigbee +dfrobot_beetle_esp32c6.menu.PartitionScheme.zigbee.upload.maximum_size=1310720 +dfrobot_beetle_esp32c6.menu.PartitionScheme.zigbee_zczr=Zigbee ZCZR 4MB with spiffs +dfrobot_beetle_esp32c6.menu.PartitionScheme.zigbee_zczr.build.partitions=zigbee_zczr +dfrobot_beetle_esp32c6.menu.PartitionScheme.zigbee_zczr.upload.maximum_size=1310720 dfrobot_beetle_esp32c6.menu.PartitionScheme.custom=Custom dfrobot_beetle_esp32c6.menu.PartitionScheme.custom.build.partitions= dfrobot_beetle_esp32c6.menu.PartitionScheme.custom.upload.maximum_size=16777216 @@ -9523,6 +9467,19 @@ dfrobot_beetle_esp32c6.menu.EraseFlash.none.upload.erase_cmd= dfrobot_beetle_esp32c6.menu.EraseFlash.all=Enabled dfrobot_beetle_esp32c6.menu.EraseFlash.all.upload.erase_cmd=-e +dfrobot_beetle_esp32c6.menu.ZigbeeMode.default=Disabled +dfrobot_beetle_esp32c6.menu.ZigbeeMode.default.build.zigbee_mode= +dfrobot_beetle_esp32c6.menu.ZigbeeMode.default.build.zigbee_libs= +dfrobot_beetle_esp32c6.menu.ZigbeeMode.ed=Zigbee ED (end device) +dfrobot_beetle_esp32c6.menu.ZigbeeMode.ed.build.zigbee_mode=-DZIGBEE_MODE_ED +dfrobot_beetle_esp32c6.menu.ZigbeeMode.ed.build.zigbee_libs=-lesp_zb_api_ed -lesp_zb_cli_command -lzboss_stack.ed -lzboss_port +dfrobot_beetle_esp32c6.menu.ZigbeeMode.zczr=Zigbee ZCZR (coordinator) +dfrobot_beetle_esp32c6.menu.ZigbeeMode.zczr.build.zigbee_mode=-DZIGBEE_MODE_ZCZR +dfrobot_beetle_esp32c6.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_command -lzboss_stack.zczr -lzboss_port +dfrobot_beetle_esp32c6.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor) +dfrobot_beetle_esp32c6.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP +dfrobot_beetle_esp32c6.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port + ############################################################## dfrobot_firebeetle2_esp32e.name=FireBeetle 2 ESP32-E @@ -9685,10 +9642,6 @@ dfrobot_firebeetle2_esp32e.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## dfrobot_firebeetle2_esp32s3.name=DFRobot Firebeetle 2 ESP32-S3 -#dfrobot_firebeetle2_esp32s3.vid.0=0x3343 -#dfrobot_firebeetle2_esp32s3.pid.0=0x83CF -dfrobot_firebeetle2_esp32s3.vid.0=0x303a -dfrobot_firebeetle2_esp32s3.pid.0=0x1001 dfrobot_firebeetle2_esp32s3.bootloader.tool=esptool_py dfrobot_firebeetle2_esp32s3.bootloader.tool.default=esptool_py @@ -9902,8 +9855,6 @@ dfrobot_firebeetle2_esp32s3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## dfrobot_firebeetle2_esp32c6.name=DFRobot FireBeetle 2 ESP32-C6 -dfrobot_firebeetle2_esp32c6.vid.0=0x303a -dfrobot_firebeetle2_esp32c6.pid.0=0x1001 dfrobot_firebeetle2_esp32c6.bootloader.tool=esptool_py dfrobot_firebeetle2_esp32c6.bootloader.tool.default=esptool_py @@ -9984,6 +9935,12 @@ dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.min_spiffs.upload.maximum_size= dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.rainmaker=RainMaker dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.rainmaker.build.partitions=rainmaker dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728 +dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.zigbee=Zigbee 4MB with spiffs +dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.zigbee.build.partitions=zigbee +dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.zigbee.upload.maximum_size=1310720 +dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.zigbee_zczr=Zigbee ZCZR 4MB with spiffs +dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.zigbee_zczr.build.partitions=zigbee_zczr +dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.zigbee_zczr.upload.maximum_size=1310720 dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.custom=Custom dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.custom.build.partitions= dfrobot_firebeetle2_esp32c6.menu.PartitionScheme.custom.upload.maximum_size=16777216 @@ -10047,12 +10004,23 @@ dfrobot_firebeetle2_esp32c6.menu.EraseFlash.none.upload.erase_cmd= dfrobot_firebeetle2_esp32c6.menu.EraseFlash.all=Enabled dfrobot_firebeetle2_esp32c6.menu.EraseFlash.all.upload.erase_cmd=-e +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.default=Disabled +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.default.build.zigbee_mode= +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.default.build.zigbee_libs= +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.ed=Zigbee ED (end device) +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.ed.build.zigbee_mode=-DZIGBEE_MODE_ED +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.ed.build.zigbee_libs=-lesp_zb_api_ed -lesp_zb_cli_command -lzboss_stack.ed -lzboss_port +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.zczr=Zigbee ZCZR (coordinator) +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.zczr.build.zigbee_mode=-DZIGBEE_MODE_ZCZR +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_command -lzboss_stack.zczr -lzboss_port +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor) +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP +dfrobot_firebeetle2_esp32c6.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port + ############################################################## # dfrobot Romeo ESP32-S3 dfrobot_romeo_esp32s3.name=DFRobot Romeo ESP32-S3 -dfrobot_romeo_esp32s3.vid.0=0x303a -dfrobot_romeo_esp32s3.pid.0=0x1001 dfrobot_romeo_esp32s3.bootloader.tool=esptool_py dfrobot_romeo_esp32s3.bootloader.tool.default=esptool_py @@ -10466,6 +10434,12 @@ adafruit_metro_esp32s2.vid.1=0x239A adafruit_metro_esp32s2.pid.1=0x00DF adafruit_metro_esp32s2.vid.2=0x239A adafruit_metro_esp32s2.pid.2=0x80E0 +adafruit_metro_esp32s2.upload_port.0.vid=0x239A +adafruit_metro_esp32s2.upload_port.0.pid=0x80DF +adafruit_metro_esp32s2.upload_port.1.vid=0x239A +adafruit_metro_esp32s2.upload_port.1.pid=0x00DF +adafruit_metro_esp32s2.upload_port.2.vid=0x239A +adafruit_metro_esp32s2.upload_port.2.pid=0x80E0 adafruit_metro_esp32s2.bootloader.tool=esptool_py adafruit_metro_esp32s2.bootloader.tool.default=esptool_py @@ -10643,6 +10617,12 @@ adafruit_metro_esp32s3.vid.1=0x239A adafruit_metro_esp32s3.pid.1=0x0145 adafruit_metro_esp32s3.vid.2=0x239A adafruit_metro_esp32s3.pid.2=0x8146 +adafruit_metro_esp32s3.upload_port.0.vid=0x239A +adafruit_metro_esp32s3.upload_port.0.pid=0x8145 +adafruit_metro_esp32s3.upload_port.1.vid=0x239A +adafruit_metro_esp32s3.upload_port.1.pid=0x0145 +adafruit_metro_esp32s3.upload_port.2.vid=0x239A +adafruit_metro_esp32s3.upload_port.2.pid=0x8146 adafruit_metro_esp32s3.bootloader.tool=esptool_py adafruit_metro_esp32s3.bootloader.tool.default=esptool_py @@ -10840,6 +10820,12 @@ adafruit_magtag29_esp32s2.vid.1=0x239A adafruit_magtag29_esp32s2.pid.1=0x00E5 adafruit_magtag29_esp32s2.vid.2=0x239A adafruit_magtag29_esp32s2.pid.2=0x80E6 +adafruit_magtag29_esp32s2.upload_port.0.vid=0x239A +adafruit_magtag29_esp32s2.upload_port.0.pid=0x80E5 +adafruit_magtag29_esp32s2.upload_port.1.vid=0x239A +adafruit_magtag29_esp32s2.upload_port.1.pid=0x00E5 +adafruit_magtag29_esp32s2.upload_port.2.vid=0x239A +adafruit_magtag29_esp32s2.upload_port.2.pid=0x80E6 adafruit_magtag29_esp32s2.bootloader.tool=esptool_py adafruit_magtag29_esp32s2.bootloader.tool.default=esptool_py @@ -11017,6 +11003,12 @@ adafruit_funhouse_esp32s2.vid.1=0x239A adafruit_funhouse_esp32s2.pid.1=0x00F9 adafruit_funhouse_esp32s2.vid.2=0x239A adafruit_funhouse_esp32s2.pid.2=0x80FA +adafruit_funhouse_esp32s2.upload_port.0.vid=0x239A +adafruit_funhouse_esp32s2.upload_port.0.pid=0x80F9 +adafruit_funhouse_esp32s2.upload_port.1.vid=0x239A +adafruit_funhouse_esp32s2.upload_port.1.pid=0x00F9 +adafruit_funhouse_esp32s2.upload_port.2.vid=0x239A +adafruit_funhouse_esp32s2.upload_port.2.pid=0x80FA adafruit_funhouse_esp32s2.bootloader.tool=esptool_py adafruit_funhouse_esp32s2.bootloader.tool.default=esptool_py @@ -11446,6 +11438,12 @@ adafruit_feather_esp32s2.vid.1=0x239A adafruit_feather_esp32s2.pid.1=0x00EB adafruit_feather_esp32s2.vid.2=0x239A adafruit_feather_esp32s2.pid.2=0x80EC +adafruit_feather_esp32s2.upload_port.0.vid=0x239A +adafruit_feather_esp32s2.upload_port.0.pid=0x80EB +adafruit_feather_esp32s2.upload_port.1.vid=0x239A +adafruit_feather_esp32s2.upload_port.1.pid=0x00EB +adafruit_feather_esp32s2.upload_port.2.vid=0x239A +adafruit_feather_esp32s2.upload_port.2.pid=0x80EC adafruit_feather_esp32s2.bootloader.tool=esptool_py adafruit_feather_esp32s2.bootloader.tool.default=esptool_py @@ -11623,6 +11621,12 @@ adafruit_feather_esp32s2_tft.vid.1=0x239A adafruit_feather_esp32s2_tft.pid.1=0x010F adafruit_feather_esp32s2_tft.vid.2=0x239A adafruit_feather_esp32s2_tft.pid.2=0x8110 +adafruit_feather_esp32s2_tft.upload_port.0.vid=0x239A +adafruit_feather_esp32s2_tft.upload_port.0.pid=0x810F +adafruit_feather_esp32s2_tft.upload_port.1.vid=0x239A +adafruit_feather_esp32s2_tft.upload_port.1.pid=0x010F +adafruit_feather_esp32s2_tft.upload_port.2.vid=0x239A +adafruit_feather_esp32s2_tft.upload_port.2.pid=0x8110 adafruit_feather_esp32s2_tft.bootloader.tool=esptool_py adafruit_feather_esp32s2_tft.bootloader.tool.default=esptool_py @@ -11800,6 +11804,12 @@ adafruit_feather_esp32s2_reversetft.vid.1=0x239A adafruit_feather_esp32s2_reversetft.pid.1=0x00ED adafruit_feather_esp32s2_reversetft.vid.2=0x239A adafruit_feather_esp32s2_reversetft.pid.2=0x80EE +adafruit_feather_esp32s2_reversetft.upload_port.0.vid=0x239A +adafruit_feather_esp32s2_reversetft.upload_port.0.pid=0x80ED +adafruit_feather_esp32s2_reversetft.upload_port.1.vid=0x239A +adafruit_feather_esp32s2_reversetft.upload_port.1.pid=0x00ED +adafruit_feather_esp32s2_reversetft.upload_port.2.vid=0x239A +adafruit_feather_esp32s2_reversetft.upload_port.2.pid=0x80EE adafruit_feather_esp32s2_reversetft.bootloader.tool=esptool_py adafruit_feather_esp32s2_reversetft.bootloader.tool.default=esptool_py @@ -11977,6 +11987,12 @@ adafruit_feather_esp32s3.vid.1=0x239A adafruit_feather_esp32s3.pid.1=0x011B adafruit_feather_esp32s3.vid.2=0x239A adafruit_feather_esp32s3.pid.2=0x811C +adafruit_feather_esp32s3.upload_port.0.vid=0x239A +adafruit_feather_esp32s3.upload_port.0.pid=0x811B +adafruit_feather_esp32s3.upload_port.1.vid=0x239A +adafruit_feather_esp32s3.upload_port.1.pid=0x011B +adafruit_feather_esp32s3.upload_port.2.vid=0x239A +adafruit_feather_esp32s3.upload_port.2.pid=0x811C adafruit_feather_esp32s3.bootloader.tool=esptool_py adafruit_feather_esp32s3.bootloader.tool.default=esptool_py @@ -12189,6 +12205,12 @@ adafruit_feather_esp32s3_nopsram.vid.1=0x239A adafruit_feather_esp32s3_nopsram.pid.1=0x0113 adafruit_feather_esp32s3_nopsram.vid.2=0x239A adafruit_feather_esp32s3_nopsram.pid.2=0x8114 +adafruit_feather_esp32s3_nopsram.upload_port.0.vid=0x239A +adafruit_feather_esp32s3_nopsram.upload_port.0.pid=0x8113 +adafruit_feather_esp32s3_nopsram.upload_port.1.vid=0x239A +adafruit_feather_esp32s3_nopsram.upload_port.1.pid=0x0113 +adafruit_feather_esp32s3_nopsram.upload_port.2.vid=0x239A +adafruit_feather_esp32s3_nopsram.upload_port.2.pid=0x8114 adafruit_feather_esp32s3_nopsram.bootloader.tool=esptool_py adafruit_feather_esp32s3_nopsram.bootloader.tool.default=esptool_py @@ -12370,6 +12392,12 @@ adafruit_feather_esp32s3_tft.vid.1=0x239A adafruit_feather_esp32s3_tft.pid.1=0x011D adafruit_feather_esp32s3_tft.vid.2=0x239A adafruit_feather_esp32s3_tft.pid.2=0x811E +adafruit_feather_esp32s3_tft.upload_port.0.vid=0x239A +adafruit_feather_esp32s3_tft.upload_port.0.pid=0x811D +adafruit_feather_esp32s3_tft.upload_port.1.vid=0x239A +adafruit_feather_esp32s3_tft.upload_port.1.pid=0x011D +adafruit_feather_esp32s3_tft.upload_port.2.vid=0x239A +adafruit_feather_esp32s3_tft.upload_port.2.pid=0x811E adafruit_feather_esp32s3_tft.bootloader.tool=esptool_py adafruit_feather_esp32s3_tft.bootloader.tool.default=esptool_py @@ -12582,6 +12610,12 @@ adafruit_feather_esp32s3_reversetft.vid.1=0x239A adafruit_feather_esp32s3_reversetft.pid.1=0x0123 adafruit_feather_esp32s3_reversetft.vid.2=0x239A adafruit_feather_esp32s3_reversetft.pid.2=0x8124 +adafruit_feather_esp32s3_reversetft.upload_port.0.vid=0x239A +adafruit_feather_esp32s3_reversetft.upload_port.0.pid=0x8123 +adafruit_feather_esp32s3_reversetft.upload_port.1.vid=0x239A +adafruit_feather_esp32s3_reversetft.upload_port.1.pid=0x0123 +adafruit_feather_esp32s3_reversetft.upload_port.2.vid=0x239A +adafruit_feather_esp32s3_reversetft.upload_port.2.pid=0x8124 adafruit_feather_esp32s3_reversetft.bootloader.tool=esptool_py adafruit_feather_esp32s3_reversetft.bootloader.tool.default=esptool_py @@ -12906,8 +12940,6 @@ adafruit_qtpy_esp32_pico.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zcz # Adafruit QT Py ESP32-C3 adafruit_qtpy_esp32c3.name=Adafruit QT Py ESP32-C3 -adafruit_qtpy_esp32c3.vid.0=0x303a -adafruit_qtpy_esp32c3.pid.0=0x1001 adafruit_qtpy_esp32c3.bootloader.tool=esptool_py adafruit_qtpy_esp32c3.bootloader.tool.default=esptool_py @@ -13049,6 +13081,12 @@ adafruit_qtpy_esp32s2.vid.1=0x239A adafruit_qtpy_esp32s2.pid.1=0x0111 adafruit_qtpy_esp32s2.vid.2=0x239A adafruit_qtpy_esp32s2.pid.2=0x8112 +adafruit_qtpy_esp32s2.upload_port.0.vid=0x239A +adafruit_qtpy_esp32s2.upload_port.0.pid=0x8111 +adafruit_qtpy_esp32s2.upload_port.1.vid=0x239A +adafruit_qtpy_esp32s2.upload_port.1.pid=0x0111 +adafruit_qtpy_esp32s2.upload_port.2.vid=0x239A +adafruit_qtpy_esp32s2.upload_port.2.pid=0x8112 adafruit_qtpy_esp32s2.bootloader.tool=esptool_py adafruit_qtpy_esp32s2.bootloader.tool.default=esptool_py @@ -13226,6 +13264,12 @@ adafruit_qtpy_esp32s3_nopsram.vid.1=0x239A adafruit_qtpy_esp32s3_nopsram.pid.1=0x0119 adafruit_qtpy_esp32s3_nopsram.vid.2=0x239A adafruit_qtpy_esp32s3_nopsram.pid.2=0x811A +adafruit_qtpy_esp32s3_nopsram.upload_port.0.vid=0x239A +adafruit_qtpy_esp32s3_nopsram.upload_port.0.pid=0x8119 +adafruit_qtpy_esp32s3_nopsram.upload_port.1.vid=0x239A +adafruit_qtpy_esp32s3_nopsram.upload_port.1.pid=0x0119 +adafruit_qtpy_esp32s3_nopsram.upload_port.2.vid=0x239A +adafruit_qtpy_esp32s3_nopsram.upload_port.2.pid=0x811A adafruit_qtpy_esp32s3_nopsram.bootloader.tool=esptool_py adafruit_qtpy_esp32s3_nopsram.bootloader.tool.default=esptool_py @@ -13407,6 +13451,12 @@ adafruit_qtpy_esp32s3_n4r2.vid.1=0x239A adafruit_qtpy_esp32s3_n4r2.pid.1=0x0143 adafruit_qtpy_esp32s3_n4r2.vid.2=0x239A adafruit_qtpy_esp32s3_n4r2.pid.2=0x8144 +adafruit_qtpy_esp32s3_n4r2.upload_port.0.vid=0x239A +adafruit_qtpy_esp32s3_n4r2.upload_port.0.pid=0x8143 +adafruit_qtpy_esp32s3_n4r2.upload_port.1.vid=0x239A +adafruit_qtpy_esp32s3_n4r2.upload_port.1.pid=0x0143 +adafruit_qtpy_esp32s3_n4r2.upload_port.2.vid=0x239A +adafruit_qtpy_esp32s3_n4r2.upload_port.2.pid=0x8144 adafruit_qtpy_esp32s3_n4r2.bootloader.tool=esptool_py adafruit_qtpy_esp32s3_n4r2.bootloader.tool.default=esptool_py @@ -13737,6 +13787,12 @@ adafruit_matrixportal_esp32s3.vid.1=0x239A adafruit_matrixportal_esp32s3.pid.1=0x0125 adafruit_matrixportal_esp32s3.vid.2=0x239A adafruit_matrixportal_esp32s3.pid.2=0x8126 +adafruit_matrixportal_esp32s3.upload_port.0.vid=0x239A +adafruit_matrixportal_esp32s3.upload_port.0.pid=0x8125 +adafruit_matrixportal_esp32s3.upload_port.1.vid=0x239A +adafruit_matrixportal_esp32s3.upload_port.1.pid=0x0125 +adafruit_matrixportal_esp32s3.upload_port.2.vid=0x239A +adafruit_matrixportal_esp32s3.upload_port.2.pid=0x8126 adafruit_matrixportal_esp32s3.bootloader.tool=esptool_py adafruit_matrixportal_esp32s3.bootloader.tool.default=esptool_py @@ -13928,6 +13984,12 @@ adafruit_camera_esp32s3.vid.1=0x239A adafruit_camera_esp32s3.pid.1=0x8117 adafruit_camera_esp32s3.vid.2=0x239A adafruit_camera_esp32s3.pid.2=0x8118 +adafruit_camera_esp32s3.upload_port.0.vid=0x239A +adafruit_camera_esp32s3.upload_port.0.pid=0x0117 +adafruit_camera_esp32s3.upload_port.1.vid=0x239A +adafruit_camera_esp32s3.upload_port.1.pid=0x8117 +adafruit_camera_esp32s3.upload_port.2.vid=0x239A +adafruit_camera_esp32s3.upload_port.2.pid=0x8118 adafruit_camera_esp32s3.bootloader.tool=esptool_py adafruit_camera_esp32s3.bootloader.tool.default=esptool_py @@ -14140,6 +14202,12 @@ adafruit_qualia_s3_rgb666.vid.1=0x239A adafruit_qualia_s3_rgb666.pid.1=0x0147 adafruit_qualia_s3_rgb666.vid.2=0x239A adafruit_qualia_s3_rgb666.pid.2=0x8148 +adafruit_qualia_s3_rgb666.upload_port.0.vid=0x239A +adafruit_qualia_s3_rgb666.upload_port.0.pid=0x8147 +adafruit_qualia_s3_rgb666.upload_port.1.vid=0x239A +adafruit_qualia_s3_rgb666.upload_port.1.pid=0x0147 +adafruit_qualia_s3_rgb666.upload_port.2.vid=0x239A +adafruit_qualia_s3_rgb666.upload_port.2.pid=0x8148 adafruit_qualia_s3_rgb666.bootloader.tool=esptool_py adafruit_qualia_s3_rgb666.bootloader.tool.default=esptool_py @@ -14402,8 +14470,6 @@ nodemcu-32s.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## nologo_esp32c3_super_mini.name=Nologo ESP32C3 Super Mini -nologo_esp32c3_super_mini.vid.0=0x303a -nologo_esp32c3_super_mini.pid.0=0x1001 nologo_esp32c3_super_mini.upload.tool=esptool_py nologo_esp32c3_super_mini.upload.tool.default=esptool_py @@ -14542,8 +14608,6 @@ nologo_esp32c3_super_mini.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## nologo_esp32s3_pico.name=Nologo ESP32S3 Pico -nologo_esp32s3_pico.vid.0=0x303a -nologo_esp32s3_pico.pid.0=0x1001 nologo_esp32s3_pico.bootloader.tool=esptool_py nologo_esp32s3_pico.bootloader.tool.default=esptool_py @@ -15723,8 +15787,6 @@ esp32-devkitlipo.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32s2-devkitlipo.name=OLIMEX ESP32-S2-DevKit-Lipo -esp32s2-devkitlipo.vid.0=0x303a -esp32s2-devkitlipo.pid.0=0x0002 esp32s2-devkitlipo.bootloader.tool=esptool_py esp32s2-devkitlipo.bootloader.tool.default=esptool_py @@ -15916,8 +15978,6 @@ esp32s2-devkitlipo.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32s2-devkitlipo-usb.name=OLIMEX ESP32-S2-DevKit-Lipo-USB -esp32s2-devkitlipo-usb.vid.0=0x303a -esp32s2-devkitlipo-usb.pid.0=0x0002 esp32s2-devkitlipo-usb.bootloader.tool=esptool_py esp32s2-devkitlipo-usb.bootloader.tool.default=esptool_py @@ -16109,8 +16169,6 @@ esp32s2-devkitlipo-usb.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32s3-devkitlipo.name=OLIMEX ESP32-S3-DevKit-Lipo -esp32s3-devkitlipo.vid.0=0x303a -esp32s3-devkitlipo.pid.0=0x1001 esp32s3-devkitlipo.bootloader.tool=esptool_py esp32s3-devkitlipo.bootloader.tool.default=esptool_py @@ -16345,8 +16403,6 @@ esp32s3-devkitlipo.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32c3-devkitlipo.name=OLIMEX ESP32-C3-DevKit-Lipo -esp32c3-devkitlipo.vid.0=0x303a -esp32c3-devkitlipo.pid.0=0x1001 esp32c3-devkitlipo.bootloader.tool=esptool_py esp32c3-devkitlipo.bootloader.tool.default=esptool_py @@ -16516,8 +16572,6 @@ esp32c3-devkitlipo.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## esp32c6-evb.name=OLIMEX ESP32-C6-EVB -esp32c6-evb.vid.0=0x303a -esp32c6-evb.pid.0=0x1001 esp32c6-evb.bootloader.tool=esptool_py esp32c6-evb.bootloader.tool.default=esptool_py @@ -16607,6 +16661,12 @@ esp32c6-evb.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728 esp32c6-evb.menu.PartitionScheme.rainmaker=RainMaker esp32c6-evb.menu.PartitionScheme.rainmaker.build.partitions=rainmaker esp32c6-evb.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728 +esp32c6-evb.menu.PartitionScheme.zigbee=Zigbee 4MB with spiffs +esp32c6-evb.menu.PartitionScheme.zigbee.build.partitions=zigbee +esp32c6-evb.menu.PartitionScheme.zigbee.upload.maximum_size=1310720 +esp32c6-evb.menu.PartitionScheme.zigbee_zczr=Zigbee ZCZR 4MB with spiffs +esp32c6-evb.menu.PartitionScheme.zigbee_zczr.build.partitions=zigbee_zczr +esp32c6-evb.menu.PartitionScheme.zigbee_zczr.upload.maximum_size=1310720 esp32c6-evb.menu.PartitionScheme.custom=Custom esp32c6-evb.menu.PartitionScheme.custom.build.partitions= esp32c6-evb.menu.PartitionScheme.custom.upload.maximum_size=16777216 @@ -16678,11 +16738,22 @@ esp32c6-evb.menu.EraseFlash.none.upload.erase_cmd= esp32c6-evb.menu.EraseFlash.all=Enabled esp32c6-evb.menu.EraseFlash.all.upload.erase_cmd=-e +esp32c6-evb.menu.ZigbeeMode.default=Disabled +esp32c6-evb.menu.ZigbeeMode.default.build.zigbee_mode= +esp32c6-evb.menu.ZigbeeMode.default.build.zigbee_libs= +esp32c6-evb.menu.ZigbeeMode.ed=Zigbee ED (end device) +esp32c6-evb.menu.ZigbeeMode.ed.build.zigbee_mode=-DZIGBEE_MODE_ED +esp32c6-evb.menu.ZigbeeMode.ed.build.zigbee_libs=-lesp_zb_api_ed -lesp_zb_cli_command -lzboss_stack.ed -lzboss_port +esp32c6-evb.menu.ZigbeeMode.zczr=Zigbee ZCZR (coordinator) +esp32c6-evb.menu.ZigbeeMode.zczr.build.zigbee_mode=-DZIGBEE_MODE_ZCZR +esp32c6-evb.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api_zczr -lesp_zb_cli_command -lzboss_stack.zczr -lzboss_port +esp32c6-evb.menu.ZigbeeMode.rcp=Zigbee RCP (radio co-processor) +esp32c6-evb.menu.ZigbeeMode.rcp.build.zigbee_mode=-DZIGBEE_MODE_RCP +esp32c6-evb.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_zb_cli_command -lzboss_stack.rcp -lzboss_port + ############################################################## esp32h2-devkitlipo.name=OLIMEX ESP32-H2-DevKit-LiPo -esp32h2-devkitlipo.vid.0=0x303a -esp32h2-devkitlipo.pid.0=0x1001 esp32h2-devkitlipo.bootloader.tool=esptool_py esp32h2-devkitlipo.bootloader.tool.default=esptool_py @@ -18556,8 +18627,6 @@ m5stack_atom.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## m5stack_atoms3.name=M5AtomS3 -m5stack_atoms3.vid.0=0x303a -m5stack_atoms3.pid.0=0x1001 m5stack_atoms3.bootloader.tool=esptool_py m5stack_atoms3.bootloader.tool.default=esptool_py @@ -18785,8 +18854,6 @@ m5stack_atoms3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## m5stack_cores3.name=M5CoreS3 -m5stack_cores3.vid.0=0x303a -m5stack_cores3.pid.0=0x1001 m5stack_cores3.bootloader.tool=esptool_py m5stack_cores3.bootloader.tool.default=esptool_py @@ -19324,8 +19391,6 @@ m5stack_unit_cam.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## m5stack_unit_cams3.name=M5UnitCAMS3 -m5stack_unit_cams3.vid.0=0x303a -m5stack_unit_cams3.pid.0=0x1001 m5stack_unit_cams3.bootloader.tool=esptool_py m5stack_unit_cams3.bootloader.tool.default=esptool_py @@ -20176,8 +20241,6 @@ m5stack_stamp_pico.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## m5stack_stamp_c3.name=M5StampC3 -m5stack_stamp_c3.vid.0=0x303a -m5stack_stamp_c3.pid.0=0x1001 m5stack_stamp_c3.bootloader.tool=esptool_py m5stack_stamp_c3.bootloader.tool.default=esptool_py @@ -20324,8 +20387,6 @@ m5stack_stamp_c3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################### m5stack_stamp_s3.name=M5StampS3 -m5stack_stamp_s3.vid.0=0x303a -m5stack_stamp_s3.pid.0=0x1001 m5stack_stamp_s3.bootloader.tool=esptool_py m5stack_stamp_s3.bootloader.tool.default=esptool_py @@ -20560,8 +20621,6 @@ m5stack_stamp_s3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## m5stack_capsule.name=M5Capsule -m5stack_capsule.vid.0=0x303a -m5stack_capsule.pid.0=0x1001 m5stack_capsule.bootloader.tool=esptool_py m5stack_capsule.bootloader.tool.default=esptool_py @@ -20798,8 +20857,6 @@ m5stack_capsule.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## m5stack_cardputer.name=M5Cardputer -m5stack_cardputer.vid.0=0x303a -m5stack_cardputer.pid.0=0x1001 m5stack_cardputer.bootloader.tool=esptool_py m5stack_cardputer.bootloader.tool.default=esptool_py @@ -21033,8 +21090,6 @@ m5stack_cardputer.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## m5stack_dial.name=M5Dial -m5stack_dial.vid.0=0x303a -m5stack_dial.pid.0=0x1001 m5stack_dial.bootloader.tool=esptool_py m5stack_dial.bootloader.tool.default=esptool_py @@ -21442,9 +21497,6 @@ heltec_wifi_kit_32.menu.EraseFlash.all.upload.erase_cmd=-e heltec_wifi_kit_32_V3.name=Heltec WiFi Kit 32(V3) -heltec_wifi_kit_32_V3.vid.0=0x303a -heltec_wifi_kit_32_V3.pid.0=0x1001 - heltec_wifi_kit_32_V3.bootloader.tool=esptool_py heltec_wifi_kit_32_V3.bootloader.tool.default=esptool_py @@ -21778,8 +21830,6 @@ heltec_wifi_lora_32_V2.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## heltec_wifi_lora_32_V3.name=Heltec WiFi LoRa 32(V3) -heltec_wifi_lora_32_V3.vid.0=0x303a -heltec_wifi_lora_32_V3.pid.0=0x1001 heltec_wifi_lora_32_V3.bootloader.tool=esptool_py heltec_wifi_lora_32_V3.bootloader.tool.default=esptool_py @@ -21928,8 +21978,6 @@ heltec_wifi_lora_32_V3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## heltec_wireless_stick_V3.name=Heltec Wireless Stick(V3) -heltec_wireless_stick_V3.vid.0=0x303a -heltec_wireless_stick_V3.pid.0=0x1001 heltec_wireless_stick_V3.bootloader.tool=esptool_py heltec_wireless_stick_V3.bootloader.tool.default=esptool_py @@ -22078,8 +22126,6 @@ heltec_wireless_stick_V3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## heltec_wireless_stick_lite_V3.name=Heltec Wireless Stick Lite(V3) -heltec_wireless_stick_lite_V3.vid.0=0x303a -heltec_wireless_stick_lite_V3.pid.0=0x1001 heltec_wireless_stick_lite_V3.bootloader.tool=esptool_py heltec_wireless_stick_lite_V3.bootloader.tool.default=esptool_py @@ -22228,8 +22274,6 @@ heltec_wireless_stick_lite_V3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## heltec_wireless_shell_V3.name=Heltec Wireless Shell (V3) -heltec_wireless_shell_V3.vid.0=0x303a -heltec_wireless_shell_V3.pid.0=0x1001 heltec_wireless_shell_V3.bootloader.tool=esptool_py heltec_wireless_shell_V3.bootloader.tool.default=esptool_py @@ -22378,8 +22422,6 @@ heltec_wireless_shell_V3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## heltec_capsule_sensor_V3.name=Heltec Capsule Sensor (V3) -heltec_capsule_sensor_V3.vid.0=0x303a -heltec_capsule_sensor_V3.pid.0=0x1001 heltec_capsule_sensor_V3.bootloader.tool=esptool_py heltec_capsule_sensor_V3.bootloader.tool.default=esptool_py @@ -22538,8 +22580,6 @@ heltec_capsule_sensor_V3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################# heltec_wireless_paper.name=Heltec Wireless Paper -heltec_wireless_paper.vid.0=0x303a -heltec_wireless_paper.pid.0=0x1001 heltec_wireless_paper.bootloader.tool=esptool_py heltec_wireless_paper.bootloader.tool.default=esptool_py @@ -22688,8 +22728,6 @@ heltec_wireless_paper.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## heltec_wireless_tracker.name=Heltec Wireless Tracker -heltec_wireless_tracker.vid.0=0x303a -heltec_wireless_tracker.pid.0=0x1001 heltec_wireless_tracker.bootloader.tool=esptool_py heltec_wireless_tracker.bootloader.tool.default=esptool_py @@ -22865,8 +22903,6 @@ heltec_wireless_tracker.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## heltec_wireless_mini_shell.name=Heltec Wireless Mini Shell -heltec_wireless_mini_shell.vid.0=0x303a -heltec_wireless_mini_shell.pid.0=0x1001 heltec_wireless_mini_shell.bootloader.tool=esptool_py heltec_wireless_mini_shell.bootloader.tool.default=esptool_py @@ -23349,8 +23385,6 @@ heltec_wireless_bridge.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################# heltec_ht_de01.name=Heltec E-Ink Driver -heltec_ht_de01.vid.0=0x303a -heltec_ht_de01.pid.0=0x1001 heltec_ht_de01.bootloader.tool=esptool_py heltec_ht_de01.bootloader.tool.default=esptool_py @@ -26572,8 +26606,6 @@ wifiduino32.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## wifiduino32c3.name=WiFiduinoV2 -wifiduino32c3.vid.0=0x303a -wifiduino32c3.pid.0=0x1001 wifiduino32c3.bootloader.tool=esptool_py wifiduino32c3.bootloader.tool.default=esptool_py @@ -26721,8 +26753,6 @@ wifiduino32c3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## wifiduino32s3.name=WiFiduino32S3 -wifiduino32s3.vid.0=0x303a -wifiduino32s3.pid.0=0x1001 wifiduino32s3.bootloader.tool=esptool_py wifiduino32s3.bootloader.tool.default=esptool_py @@ -29803,8 +29833,6 @@ franzininho_wifi_msc_esp32s2.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## tamc_termod_s3.name=TAMC Termod S3 -tamc_termod_s3.vid.0=0x303a -tamc_termod_s3.pid.0=0x1001 tamc_termod_s3.bootloader.tool=esptool_py tamc_termod_s3.bootloader.tool.default=esptool_py @@ -30462,8 +30490,6 @@ watchy.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## AirM2M_CORE_ESP32C3.name=AirM2M_CORE_ESP32C3 -AirM2M_CORE_ESP32C3.vid.0=0x303a -AirM2M_CORE_ESP32C3.pid.0=0x1001 AirM2M_CORE_ESP32C3.upload.tool=esptool_py AirM2M_CORE_ESP32C3.upload.tool.default=esptool_py @@ -30720,8 +30746,6 @@ XIAO_ESP32C3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## XIAO_ESP32C6.name=XIAO_ESP32C6 -XIAO_ESP32C6.vid.0=0x303a -XIAO_ESP32C6.pid.0=0x1001 XIAO_ESP32C6.bootloader.tool=esptool_py XIAO_ESP32C6.bootloader.tool.default=esptool_py @@ -30794,6 +30818,12 @@ XIAO_ESP32C6.menu.PartitionScheme.noota_3gffat.upload.maximum_size=1048576 XIAO_ESP32C6.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS) XIAO_ESP32C6.menu.PartitionScheme.huge_app.build.partitions=huge_app XIAO_ESP32C6.menu.PartitionScheme.huge_app.upload.maximum_size=3145728 +XIAO_ESP32C6.menu.PartitionScheme.zigbee=Zigbee 4MB with spiffs +XIAO_ESP32C6.menu.PartitionScheme.zigbee.build.partitions=zigbee +XIAO_ESP32C6.menu.PartitionScheme.zigbee.upload.maximum_size=1310720 +XIAO_ESP32C6.menu.PartitionScheme.zigbee_zczr=Zigbee ZCZR 4MB with spiffs +XIAO_ESP32C6.menu.PartitionScheme.zigbee_zczr.build.partitions=zigbee_zczr +XIAO_ESP32C6.menu.PartitionScheme.zigbee_zczr.upload.maximum_size=1310720 XIAO_ESP32C6.menu.CPUFreq.160=160MHz (WiFi) XIAO_ESP32C6.menu.CPUFreq.160.build.f_cpu=160000000L @@ -31415,6 +31445,8 @@ department_of_alchemy_minimain_esp32s2.menu.EraseFlash.all.upload.erase_cmd=-e Bee_Data_Logger.name=Bee Data Logger Bee_Data_Logger.vid.0=0x303a Bee_Data_Logger.pid.0=815C +Bee_Data_Logger.upload_port.0.vid=0x303a +Bee_Data_Logger.upload_port.0.pid=815C Bee_Data_Logger.bootloader.tool=esptool_py Bee_Data_Logger.bootloader.tool.default=esptool_py @@ -31524,6 +31556,8 @@ Bee_Data_Logger.menu.EraseFlash.all.upload.erase_cmd=-e Bee_Motion_S3.name=Bee Motion S3 Bee_Motion_S3.vid.0=0x303a Bee_Motion_S3.pid.0=0x8113 +Bee_Motion_S3.upload_port.0.vid=0x303a +Bee_Motion_S3.upload_port.0.pid=0x8113 Bee_Motion_S3.bootloader.tool=esptool_py Bee_Motion_S3.bootloader.tool.default=esptool_py @@ -31633,6 +31667,8 @@ Bee_Motion_S3.menu.EraseFlash.all.upload.erase_cmd=-e Bee_Motion.name=Bee Motion Bee_Motion.vid.0=0x303a Bee_Motion.pid.0=0x810D +Bee_Motion.vid.upload_port.0.vid=0x303a +Bee_Motion.pid.upload_port.0.vid=0x810D Bee_Motion.bootloader.tool=esptool_py Bee_Motion.bootloader.tool.default=esptool_py @@ -31850,6 +31886,8 @@ Bee_Motion_Mini.menu.EraseFlash.all.upload.erase_cmd=-e Bee_S3.name=Bee S3 Bee_S3.vid.0=0x303a Bee_S3.pid.0=0x8110 +Bee_S3.vid.upload_port.0.vid=0x303a +Bee_S3.pid.upload_port.0.vid=0x8110 Bee_S3.bootloader.tool=esptool_py Bee_S3.bootloader.tool.default=esptool_py @@ -32564,8 +32602,6 @@ cytron_maker_feather_aiot_s3.menu.EraseFlash.all.upload.erase_cmd=-e # RedPill(+) ESP32-S3 redpill_esp32s3.name=RedPill(+) ESP32-S3 -redpill_esp32s3.vid.0=0x303a -redpill_esp32s3.pid.0=0x1001 redpill_esp32s3.bootloader.tool=esptool_py redpill_esp32s3.bootloader.tool.default=esptool_py @@ -32979,8 +33015,6 @@ roboheart_hercules.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## VALTRACK_V4_VTS_ESP32_C3.name=VALTRACK_V4_VTS_ESP32_C3 -VALTRACK_V4_VTS_ESP32_C3.vid.0=0x303a -VALTRACK_V4_VTS_ESP32_C3.pid.0=0x1001 VALTRACK_V4_VTS_ESP32_C3.bootloader.tool=esptool_py VALTRACK_V4_VTS_ESP32_C3.bootloader.tool.default=esptool_py @@ -33128,8 +33162,6 @@ VALTRACK_V4_VTS_ESP32_C3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## VALTRACK_V4_MFW_ESP32_C3.name=VALTRACK_V4_MFW_ESP32_C3 -VALTRACK_V4_MFW_ESP32_C3.vid.0=0x303a -VALTRACK_V4_MFW_ESP32_C3.pid.0=0x1001 VALTRACK_V4_MFW_ESP32_C3.bootloader.tool=esptool_py VALTRACK_V4_MFW_ESP32_C3.bootloader.tool.default=esptool_py @@ -33484,8 +33516,6 @@ Edgebox-ESP-100.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## crabik_slot_esp32_s3.name=Crabik Slot ESP32-S3 -crabik_slot_esp32_s3.vid.0=0x303a -crabik_slot_esp32_s3.pid.0=0x1001 crabik_slot_esp32_s3.bootloader.tool=esptool_py crabik_slot_esp32_s3.bootloader.tool.default=esptool_py @@ -33633,8 +33663,6 @@ crabik_slot_esp32_s3.menu.EraseFlash.all.upload.erase_cmd=-e nebulas3.name=Nebula S3 -nebulas3.vid.0=0x303a -nebulas3.pid.0=0x1001 nebulas3.bootloader.tool=esptool_py nebulas3.bootloader.tool.default=esptool_py @@ -33853,8 +33881,6 @@ nebulas3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## lionbits3.name=Lion:Bit S3 STEM Dev Board -lionbits3.vid.0=0x303a -lionbits3.pid.0=0x1001 lionbits3.bootloader.tool=esptool_py lionbits3.bootloader.tool.default=esptool_py @@ -34077,8 +34103,6 @@ lionbits3.menu.EraseFlash.all.upload.erase_cmd=-e gen4-ESP32-S3R8n16.name=4D Systems gen4-ESP32 16MB Modules (ESP32-S3R8n16) -gen4-ESP32-S3R8n16.vid.0=0x303a -gen4-ESP32-S3R8n16.pid.0=0x1001 gen4-ESP32-S3R8n16.bootloader.tool=esptool_py gen4-ESP32-S3R8n16.bootloader.tool.default=esptool_py @@ -34235,8 +34259,6 @@ gen4-ESP32-S3R8n16.menu.EraseFlash.all.upload.erase_cmd=-e # Namino Rosso namino_rosso.name=Namino Rosso -namino_rosso.vid.0=0x303a -namino_rosso.pid.0=0x1001 namino_rosso.bootloader.tool=esptool_py namino_rosso.bootloader.tool.default=esptool_py @@ -34426,8 +34448,6 @@ namino_rosso.menu.EraseFlash.all.upload.erase_cmd=-e # Namino Arancio namino_arancio.name=Namino Arancio -namino_arancio.vid.0=0x303a -namino_arancio.pid.0=0x1001 namino_arancio.bootloader.tool=esptool_py namino_arancio.bootloader.tool.default=esptool_py @@ -34617,8 +34637,6 @@ namino_arancio.menu.EraseFlash.all.upload.erase_cmd=-e # Namino Bianco namino_bianco.name=Namino Bianco -namino_bianco.vid.0=0x303a -namino_bianco.pid.0=0x1001 namino_bianco.bootloader.tool=esptool_py namino_bianco.bootloader.tool.default=esptool_py @@ -35022,8 +35040,6 @@ ioxesp32ps.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## atd147_s3.name=ATD1.47-S3 -atd147_s3.vid.0=0x303a -atd147_s3.pid.0=0x1001 atd147_s3.bootloader.tool=esptool_py atd147_s3.bootloader.tool.default=esptool_py @@ -35621,8 +35637,6 @@ nano_nora.menu.USBMode.hwcdc.debug.executable={build.path}/{build.project_name}. ############################################################## makergo_c3_supermini.name=MakerGO ESP32 C3 SuperMini -makergo_c3_supermini.vid.0=0x303a -makergo_c3_supermini.pid.0=0x1001 makergo_c3_supermini.bootloader.tool=esptool_py makergo_c3_supermini.bootloader.tool.default=esptool_py @@ -35849,8 +35863,6 @@ epulse_feather.menu.EraseFlash.all.upload.erase_cmd=-e # ThingPulse ePulse Feather C6 epulse_feather_c6.name=ThingPulse ePulse Feather C6 -epulse_feather_c6.vid.0=0x303a -epulse_feather_c6.pid.0=0x1001 epulse_feather_c6.bootloader.tool=esptool_py epulse_feather_c6.bootloader.tool.default=esptool_py @@ -36019,9 +36031,7 @@ epulse_feather_c6.menu.ZigbeeMode.rcp.build.zigbee_libs=-lesp_zb_api_rcp -lesp_z ############################################################## -Geekble_ESP32C3.name=Geekble ESP32-C3 -Geekble_ESP32C3.vid.0=0x303A -Geekble_ESP32C3.pid.0=0x1001 +Geekble_ESP32C3.name=Geekble Mini ESP32-C3 Geekble_ESP32C3.bootloader.tool=esptool_py Geekble_ESP32C3.bootloader.tool.default=esptool_py @@ -36306,8 +36316,6 @@ waveshare_esp32s3_touch_lcd_128.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## weact_studio_esp32c3.name=WeAct Studio ESP32C3 -weact_studio_esp32c3.vid.0=0x303a -weact_studio_esp32c3.pid.0=0x1001 weact_studio_esp32c3.upload.tool=esptool_py weact_studio_esp32c3.upload.tool.default=esptool_py @@ -36444,3 +36452,203 @@ weact_studio_esp32c3.menu.EraseFlash.all=Enabled weact_studio_esp32c3.menu.EraseFlash.all.upload.erase_cmd=-e ############################################################## + +aslcanx2.name=AutosportLabs ESP-CAN-X2 + +aslcanx2.bootloader.tool=esptool_py +aslcanx2.bootloader.tool.default=esptool_py + +aslcanx2.upload.tool=esptool_py +aslcanx2.upload.tool.default=esptool_py +aslcanx2.upload.tool.network=esp_ota + +aslcanx2.upload.maximum_size=1310720 +aslcanx2.upload.maximum_data_size=327680 +aslcanx2.upload.flags= +aslcanx2.upload.extra_flags= +aslcanx2.upload.use_1200bps_touch=false +aslcanx2.upload.wait_for_upload_port=false + +aslcanx2.serial.disableDTR=false +aslcanx2.serial.disableRTS=false + +aslcanx2.build.tarch=xtensa +aslcanx2.build.bootloader_addr=0x0 +aslcanx2.build.target=esp32s3 +aslcanx2.build.mcu=esp32s3 +aslcanx2.build.core=esp32 +aslcanx2.build.variant=aslcanx2 +aslcanx2.build.board=ASL_CAN_X2 + +aslcanx2.build.usb_mode=1 +aslcanx2.build.cdc_on_boot=0 +aslcanx2.build.msc_on_boot=0 +aslcanx2.build.dfu_on_boot=0 +aslcanx2.build.f_cpu=240000000L +aslcanx2.build.flash_size=8MB +aslcanx2.build.flash_freq=80m +aslcanx2.build.flash_mode=dio +aslcanx2.build.boot=qio +aslcanx2.build.boot_freq=80m +aslcanx2.build.partitions=default_8MB +aslcanx2.build.defines= +aslcanx2.build.loop_core= +aslcanx2.build.event_core= +aslcanx2.build.psram_type=qspi +aslcanx2.build.memory_type={build.boot}_{build.psram_type} + +## IDE 2.0 Seems to not update the value +aslcanx2.menu.JTAGAdapter.default=Disabled +aslcanx2.menu.JTAGAdapter.default.build.copy_jtag_files=0 +aslcanx2.menu.JTAGAdapter.builtin=Integrated USB JTAG +aslcanx2.menu.JTAGAdapter.builtin.build.openocdscript=esp32s3-builtin.cfg +aslcanx2.menu.JTAGAdapter.builtin.build.copy_jtag_files=1 +aslcanx2.menu.JTAGAdapter.external=FTDI Adapter +aslcanx2.menu.JTAGAdapter.external.build.openocdscript=esp32s3-ftdi.cfg +aslcanx2.menu.JTAGAdapter.external.build.copy_jtag_files=1 +aslcanx2.menu.JTAGAdapter.bridge=ESP USB Bridge +aslcanx2.menu.JTAGAdapter.bridge.build.openocdscript=esp32s3-bridge.cfg +aslcanx2.menu.JTAGAdapter.bridge.build.copy_jtag_files=1 + +aslcanx2.menu.PSRAM.disabled=Disabled +aslcanx2.menu.PSRAM.disabled.build.defines= +aslcanx2.menu.PSRAM.disabled.build.psram_type=qspi +aslcanx2.menu.PSRAM.opi=OPI PSRAM +aslcanx2.menu.PSRAM.opi.build.defines=-DBOARD_HAS_PSRAM +aslcanx2.menu.PSRAM.opi.build.psram_type=opi + +aslcanx2.menu.FlashMode.qio=QIO 80MHz +aslcanx2.menu.FlashMode.qio.build.flash_mode=dio +aslcanx2.menu.FlashMode.qio.build.boot=qio +aslcanx2.menu.FlashMode.qio.build.boot_freq=80m +aslcanx2.menu.FlashMode.qio.build.flash_freq=80m +aslcanx2.menu.FlashMode.qio120=QIO 120MHz +aslcanx2.menu.FlashMode.qio120.build.flash_mode=dio +aslcanx2.menu.FlashMode.qio120.build.boot=qio +aslcanx2.menu.FlashMode.qio120.build.boot_freq=120m +aslcanx2.menu.FlashMode.qio120.build.flash_freq=80m +aslcanx2.menu.FlashMode.dio=DIO 80MHz +aslcanx2.menu.FlashMode.dio.build.flash_mode=dio +aslcanx2.menu.FlashMode.dio.build.boot=dio +aslcanx2.menu.FlashMode.dio.build.boot_freq=80m +aslcanx2.menu.FlashMode.dio.build.flash_freq=80m +aslcanx2.menu.FlashMode.opi=OPI 80MHz +aslcanx2.menu.FlashMode.opi.build.flash_mode=dout +aslcanx2.menu.FlashMode.opi.build.boot=opi +aslcanx2.menu.FlashMode.opi.build.boot_freq=80m +aslcanx2.menu.FlashMode.opi.build.flash_freq=80m + +aslcanx2.menu.LoopCore.1=Core 1 +aslcanx2.menu.LoopCore.1.build.loop_core=-DARDUINO_RUNNING_CORE=1 +aslcanx2.menu.LoopCore.0=Core 0 +aslcanx2.menu.LoopCore.0.build.loop_core=-DARDUINO_RUNNING_CORE=0 + +aslcanx2.menu.EventsCore.1=Core 1 +aslcanx2.menu.EventsCore.1.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=1 +aslcanx2.menu.EventsCore.0=Core 0 +aslcanx2.menu.EventsCore.0.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=0 + +aslcanx2.menu.USBMode.hwcdc=Hardware CDC and JTAG +aslcanx2.menu.USBMode.hwcdc.build.usb_mode=1 +aslcanx2.menu.USBMode.default=USB-OTG (TinyUSB) +aslcanx2.menu.USBMode.default.build.usb_mode=0 + +aslcanx2.menu.CDCOnBoot.default=Enabled +aslcanx2.menu.CDCOnBoot.default.build.cdc_on_boot=1 +aslcanx2.menu.CDCOnBoot.cdc=Disabled +aslcanx2.menu.CDCOnBoot.cdc.build.cdc_on_boot=0 + +aslcanx2.menu.MSCOnBoot.default=Disabled +aslcanx2.menu.MSCOnBoot.default.build.msc_on_boot=0 +aslcanx2.menu.MSCOnBoot.msc=Enabled (Requires USB-OTG Mode) +aslcanx2.menu.MSCOnBoot.msc.build.msc_on_boot=1 + +aslcanx2.menu.DFUOnBoot.default=Disabled +aslcanx2.menu.DFUOnBoot.default.build.dfu_on_boot=0 +aslcanx2.menu.DFUOnBoot.dfu=Enabled (Requires USB-OTG Mode) +aslcanx2.menu.DFUOnBoot.dfu.build.dfu_on_boot=1 + +aslcanx2.menu.UploadMode.default=UART0 / Hardware CDC +aslcanx2.menu.UploadMode.default.upload.use_1200bps_touch=false +aslcanx2.menu.UploadMode.default.upload.wait_for_upload_port=false +aslcanx2.menu.UploadMode.cdc=USB-OTG CDC (TinyUSB) +aslcanx2.menu.UploadMode.cdc.upload.use_1200bps_touch=true +aslcanx2.menu.UploadMode.cdc.upload.wait_for_upload_port=true + +aslcanx2.menu.PartitionScheme.default=Default with spiffs (3MB APP/1.5MB SPIFFS) +aslcanx2.menu.PartitionScheme.default.build.partitions=default_8MB +aslcanx2.menu.PartitionScheme.default.upload.maximum_size=3342336 +aslcanx2.menu.PartitionScheme.defaultffat=Default with ffat (3MB APP/1.5MB FATFS) +aslcanx2.menu.PartitionScheme.defaultffat.build.partitions=default_8MB_ffat +aslcanx2.menu.PartitionScheme.defaultffat.upload.maximum_size=3342336 +aslcanx2.menu.PartitionScheme.minimal=Minimal (1.3MB APP/700KB SPIFFS) +aslcanx2.menu.PartitionScheme.minimal.build.partitions=minimal +aslcanx2.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS) +aslcanx2.menu.PartitionScheme.no_ota.build.partitions=no_ota +aslcanx2.menu.PartitionScheme.no_ota.upload.maximum_size=2097152 +aslcanx2.menu.PartitionScheme.noota_3g=No OTA (1MB APP/3MB SPIFFS) +aslcanx2.menu.PartitionScheme.noota_3g.build.partitions=noota_3g +aslcanx2.menu.PartitionScheme.noota_3g.upload.maximum_size=1048576 +aslcanx2.menu.PartitionScheme.noota_ffat=No OTA (2MB APP/2MB FATFS) +aslcanx2.menu.PartitionScheme.noota_ffat.build.partitions=noota_ffat +aslcanx2.menu.PartitionScheme.noota_ffat.upload.maximum_size=2097152 +aslcanx2.menu.PartitionScheme.noota_3gffat=No OTA (1MB APP/3MB FATFS) +aslcanx2.menu.PartitionScheme.noota_3gffat.build.partitions=noota_3gffat +aslcanx2.menu.PartitionScheme.noota_3gffat.upload.maximum_size=1048576 +aslcanx2.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS) +aslcanx2.menu.PartitionScheme.huge_app.build.partitions=huge_app +aslcanx2.menu.PartitionScheme.huge_app.upload.maximum_size=3145728 +aslcanx2.menu.PartitionScheme.min_spiffs=Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS) +aslcanx2.menu.PartitionScheme.min_spiffs.build.partitions=min_spiffs +aslcanx2.menu.PartitionScheme.min_spiffs.upload.maximum_size=1966080 +aslcanx2.menu.PartitionScheme.rainmaker=RainMaker +aslcanx2.menu.PartitionScheme.rainmaker.build.partitions=rainmaker +aslcanx2.menu.PartitionScheme.rainmaker.upload.maximum_size=3145728 + +aslcanx2.menu.CPUFreq.240=240MHz (WiFi) +aslcanx2.menu.CPUFreq.240.build.f_cpu=240000000L +aslcanx2.menu.CPUFreq.160=160MHz (WiFi) +aslcanx2.menu.CPUFreq.160.build.f_cpu=160000000L +aslcanx2.menu.CPUFreq.80=80MHz (WiFi) +aslcanx2.menu.CPUFreq.80.build.f_cpu=80000000L +aslcanx2.menu.CPUFreq.40=40MHz +aslcanx2.menu.CPUFreq.40.build.f_cpu=40000000L +aslcanx2.menu.CPUFreq.20=20MHz +aslcanx2.menu.CPUFreq.20.build.f_cpu=20000000L +aslcanx2.menu.CPUFreq.10=10MHz +aslcanx2.menu.CPUFreq.10.build.f_cpu=10000000L + +aslcanx2.menu.UploadSpeed.921600=921600 +aslcanx2.menu.UploadSpeed.921600.upload.speed=921600 +aslcanx2.menu.UploadSpeed.115200=115200 +aslcanx2.menu.UploadSpeed.115200.upload.speed=115200 +aslcanx2.menu.UploadSpeed.256000.windows=256000 +aslcanx2.menu.UploadSpeed.256000.upload.speed=256000 +aslcanx2.menu.UploadSpeed.230400.windows.upload.speed=256000 +aslcanx2.menu.UploadSpeed.230400=230400 +aslcanx2.menu.UploadSpeed.230400.upload.speed=230400 +aslcanx2.menu.UploadSpeed.460800.linux=460800 +aslcanx2.menu.UploadSpeed.460800.macosx=460800 +aslcanx2.menu.UploadSpeed.460800.upload.speed=460800 +aslcanx2.menu.UploadSpeed.512000.windows=512000 +aslcanx2.menu.UploadSpeed.512000.upload.speed=512000 + +aslcanx2.menu.DebugLevel.none=None +aslcanx2.menu.DebugLevel.none.build.code_debug=0 +aslcanx2.menu.DebugLevel.error=Error +aslcanx2.menu.DebugLevel.error.build.code_debug=1 +aslcanx2.menu.DebugLevel.warn=Warn +aslcanx2.menu.DebugLevel.warn.build.code_debug=2 +aslcanx2.menu.DebugLevel.info=Info +aslcanx2.menu.DebugLevel.info.build.code_debug=3 +aslcanx2.menu.DebugLevel.debug=Debug +aslcanx2.menu.DebugLevel.debug.build.code_debug=4 +aslcanx2.menu.DebugLevel.verbose=Verbose +aslcanx2.menu.DebugLevel.verbose.build.code_debug=5 + +aslcanx2.menu.EraseFlash.none=Disabled +aslcanx2.menu.EraseFlash.none.upload.erase_cmd= +aslcanx2.menu.EraseFlash.all=Enabled +aslcanx2.menu.EraseFlash.all.upload.erase_cmd=-e + +############################################################## diff --git a/cores/esp32/Esp.cpp b/cores/esp32/Esp.cpp index efe100b3475..a463fc16ba0 100644 --- a/cores/esp32/Esp.cpp +++ b/cores/esp32/Esp.cpp @@ -71,9 +71,10 @@ extern "C" { // REG_SPI_BASE is not defined for S3/C3 ?? #if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 -#ifndef REG_SPI_BASE -#define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i) > 1) ? (((i) * 0x1000) + 0x20000) : (((~(i)) & 1) * 0x1000))) +#ifdef REG_SPI_BASE +#undef REG_SPI_BASE #endif // REG_SPI_BASE +#define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i) > 1) ? (((i) * 0x1000) + 0x20000) : (((~(i)) & 1) * 0x1000))) #endif // TARGET /** diff --git a/cores/esp32/IPAddress.cpp b/cores/esp32/IPAddress.cpp index 1db800a4bfa..b4fc4c3f7e0 100644 --- a/cores/esp32/IPAddress.cpp +++ b/cores/esp32/IPAddress.cpp @@ -266,7 +266,7 @@ IPAddress &IPAddress::operator=(const IPAddress &address) { } bool IPAddress::operator==(const IPAddress &addr) const { - return (addr._type == _type) && (memcmp(addr._address.bytes, _address.bytes, sizeof(_address.bytes)) == 0); + return (addr._type == _type) && (_type == IPType::IPv4 ? addr._address.dword[IPADDRESS_V4_DWORD_INDEX] == _address.dword[IPADDRESS_V4_DWORD_INDEX] : memcmp(addr._address.bytes, _address.bytes, sizeof(_address.bytes)) == 0); } bool IPAddress::operator==(const uint8_t *addr) const { @@ -395,6 +395,7 @@ IPAddress &IPAddress::from_ip_addr_t(const ip_addr_t *addr) { #endif /* LWIP_IPV6_SCOPES */ } else { _type = IPv4; + memset(_address.bytes, 0, sizeof(_address.bytes)); _address.dword[IPADDRESS_V4_DWORD_INDEX] = addr->u_addr.ip4.addr; } return *this; diff --git a/cores/esp32/chip-debug-report.cpp b/cores/esp32/chip-debug-report.cpp index 8a3b8f58190..982b01ffa8f 100644 --- a/cores/esp32/chip-debug-report.cpp +++ b/cores/esp32/chip-debug-report.cpp @@ -113,9 +113,10 @@ static void printFlashInfo(void) { #endif // REG_SPI_BASE is not defined for S3/C3 ?? #if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 -#ifndef REG_SPI_BASE -#define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i) > 1) ? (((i) * 0x1000) + 0x20000) : (((~(i)) & 1) * 0x1000))) +#ifdef REG_SPI_BASE +#undef REG_SPI_BASE #endif // REG_SPI_BASE +#define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i) > 1) ? (((i) * 0x1000) + 0x20000) : (((~(i)) & 1) * 0x1000))) #endif // TARGET chip_report_printf("Flash Info:\n"); diff --git a/cores/esp32/esp32-hal-tinyusb.c b/cores/esp32/esp32-hal-tinyusb.c index c6ad7460ac4..4b39da82641 100644 --- a/cores/esp32/esp32-hal-tinyusb.c +++ b/cores/esp32/esp32-hal-tinyusb.c @@ -43,7 +43,7 @@ #elif CONFIG_IDF_TARGET_ESP32S3 #if defined __has_include && __has_include("hal/usb_phy_ll.h") #include "hal/usb_phy_ll.h" -#else +#elif defined __has_include && __has_include("hal/usb_fsls_phy_ll.h") #include "hal/usb_fsls_phy_ll.h" #endif #include "hal/usb_serial_jtag_ll.h" @@ -503,8 +503,13 @@ static void usb_switch_to_cdc_jtag() { // Initialize CDC+JTAG ISR to listen for BUS_RESET #if defined __has_include && __has_include("hal/usb_phy_ll.h") usb_phy_ll_int_jtag_enable(&USB_SERIAL_JTAG); -#else +#elif defined __has_include && __has_include("hal/usb_fsls_phy_ll.h") usb_fsls_phy_ll_int_jtag_enable(&USB_SERIAL_JTAG); +#else + // usb_serial_jtag_ll_phy_set_defaults(); + const usb_serial_jtag_pull_override_vals_t pull_conf = {.dp_pu = 1, .dm_pu = 0, .dp_pd = 0, .dm_pd = 0}; + usb_serial_jtag_ll_phy_enable_pull_override(&pull_conf); + usb_serial_jtag_ll_phy_disable_pull_override(); #endif usb_serial_jtag_ll_disable_intr_mask(USB_SERIAL_JTAG_LL_INTR_MASK); usb_serial_jtag_ll_clr_intsts_mask(USB_SERIAL_JTAG_LL_INTR_MASK); diff --git a/cores/esp32/esp_arduino_version.h b/cores/esp32/esp_arduino_version.h index 41c0b40bdea..7a9b194e020 100644 --- a/cores/esp32/esp_arduino_version.h +++ b/cores/esp32/esp_arduino_version.h @@ -23,7 +23,7 @@ extern "C" { /** Minor version number (x.X.x) */ #define ESP_ARDUINO_VERSION_MINOR 0 /** Patch version number (x.x.X) */ -#define ESP_ARDUINO_VERSION_PATCH 0 +#define ESP_ARDUINO_VERSION_PATCH 1 /** * Macro to convert ARDUINO version number into an integer diff --git a/docs/en/esp-idf_component.rst b/docs/en/esp-idf_component.rst index f3c7c7ce9af..aa946c61744 100644 --- a/docs/en/esp-idf_component.rst +++ b/docs/en/esp-idf_component.rst @@ -2,19 +2,17 @@ Arduino as an ESP-IDF component ############################### -This method is recommended for advanced users. To use this method, you will need to have the ESP-IDF toolchain installed. - -For a simplified method, see `Installing using Boards Manager `_. +About +----- -ESP32 Arduino lib-builder -------------------------- +You can use the Arduino framework as an ESP-IDF component. This allows you to use the Arduino framework in your ESP-IDF projects with the full flexibility of the ESP-IDF. -If you don't need any modifications in the default Arduino ESP32 core, we recommend you to install using the Boards Manager. - -Arduino Lib Builder is the tool that integrates ESP-IDF into Arduino. It allows you to customize the default settings used by Espressif and try them in Arduino IDE. +This method is recommended for advanced users. To use this method, you will need to have the ESP-IDF toolchain installed. -For more information see `Arduino lib builder `_ +For a simplified method, see `Installing using Boards Manager `_. +If you plan to use these modified settings multiple times, for different projects and targets, you can recompile the Arduino core with the new settings using the Arduino Static Library Builder. +For more information, see the `Lib Builder documentation `_. Installation ------------ diff --git a/docs/en/getting_started.rst b/docs/en/getting_started.rst index 3b3a7e5b988..13fe99300e7 100644 --- a/docs/en/getting_started.rst +++ b/docs/en/getting_started.rst @@ -34,16 +34,16 @@ Supported SoC's Here are the ESP32 series supported by the Arduino-ESP32 project: -======== ====== =========== =================================== -SoC Stable Development Datasheet -======== ====== =========== =================================== -ESP32 Yes Yes `ESP32`_ -ESP32-S2 Yes Yes `ESP32-S2`_ -ESP32-C3 Yes Yes `ESP32-C3`_ -ESP32-S3 Yes Yes `ESP32-S3`_ -ESP32-C6 No Yes `ESP32-C6`_ -ESP32-H2 No Yes `ESP32-H2`_ -======== ====== =========== =================================== +========== ====== =========== ================================= +SoC Stable Development Datasheet +========== ====== =========== ================================= +ESP32 Yes Yes `ESP32`_ +ESP32-S2 Yes Yes `ESP32-S2`_ +ESP32-C3 Yes Yes `ESP32-C3`_ +ESP32-S3 Yes Yes `ESP32-S3`_ +ESP32-C6 Yes Yes `ESP32-C6`_ +ESP32-H2 Yes Yes `ESP32-H2`_ +========== ====== =========== ================================= .. note:: ESP32-C2 is also supported by Arduino-ESP32 but requires rebuilding the static libraries. diff --git a/docs/en/libraries.rst b/docs/en/libraries.rst index 6d0bfeabc0f..0e3499f7783 100644 --- a/docs/en/libraries.rst +++ b/docs/en/libraries.rst @@ -9,59 +9,61 @@ Supported Peripherals Currently, the Arduino ESP32 supports the following peripherals with Arduino APIs. -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Peripheral | ESP32 | ESP32-S2 | ESP32-C3 | ESP32-S3 | | Comments | -+===============+===============+===============+===============+===============+=====+========================+ -| ADC | Yes | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Bluetooth | Yes | Not Supported | Not Supported | Not Supported | | Bluetooth Classic | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| BLE | Yes | Not Supported | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| DAC | Yes | Yes | Not Supported | Not Supported | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Ethernet | Yes | Not Supported | Not Supported | Not Supported | | (*) | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| GPIO | Yes | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Hall Sensor | Not Supported | Not Supported | Not Supported | Not Supported | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| I2C | Yes | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| I2S | Yes | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| LEDC | Yes | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Motor PWM | No | Not Supported | Not Supported | Not Supported | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Pulse Counter | No | No | No | No | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| RMT | Yes | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| SDIO | No | No | No | No | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| SDMMC | Yes | Not Supported | Not Supported | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Timer | Yes | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Temp. Sensor | Not Supported | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Touch | Yes | Yes | Not Supported | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| TWAI | No | No | No | No | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| UART | Yes | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| USB | Not Supported | Yes | Yes | Yes | | ESP32-C3 only CDC/JTAG | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ -| Wi-Fi | Yes | Yes | Yes | Yes | | | -+---------------+---------------+---------------+---------------+---------------+-----+------------------------+ ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| Peripheral | ESP32 | S2 | C3 | S3 | C6 | H2 | Notes | ++===============+=======+=======+=======+=======+=======+=======+=======+ +| ADC | Yes | Yes | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| BT Classic | Yes | N/A | N/A | N/A | N/A | N/A | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| BLE | Yes | N/A | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| DAC | Yes | Yes | N/A | N/A | N/A | N/A | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| Ethernet | Yes | N/A | N/A | N/A | N/A | N/A | (*) | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| GPIO | Yes | Yes | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| Hall Sensor | N/A | N/A | N/A | N/A | N/A | N/A | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| I2C | Yes | Yes | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| I2S | Yes | Yes | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| LEDC | Yes | Yes | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| Motor PWM | No | N/A | N/A | N/A | N/A | N/A | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| Pulse Counter | No | No | No | No | No | No | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| RMT | Yes | Yes | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| SDIO | No | No | No | No | No | No | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| SDMMC | Yes | N/A | N/A | Yes | N/A | N/A | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| Timer | Yes | Yes | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| Temp. Sensor | N/A | Yes | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| Touch | Yes | Yes | N/A | Yes | N/A | N/A | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| TWAI | No | No | No | No | No | No | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| UART | Yes | Yes | Yes | Yes | Yes | Yes | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| USB | N/A | Yes | Yes | Yes | Yes | Yes | (**) | ++---------------+-------+-------+-------+-------+-------+-------+-------+ +| Wi-Fi | Yes | Yes | Yes | Yes | Yes | N/A | | ++---------------+-------+-------+-------+-------+-------+-------+-------+ Notes ^^^^^ (*) SPI Ethernet is supported by all ESP32 families and RMII only for ESP32. +(**) ESP32-C3, C6, H2 only support USB CDC/JTAG + .. note:: Some peripherals are not available for all ESP32 families. To see more details about it, see the corresponding SoC at `Product Selector `_ page. .. include:: common/datasheet.inc diff --git a/docs/en/tutorials/cdc_dfu_flash.rst b/docs/en/tutorials/cdc_dfu_flash.rst index 7d4572d6ef2..1c291edac73 100644 --- a/docs/en/tutorials/cdc_dfu_flash.rst +++ b/docs/en/tutorials/cdc_dfu_flash.rst @@ -19,6 +19,8 @@ SoC USB Peripheral Support ESP32-S2 CDC and DFU ESP32-C3 CDC only ESP32-S3 CDC and DFU +ESP32-C6 CDC only +ESP32-H2 CDC only ========= ======================= It's important that your board includes the USB connector attached to the embedded USB from the SoC. If your board doesn't have the USB connector, you can attach an external one to the USB pins. diff --git a/idf_component.yml b/idf_component.yml index 2a76aec4d81..bc987f25a93 100644 --- a/idf_component.yml +++ b/idf_component.yml @@ -42,13 +42,13 @@ files: - "platform.txt" - "programmers.txt" dependencies: - idf: ">=5.1" + idf: ">=5.1,<5.2" # mdns 1.2.1 is necessary to build H2 with no WiFi - mdns: "^1.2.3" - espressif/esp_modem: "^1.1.0" - chmorgan/esp-libhelix-mp3: - version: "1.0.3" + espressif/mdns: + version: "^1.2.3" require: public + espressif/esp_modem: + version: "^1.1.0" espressif/esp-zboss-lib: version: "^1.0.1" rules: @@ -57,7 +57,7 @@ dependencies: version: "^1.0.1" rules: - if: "target != esp32c2" - esp-dsp: + espressif/esp-dsp: version: "^1.3.4" rules: - if: "target != esp32c2" @@ -77,10 +77,14 @@ dependencies: version: "^0.1.0~1" rules: - if: "target != esp32c2" - joltwallet/littlefs: "^1.10.2" espressif/esp-sr: version: "^1.4.2" rules: - if: "target in [esp32s3]" + joltwallet/littlefs: + version: "^1.10.2" + chmorgan/esp-libhelix-mp3: + version: "1.0.3" + require: public examples: - path: ./idf_component_examples/Hello_world diff --git a/libraries/Ethernet/src/ETH.cpp b/libraries/Ethernet/src/ETH.cpp index f061cf043d4..d7845b9ca3a 100644 --- a/libraries/Ethernet/src/ETH.cpp +++ b/libraries/Ethernet/src/ETH.cpp @@ -42,14 +42,15 @@ #include "esp_netif_defaults.h" #include "esp_eth_phy.h" -static ETHClass *_ethernets[3] = {NULL, NULL, NULL}; +#define NUM_SUPPORTED_ETH_PORTS 3 +static ETHClass *_ethernets[NUM_SUPPORTED_ETH_PORTS] = {NULL, NULL, NULL}; static esp_event_handler_instance_t _eth_ev_instance = NULL; static void _eth_event_cb(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { if (event_base == ETH_EVENT) { esp_eth_handle_t eth_handle = *((esp_eth_handle_t *)event_data); - for (int i = 0; i < 3; ++i) { + for (int i = 0; i < NUM_SUPPORTED_ETH_PORTS; ++i) { if (_ethernets[i] != NULL && _ethernets[i]->handle() == eth_handle) { _ethernets[i]->_onEthEvent(event_id, event_data); } @@ -60,14 +61,14 @@ static void _eth_event_cb(void *arg, esp_event_base_t event_base, int32_t event_ // This callback needs to be aware of which interface it should match against static void onEthConnected(arduino_event_id_t event, arduino_event_info_t info) { if (event == ARDUINO_EVENT_ETH_CONNECTED) { - uint8_t index = 3; - for (int i = 0; i < 3; ++i) { + uint8_t index = NUM_SUPPORTED_ETH_PORTS; + for (int i = 0; i < NUM_SUPPORTED_ETH_PORTS; ++i) { if (_ethernets[i] != NULL && _ethernets[i]->handle() == info.eth_connected) { index = i; break; } } - if (index == 3) { + if (index == NUM_SUPPORTED_ETH_PORTS) { log_e("Could not find ETH interface with that handle!"); return; } @@ -118,7 +119,7 @@ void ETHClass::_onEthEvent(int32_t event_id, void *event_data) { } ETHClass::ETHClass(uint8_t eth_index) - : _eth_handle(NULL), _eth_index(eth_index), _phy_type(ETH_PHY_MAX), _glue_handle(NULL) + : _eth_handle(NULL), _eth_index(eth_index), _phy_type(ETH_PHY_MAX), _glue_handle(NULL), _mac(NULL), _phy(NULL) #if ETH_SPI_SUPPORTS_CUSTOM , _spi(NULL) @@ -534,7 +535,11 @@ bool ETHClass::beginSPI( if (_spi != NULL) { pinMode(_pin_cs, OUTPUT); digitalWrite(_pin_cs, HIGH); - perimanSetPinBusExtraType(_pin_cs, "ETH_CS"); + char cs_num_str[3]; + itoa(_eth_index, cs_num_str, 10); + strcat(strcpy(_cs_str, "ETH_CS["), cs_num_str); + strcat(_cs_str, "]"); + perimanSetPinBusExtraType(_pin_cs, _cs_str); } #endif @@ -586,8 +591,6 @@ bool ETHClass::beginSPI( spi_devcfg.spics_io_num = _pin_cs; spi_devcfg.queue_size = 20; - esp_eth_mac_t *mac = NULL; - esp_eth_phy_t *phy = NULL; #if CONFIG_ETH_SPI_ETHERNET_W5500 if (type == ETH_PHY_W5500) { eth_w5500_config_t mac_config = ETH_W5500_DEFAULT_CONFIG(spi_host, &spi_devcfg); @@ -606,8 +609,8 @@ bool ETHClass::beginSPI( mac_config.custom_spi_driver.write = _eth_spi_write; } #endif - mac = esp_eth_mac_new_w5500(&mac_config, ð_mac_config); - phy = esp_eth_phy_new_w5500(&phy_config); + _mac = esp_eth_mac_new_w5500(&mac_config, ð_mac_config); + _phy = esp_eth_phy_new_w5500(&phy_config); } else #endif #if CONFIG_ETH_SPI_ETHERNET_DM9051 @@ -623,8 +626,8 @@ bool ETHClass::beginSPI( mac_config.custom_spi_driver.write = _eth_spi_write; } #endif - mac = esp_eth_mac_new_dm9051(&mac_config, ð_mac_config); - phy = esp_eth_phy_new_dm9051(&phy_config); + _mac = esp_eth_mac_new_dm9051(&mac_config, ð_mac_config); + _phy = esp_eth_phy_new_dm9051(&phy_config); } else #endif #if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL @@ -640,8 +643,8 @@ bool ETHClass::beginSPI( mac_config.custom_spi_driver.write = _eth_spi_write; } #endif - mac = esp_eth_mac_new_ksz8851snl(&mac_config, ð_mac_config); - phy = esp_eth_phy_new_ksz8851snl(&phy_config); + _mac = esp_eth_mac_new_ksz8851snl(&mac_config, ð_mac_config); + _phy = esp_eth_phy_new_ksz8851snl(&phy_config); } else #endif { @@ -650,7 +653,7 @@ bool ETHClass::beginSPI( } // Init Ethernet driver to default and install it - esp_eth_config_t eth_config = ETH_DEFAULT_CONFIG(mac, phy); + esp_eth_config_t eth_config = ETH_DEFAULT_CONFIG(_mac, _phy); ret = esp_eth_driver_install(ð_config, &_eth_handle); if (ret != ESP_OK) { log_e("SPI Ethernet driver install failed: %d", ret); @@ -743,40 +746,46 @@ bool ETHClass::beginSPI( #if ETH_SPI_SUPPORTS_CUSTOM if (_spi == NULL) { #endif - if (!perimanSetPinBus(_pin_cs, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), -1, -1)) { + if (!perimanSetPinBus(_pin_cs, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), _eth_index, -1)) { goto err; } + perimanSetPinBusExtraType(_pin_cs, "ETH_SPI_CS"); #if ETH_SPI_SUPPORTS_CUSTOM } #endif #if ETH_SPI_SUPPORTS_NO_IRQ if (_pin_irq != -1) { #endif - if (!perimanSetPinBus(_pin_irq, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), -1, -1)) { + if (!perimanSetPinBus(_pin_irq, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), _eth_index, -1)) { goto err; } + perimanSetPinBusExtraType(_pin_irq, "ETH_IRQ"); #if ETH_SPI_SUPPORTS_NO_IRQ } #endif if (_pin_sck != -1) { - if (!perimanSetPinBus(_pin_sck, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), -1, -1)) { + if (!perimanSetPinBus(_pin_sck, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), _eth_index, -1)) { goto err; } + perimanSetPinBusExtraType(_pin_sck, "ETH_SPI_SCK"); } if (_pin_miso != -1) { - if (!perimanSetPinBus(_pin_miso, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), -1, -1)) { + if (!perimanSetPinBus(_pin_miso, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), _eth_index, -1)) { goto err; } + perimanSetPinBusExtraType(_pin_miso, "ETH_SPI_MISO"); } if (_pin_mosi != -1) { - if (!perimanSetPinBus(_pin_mosi, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), -1, -1)) { + if (!perimanSetPinBus(_pin_mosi, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), _eth_index, -1)) { goto err; } + perimanSetPinBusExtraType(_pin_mosi, "ETH_SPI_MOSI"); } if (_pin_rst != -1) { - if (!perimanSetPinBus(_pin_rst, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), -1, -1)) { + if (!perimanSetPinBus(_pin_rst, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this), _eth_index, -1)) { goto err; } + perimanSetPinBusExtraType(_pin_rst, "ETH_RST"); } Network.onSysEvent(onEthConnected, ARDUINO_EVENT_ETH_CONNECTED); @@ -840,11 +849,33 @@ void ETHClass::end(void) { return; } _eth_handle = NULL; + //delete mac + if (_mac != NULL) { + _mac->del(_mac); + _mac = NULL; + } + //delete phy + if (_phy != NULL) { + _phy->del(_phy); + _phy = NULL; + } } if (_eth_ev_instance != NULL) { - if (esp_event_handler_unregister(ETH_EVENT, ESP_EVENT_ANY_ID, &_eth_event_cb) == ESP_OK) { - _eth_ev_instance = NULL; + bool do_not_unreg_ev_handler = false; + for (int i = 0; i < NUM_SUPPORTED_ETH_PORTS; ++i) { + if (_ethernets[i] != NULL && _ethernets[i]->netif() != NULL && _ethernets[i]->netif() != _esp_netif) { + do_not_unreg_ev_handler = true; + break; + } + } + if (!do_not_unreg_ev_handler) { + if (esp_event_handler_unregister(ETH_EVENT, ESP_EVENT_ANY_ID, &_eth_event_cb) == ESP_OK) { + _eth_ev_instance = NULL; + log_v("Unregistered event handler"); + } else { + log_e("Failed to unregister event handler"); + } } } diff --git a/libraries/Ethernet/src/ETH.h b/libraries/Ethernet/src/ETH.h index 9bde9f0ecc0..b481b9e36c3 100644 --- a/libraries/Ethernet/src/ETH.h +++ b/libraries/Ethernet/src/ETH.h @@ -184,8 +184,11 @@ class ETHClass : public NetworkInterface { uint8_t _eth_index; eth_phy_type_t _phy_type; esp_eth_netif_glue_handle_t _glue_handle; + esp_eth_mac_t *_mac; + esp_eth_phy_t *_phy; #if ETH_SPI_SUPPORTS_CUSTOM SPIClass *_spi; + char _cs_str[10]; #endif uint8_t _spi_freq_mhz; int8_t _pin_cs; diff --git a/libraries/Network/src/NetworkInterface.cpp b/libraries/Network/src/NetworkInterface.cpp index 26e9c008d16..777fefe9cb0 100644 --- a/libraries/Network/src/NetworkInterface.cpp +++ b/libraries/Network/src/NetworkInterface.cpp @@ -239,8 +239,21 @@ int NetworkInterface::waitStatusBits(int bits, uint32_t timeout_ms) const { void NetworkInterface::destroyNetif() { if (_ip_ev_instance != NULL) { - esp_event_handler_unregister(IP_EVENT, ESP_EVENT_ANY_ID, &_ip_event_cb); - _ip_ev_instance = NULL; + bool do_not_unreg_ev_handler = false; + for (int i = 0; i < ESP_NETIF_ID_MAX; ++i) { + if (_interfaces[i] != NULL && _interfaces[i] != this) { + do_not_unreg_ev_handler = true; + break; + } + } + if (!do_not_unreg_ev_handler) { + if (esp_event_handler_unregister(IP_EVENT, ESP_EVENT_ANY_ID, &_ip_event_cb) == ESP_OK) { + _ip_ev_instance = NULL; + log_v("Unregistered event handler"); + } else { + log_e("Failed to unregister event handler"); + } + } } if (_esp_netif != NULL) { esp_netif_destroy(_esp_netif); @@ -251,6 +264,12 @@ void NetworkInterface::destroyNetif() { _interface_event_group = NULL; _initial_bits = 0; } + for (int i = 0; i < ESP_NETIF_ID_MAX; ++i) { + if (_interfaces[i] != NULL && _interfaces[i] == this) { + _interfaces[i] = NULL; + break; + } + } } bool NetworkInterface::initNetif(Network_Interface_ID interface_id) { diff --git a/libraries/NetworkClientSecure/src/NetworkClientSecure.cpp b/libraries/NetworkClientSecure/src/NetworkClientSecure.cpp index 1ef03f29dff..d5e3b63c5be 100644 --- a/libraries/NetworkClientSecure/src/NetworkClientSecure.cpp +++ b/libraries/NetworkClientSecure/src/NetworkClientSecure.cpp @@ -40,6 +40,10 @@ NetworkClientSecure::NetworkClientSecure() { sslclient->socket = -1; sslclient->handshake_timeout = 120000; _use_insecure = false; + _stillinPlainStart = false; + _ca_cert_free = false; + _cert_free = false; + _private_key_free = false; _CA_cert = NULL; _cert = NULL; _private_key = NULL; @@ -68,6 +72,11 @@ NetworkClientSecure::NetworkClientSecure(int sock) { _connected = true; } + _use_insecure = false; + _stillinPlainStart = false; + _ca_cert_free = false; + _cert_free = false; + _private_key_free = false; _CA_cert = NULL; _cert = NULL; _private_key = NULL; @@ -77,7 +86,17 @@ NetworkClientSecure::NetworkClientSecure(int sock) { _alpn_protos = NULL; } -NetworkClientSecure::~NetworkClientSecure() {} +NetworkClientSecure::~NetworkClientSecure() { + if (_ca_cert_free && _CA_cert) { + free((void *)_CA_cert); + } + if (_cert_free && _cert) { + free((void *)_cert); + } + if (_private_key_free && _private_key) { + free((void *)_private_key); + } +} void NetworkClientSecure::stop() { stop_ssl_socket(sslclient.get()); @@ -310,6 +329,10 @@ void NetworkClientSecure::setInsecure() { } void NetworkClientSecure::setCACert(const char *rootCA) { + if (_ca_cert_free && _CA_cert) { + free((void *)_CA_cert); + _ca_cert_free = false; + } _CA_cert = rootCA; _use_insecure = false; } @@ -317,18 +340,28 @@ void NetworkClientSecure::setCACert(const char *rootCA) { void NetworkClientSecure::setCACertBundle(const uint8_t *bundle) { if (bundle != NULL) { esp_crt_bundle_set(bundle, sizeof(bundle)); + attach_ssl_certificate_bundle(sslclient.get(), true); _use_ca_bundle = true; } else { esp_crt_bundle_detach(NULL); + attach_ssl_certificate_bundle(sslclient.get(), false); _use_ca_bundle = false; } } void NetworkClientSecure::setCertificate(const char *client_ca) { + if (_cert_free && _cert) { + free((void *)_cert); + _cert_free = false; + } _cert = client_ca; } void NetworkClientSecure::setPrivateKey(const char *private_key) { + if (_private_key_free && _private_key) { + free((void *)_private_key); + _private_key_free = false; + } _private_key = private_key; } @@ -367,6 +400,7 @@ bool NetworkClientSecure::loadCACert(Stream &stream, size_t size) { bool ret = false; if (dest) { setCACert(dest); + _ca_cert_free = true; ret = true; } return ret; @@ -380,6 +414,7 @@ bool NetworkClientSecure::loadCertificate(Stream &stream, size_t size) { bool ret = false; if (dest) { setCertificate(dest); + _cert_free = true; ret = true; } return ret; @@ -393,6 +428,7 @@ bool NetworkClientSecure::loadPrivateKey(Stream &stream, size_t size) { bool ret = false; if (dest) { setPrivateKey(dest); + _private_key_free = true; ret = true; } return ret; diff --git a/libraries/NetworkClientSecure/src/NetworkClientSecure.h b/libraries/NetworkClientSecure/src/NetworkClientSecure.h index e7831a68839..147acbe37fd 100644 --- a/libraries/NetworkClientSecure/src/NetworkClientSecure.h +++ b/libraries/NetworkClientSecure/src/NetworkClientSecure.h @@ -31,7 +31,10 @@ class NetworkClientSecure : public NetworkClient { std::shared_ptr sslclient; bool _use_insecure; - bool _stillinPlainStart = false; + bool _stillinPlainStart; + bool _ca_cert_free; + bool _cert_free; + bool _private_key_free; const char *_CA_cert; const char *_cert; const char *_private_key; diff --git a/libraries/NetworkClientSecure/src/ssl_client.cpp b/libraries/NetworkClientSecure/src/ssl_client.cpp index 41e79ee3803..c8d5bbd21ea 100644 --- a/libraries/NetworkClientSecure/src/ssl_client.cpp +++ b/libraries/NetworkClientSecure/src/ssl_client.cpp @@ -51,6 +51,14 @@ void ssl_init(sslclient_context *ssl_client) { ssl_client->peek_buf = -1; } +void attach_ssl_certificate_bundle(sslclient_context *ssl_client, bool att) { + if (att) { + ssl_client->bundle_attach_cb = &esp_crt_bundle_attach; + } else { + ssl_client->bundle_attach_cb = NULL; + } +} + int start_ssl_client( sslclient_context *ssl_client, const IPAddress &ip, uint32_t port, const char *hostname, int timeout, const char *rootCABuff, bool useRootCABundle, const char *cli_cert, const char *cli_key, const char *pskIdent, const char *psKey, bool insecure, const char **alpn_protos @@ -195,11 +203,14 @@ int start_ssl_client( return handle_error(ret); } } else if (useRootCABundle) { - log_v("Attaching root CA cert bundle"); - ret = esp_crt_bundle_attach(&ssl_client->ssl_conf); - - if (ret < 0) { - return handle_error(ret); + if (ssl_client->bundle_attach_cb != NULL) { + log_v("Attaching root CA cert bundle"); + ret = ssl_client->bundle_attach_cb(&ssl_client->ssl_conf); + if (ret < 0) { + return handle_error(ret); + } + } else { + log_e("useRootCABundle is set, but attach_ssl_certificate_bundle(ssl, true); was not called!"); } } else if (pskIdent != NULL && psKey != NULL) { log_v("Setting up PSK"); diff --git a/libraries/NetworkClientSecure/src/ssl_client.h b/libraries/NetworkClientSecure/src/ssl_client.h index 3e07bf6bc2c..892adc86a95 100644 --- a/libraries/NetworkClientSecure/src/ssl_client.h +++ b/libraries/NetworkClientSecure/src/ssl_client.h @@ -12,6 +12,8 @@ #include "mbedtls/ctr_drbg.h" #include "mbedtls/error.h" +typedef esp_err_t (*crt_bundle_attach_cb)(void *conf); + typedef struct sslclient_context { int socket; mbedtls_ssl_context ssl_ctx; @@ -24,6 +26,8 @@ typedef struct sslclient_context { mbedtls_x509_crt client_cert; mbedtls_pk_context client_key; + crt_bundle_attach_cb bundle_attach_cb; + unsigned long socket_timeout; unsigned long handshake_timeout; @@ -37,6 +41,7 @@ int start_ssl_client( sslclient_context *ssl_client, const IPAddress &ip, uint32_t port, const char *hostname, int timeout, const char *rootCABuff, bool useRootCABundle, const char *cli_cert, const char *cli_key, const char *pskIdent, const char *psKey, bool insecure, const char **alpn_protos ); +void attach_ssl_certificate_bundle(sslclient_context *ssl_client, bool att); int ssl_starttls_handshake(sslclient_context *ssl_client); void stop_ssl_socket(sslclient_context *ssl_client); int data_to_read(sslclient_context *ssl_client); diff --git a/libraries/PPP/src/PPP.cpp b/libraries/PPP/src/PPP.cpp index 2fc713e874b..3c7a887d672 100644 --- a/libraries/PPP/src/PPP.cpp +++ b/libraries/PPP/src/PPP.cpp @@ -283,6 +283,7 @@ bool PPPClass::begin(ppp_modem_model_t model, uint8_t uart_num, int baud_rate) { } else { pinMode(_pin_rst, OUTPUT); } + perimanSetPinBusExtraType(_pin_rst, "PPP_MODEM_RST"); digitalWrite(_pin_rst, !_pin_rst_act_low); delay(200); digitalWrite(_pin_rst, _pin_rst_act_low); diff --git a/libraries/WiFi/src/AP.cpp b/libraries/WiFi/src/AP.cpp index eb05521bbb7..db61c2f0ff1 100644 --- a/libraries/WiFi/src/AP.cpp +++ b/libraries/WiFi/src/AP.cpp @@ -85,7 +85,7 @@ static void _onApArduinoEvent(arduino_event_t *ev) { if (_ap_network_if == NULL || ev->event_id < ARDUINO_EVENT_WIFI_AP_START || ev->event_id > ARDUINO_EVENT_WIFI_AP_GOT_IP6) { return; } - log_d("Arduino AP Event: %d - %s", ev->event_id, Network.eventName(ev->event_id)); + log_v("Arduino AP Event: %d - %s", ev->event_id, Network.eventName(ev->event_id)); if (ev->event_id == ARDUINO_EVENT_WIFI_AP_START) { if (_ap_network_if->getStatusBits() & ESP_NETIF_WANT_IP6_BIT) { esp_err_t err = esp_netif_create_ip6_linklocal(_ap_network_if->netif()); diff --git a/libraries/WiFi/src/STA.cpp b/libraries/WiFi/src/STA.cpp index 8fb25ba86cb..dacb0cae2d4 100644 --- a/libraries/WiFi/src/STA.cpp +++ b/libraries/WiFi/src/STA.cpp @@ -107,7 +107,7 @@ static void _onStaArduinoEvent(arduino_event_t *ev) { return; } static bool first_connect = true; - log_d("Arduino STA Event: %d - %s", ev->event_id, Network.eventName(ev->event_id)); + log_v("Arduino STA Event: %d - %s", ev->event_id, Network.eventName(ev->event_id)); if (ev->event_id == ARDUINO_EVENT_WIFI_STA_START) { _sta_network_if->_setStatus(WL_DISCONNECTED); @@ -162,11 +162,11 @@ static void _onStaArduinoEvent(arduino_event_t *ev) { _sta_network_if->connect(); } } else if (ev->event_id == ARDUINO_EVENT_WIFI_STA_GOT_IP) { -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG +#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_VERBOSE uint8_t *ip = (uint8_t *)&(ev->event_info.got_ip.ip_info.ip.addr); uint8_t *mask = (uint8_t *)&(ev->event_info.got_ip.ip_info.netmask.addr); uint8_t *gw = (uint8_t *)&(ev->event_info.got_ip.ip_info.gw.addr); - log_d( + log_v( "STA IP: %u.%u.%u.%u, MASK: %u.%u.%u.%u, GW: %u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3], mask[0], mask[1], mask[2], mask[3], gw[0], gw[1], gw[2], gw[3] ); #endif diff --git a/libraries/WiFi/src/WiFiScan.cpp b/libraries/WiFi/src/WiFiScan.cpp index 669bb3afc07..70d3fb31cef 100644 --- a/libraries/WiFi/src/WiFiScan.cpp +++ b/libraries/WiFi/src/WiFiScan.cpp @@ -44,10 +44,14 @@ extern "C" { bool WiFiScanClass::_scanAsync = false; uint32_t WiFiScanClass::_scanStarted = 0; -uint32_t WiFiScanClass::_scanTimeout = 10000; +uint32_t WiFiScanClass::_scanTimeout = 60000; uint16_t WiFiScanClass::_scanCount = 0; void *WiFiScanClass::_scanResult = 0; +void WiFiScanClass::setScanTimeout(uint32_t ms) { + WiFiScanClass::_scanTimeout = ms; +} + /** * Start scan WiFi networks available * @param async run in async mode @@ -60,7 +64,6 @@ int16_t return WIFI_SCAN_RUNNING; } - WiFiScanClass::_scanTimeout = max_ms_per_chan * 20; WiFiScanClass::_scanAsync = async; WiFi.enableSTA(true); @@ -92,7 +95,7 @@ int16_t if (WiFiScanClass::_scanAsync) { return WIFI_SCAN_RUNNING; } - if (WiFiGenericClass::waitStatusBits(WIFI_SCAN_DONE_BIT, 10000)) { + if (WiFiGenericClass::waitStatusBits(WIFI_SCAN_DONE_BIT, _scanTimeout)) { return (int16_t)WiFiScanClass::_scanCount; } } diff --git a/libraries/WiFi/src/WiFiScan.h b/libraries/WiFi/src/WiFiScan.h index fc687f9c5d4..5e09a93351c 100644 --- a/libraries/WiFi/src/WiFiScan.h +++ b/libraries/WiFi/src/WiFiScan.h @@ -31,6 +31,8 @@ class WiFiScanClass { public: + void setScanTimeout(uint32_t ms); + int16_t scanNetworks( bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300, uint8_t channel = 0, const char *ssid = nullptr, const uint8_t *bssid = nullptr diff --git a/package.json b/package.json index 4316e1c0096..f261149b498 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "framework-arduinoespressif32", - "version": "3.0.0", + "version": "3.0.1", "description": "Arduino Wiring-based Framework for the Espressif ESP32, ESP32-S and ESP32-C series of SoCs", "keywords": [ "framework", diff --git a/platform.txt b/platform.txt index 4e379e86577..e9e284f833b 100644 --- a/platform.txt +++ b/platform.txt @@ -1,7 +1,8 @@ name=ESP32 Arduino -version=3.0.0 +version=3.0.1 tools.esp32-arduino-libs.path={runtime.platform.path}/tools/esp32-arduino-libs +tools.esp32-arduino-libs.path.windows={runtime.platform.path}\tools\esp32-arduino-libs tools.xtensa-esp32-elf-gcc.path={runtime.platform.path}/tools/xtensa-esp32-elf tools.xtensa-esp32s2-elf-gcc.path={runtime.platform.path}/tools/xtensa-esp32s2-elf tools.xtensa-esp32s3-elf-gcc.path={runtime.platform.path}/tools/xtensa-esp32s3-elf @@ -30,6 +31,7 @@ compiler.path={tools.{build.tarch}-{build.target}-elf-gcc.path}/bin/ compiler.prefix={build.tarch}-{build.target}-elf- compiler.sdk.path={tools.esp32-arduino-libs.path}/{build.mcu} +compiler.sdk.path.windows={tools.esp32-arduino-libs.path}\{build.mcu} # EXPERIMENTAL feature: optimization flags # - this is alpha and may be subject to change without notice diff --git a/tools/get.exe b/tools/get.exe index 542ac61baae..ed5fabbb7b4 100644 Binary files a/tools/get.exe and b/tools/get.exe differ diff --git a/tools/get.py b/tools/get.py index ffa314ec625..68b92e05da7 100755 --- a/tools/get.py +++ b/tools/get.py @@ -3,7 +3,7 @@ """Script to download and extract tools This script will download and extract required tools into the current directory. -Tools list is obtained from package/package_esp8266com_index.template.json file. +Tools list is obtained from package/package_esp32_index.template.json file. """ from __future__ import print_function @@ -22,6 +22,11 @@ import tarfile import zipfile import re +import time +import argparse + +# Initialize start_time globally +start_time = -1 if sys.version_info[0] == 3: from urllib.request import urlretrieve @@ -42,7 +47,6 @@ elif __file__: current_dir = os.path.dirname(os.path.realpath(unicode(__file__))) -# current_dir = os.path.dirname(os.path.realpath(unicode(__file__))) dist_dir = current_dir + "/dist/" @@ -62,53 +66,175 @@ def mkdir_p(path): raise -def report_progress(count, blockSize, totalSize): +def format_time(seconds): + minutes, seconds = divmod(seconds, 60) + return "{:02}:{:05.2f}".format(int(minutes), seconds) + + +def report_progress(block_count, block_size, total_size, start_time): + downloaded_size = block_count * block_size + time_elapsed = time.time() - start_time + current_speed = downloaded_size / (time_elapsed) + if sys.stdout.isatty(): - if totalSize > 0: - percent = int(count * blockSize * 100 / totalSize) - percent = min(100, percent) - sys.stdout.write("\r%d%%" % percent) + if total_size > 0: + percent_complete = min((downloaded_size / total_size) * 100, 100) + sys.stdout.write( + f"\rDownloading... {percent_complete:.2f}% - {downloaded_size / 1024 / 1024:.2f} MB downloaded - Elapsed Time: {format_time(time_elapsed)} - Speed: {current_speed / 1024 / 1024:.2f} MB/s" # noqa: E501 + ) else: - sofar = (count * blockSize) / 1024 - if sofar >= 1000: - sofar /= 1024 - sys.stdout.write("\r%dMB " % (sofar)) - else: - sys.stdout.write("\r%dKB" % (sofar)) + sys.stdout.write( + f"\rDownloading... {downloaded_size / 1024 / 1024:.2f} MB downloaded - Elapsed Time: {format_time(time_elapsed)} - Speed: {current_speed / 1024 / 1024:.2f} MB/s" # noqa: E501 + ) sys.stdout.flush() -def unpack(filename, destination): +def print_verification_progress(total_files, i, t1): + if sys.stdout.isatty(): + sys.stdout.write(f"\rElapsed time {format_time(time.time() - t1)}") + sys.stdout.flush() + + +def verify_files(filename, destination, rename_to): + # Set the path of the extracted directory + extracted_dir_path = destination + t1 = time.time() + if filename.endswith(".zip"): + try: + with zipfile.ZipFile(filename, "r") as archive: + first_dir = archive.namelist()[0].split("/")[0] + total_files = len(archive.namelist()) + for i, zipped_file in enumerate(archive.namelist(), 1): + local_path = os.path.join(extracted_dir_path, zipped_file.replace(first_dir, rename_to, 1)) + if not os.path.exists(local_path): + print(f"\nMissing {zipped_file} on location: {extracted_dir_path}") + print(f"Verification failed; aborted in {format_time(time.time() - t1)}") + return False + print_verification_progress(total_files, i, t1) + except zipfile.BadZipFile: + print(f"Verification failed; aborted in {format_time(time.time() - t1)}") + return False + elif filename.endswith(".tar.gz"): + try: + with tarfile.open(filename, "r:gz") as archive: + first_dir = archive.getnames()[0].split("/")[0] + total_files = len(archive.getnames()) + for i, zipped_file in enumerate(archive.getnames(), 1): + local_path = os.path.join(extracted_dir_path, zipped_file.replace(first_dir, rename_to, 1)) + if not os.path.exists(local_path): + print(f"\nMissing {zipped_file} on location: {extracted_dir_path}") + print(f"Verification failed; aborted in {format_time(time.time() - t1)}") + return False + print_verification_progress(total_files, i, t1) + except tarfile.ReadError: + print(f"Verification failed; aborted in {format_time(time.time() - t1)}") + return False + elif filename.endswith(".tar.xz"): + try: + with tarfile.open(filename, "r:xz") as archive: + first_dir = archive.getnames()[0].split("/")[0] + total_files = len(archive.getnames()) + for i, zipped_file in enumerate(archive.getnames(), 1): + local_path = os.path.join(extracted_dir_path, zipped_file.replace(first_dir, rename_to, 1)) + if not os.path.exists(local_path): + print(f"\nMissing {zipped_file} on location: {extracted_dir_path}") + print(f"Verification failed; aborted in {format_time(time.time() - t1)}") + return False + print_verification_progress(total_files, i, t1) + except tarfile.ReadError: + print(f"Verification failed; aborted in {format_time(time.time() - t1)}") + return False + else: + raise NotImplementedError("Unsupported archive type") + + if verbose: + print(f"\nVerification passed; completed in {format_time(time.time() - t1)}") + + return True + + +def unpack(filename, destination, force_extract): # noqa: C901 dirname = "" - print("Extracting {0} ...".format(os.path.basename(filename))) - sys.stdout.flush() + cfile = None # Compressed file + file_is_corrupted = False + if not force_extract: + print(" > Verify archive... ", end="", flush=True) + + try: + if filename.endswith("tar.gz"): + if tarfile.is_tarfile(filename): + cfile = tarfile.open(filename, "r:gz") + dirname = cfile.getnames()[0].split("/")[0] + else: + print("File corrupted!") + file_is_corrupted = True + elif filename.endswith("tar.xz"): + if tarfile.is_tarfile(filename): + cfile = tarfile.open(filename, "r:xz") + dirname = cfile.getnames()[0].split("/")[0] + else: + print("File corrupted!") + file_is_corrupted = True + elif filename.endswith("zip"): + if zipfile.is_zipfile(filename): + cfile = zipfile.ZipFile(filename) + dirname = cfile.namelist()[0].split("/")[0] + else: + print("File corrupted!") + file_is_corrupted = True + else: + raise NotImplementedError("Unsupported archive type") + except EOFError: + print("File corrupted or incomplete!") + cfile = None + file_is_corrupted = True + + if file_is_corrupted: + corrupted_filename = filename + ".corrupted" + os.rename(filename, corrupted_filename) + if verbose: + print(f"Renaming corrupted archive to {corrupted_filename}") + return False + + # A little trick to rename tool directories so they don't contain version number + rename_to = re.match(r"^([a-z][^\-]*\-*)+", dirname).group(0).strip("-") + if rename_to == dirname and dirname.startswith("esp32-arduino-libs-"): + rename_to = "esp32-arduino-libs" + + if not force_extract: + if verify_files(filename, destination, rename_to): + print(" Files ok. Skipping Extraction") + return True + else: + print(" Extracting archive...") + else: + print(" Forcing extraction") + if filename.endswith("tar.gz"): - tfile = tarfile.open(filename, "r:gz") - tfile.extractall(destination) - dirname = tfile.getnames()[0] + if not cfile: + cfile = tarfile.open(filename, "r:gz") + cfile.extractall(destination) elif filename.endswith("tar.xz"): - tfile = tarfile.open(filename, "r:xz") - tfile.extractall(destination) - dirname = tfile.getnames()[0] + if not cfile: + cfile = tarfile.open(filename, "r:xz") + cfile.extractall(destination) elif filename.endswith("zip"): - zfile = zipfile.ZipFile(filename) - zfile.extractall(destination) - dirname = zfile.namelist()[0] + if not cfile: + cfile = zipfile.ZipFile(filename) + cfile.extractall(destination) else: raise NotImplementedError("Unsupported archive type") - # a little trick to rename tool directories so they don't contain version number - rename_to = re.match(r"^([a-z][^\-]*\-*)+", dirname).group(0).strip("-") - if rename_to == dirname and dirname.startswith("esp32-arduino-libs-"): - rename_to = "esp32-arduino-libs" if rename_to != dirname: print("Renaming {0} to {1} ...".format(dirname, rename_to)) if os.path.isdir(rename_to): shutil.rmtree(rename_to) shutil.move(dirname, rename_to) + return True + -def download_file_with_progress(url, filename): +def download_file_with_progress(url, filename, start_time): import ssl import contextlib @@ -124,16 +250,16 @@ def download_file_with_progress(url, filename): with open(filename, "wb") as out_file: out_file.write(block) block_count += 1 - report_progress(block_count, block_size, total_size) + report_progress(block_count, block_size, total_size, start_time) while True: block = fp.read(block_size) if not block: break out_file.write(block) block_count += 1 - report_progress(block_count, block_size, total_size) + report_progress(block_count, block_size, total_size, start_time) else: - raise Exception("nonexisting file or connection error") + raise Exception("Non-existing file or connection error") def download_file(url, filename): @@ -155,16 +281,21 @@ def download_file(url, filename): break out_file.write(block) else: - raise Exception("nonexisting file or connection error") + raise Exception("Non-existing file or connection error") -def get_tool(tool): +def get_tool(tool, force_download, force_extract): sys_name = platform.system() archive_name = tool["archiveFileName"] + checksum = tool["checksum"][8:] local_path = dist_dir + archive_name url = tool["url"] - if not os.path.isfile(local_path): - print("Downloading " + archive_name + " ...") + start_time = time.time() + if not os.path.isfile(local_path) or force_download: + if verbose: + print("Downloading '" + archive_name + "' to '" + local_path + "'") + else: + print("Downloading '" + archive_name + "' ...") sys.stdout.flush() if "CYGWIN_NT" in sys_name: import ssl @@ -186,13 +317,18 @@ def get_tool(tool): try: urlretrieve(url, local_path, report_progress) except: # noqa: E722 - download_file_with_progress(url, local_path) - sys.stdout.write("\rDone \n") + download_file_with_progress(url, local_path, start_time) + sys.stdout.write(" - Done\n") sys.stdout.flush() else: print("Tool {0} already downloaded".format(archive_name)) sys.stdout.flush() - unpack(local_path, ".") + + if "esp32-arduino-libs" not in archive_name and sha256sum(local_path) != checksum: + print("Checksum mismatch for {0}".format(archive_name)) + return False + + return unpack(local_path, ".", force_extract) def load_tools_list(filename, platform): @@ -241,9 +377,44 @@ def identify_platform(): if __name__ == "__main__": - is_test = len(sys.argv) > 1 and sys.argv[1] == "-h" + parser = argparse.ArgumentParser(description="Download and extract tools") + + parser.add_argument("-v", "--verbose", type=bool, default=False, required=False, help="Print verbose output") + + parser.add_argument( + "-d", "--force_download", type=bool, default=False, required=False, help="Force download of tools" + ) + + parser.add_argument( + "-e", "--force_extract", type=bool, default=False, required=False, help="Force extraction of tools" + ) + + parser.add_argument( + "-f", "--force_all", type=bool, default=False, required=False, help="Force download and extraction of tools" + ) + + parser.add_argument("-t", "--test", type=bool, default=False, required=False, help=argparse.SUPPRESS) + + args = parser.parse_args() + + verbose = args.verbose + force_download = args.force_download + force_extract = args.force_extract + force_all = args.force_all + is_test = args.test + + if is_test and (force_download or force_extract or force_all): + print("Cannot combine test (-t) and forced execution (-d | -e | -f)") + parser.print_help(sys.stderr) + sys.exit(1) + if is_test: print("Test run!") + + if force_all: + force_download = True + force_extract = True + identified_platform = identify_platform() print("Platform: {0}".format(identified_platform)) tools_to_download = load_tools_list( @@ -254,5 +425,11 @@ def identify_platform(): if is_test: print("Would install: {0}".format(tool["archiveFileName"])) else: - get_tool(tool) + if not get_tool(tool, force_download, force_extract): + if verbose: + print(f"Tool {tool['archiveFileName']} was corrupted. Re-downloading...\n") + if not get_tool(tool, True, force_extract): + print(f"Tool {tool['archiveFileName']} was corrupted, but re-downloading did not help!\n") + sys.exit(1) + print("Platform Tools Installed") diff --git a/tools/partitions/no_fs.csv b/tools/partitions/no_fs.csv new file mode 100644 index 00000000000..a9078ee522f --- /dev/null +++ b/tools/partitions/no_fs.csv @@ -0,0 +1,6 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x5000, +otadata, data, ota, 0xe000, 0x2000, +app0, app, ota_0, 0x10000, 0x1F0000, +app1, app, ota_1, 0x200000,0x1F0000, +coredump, data, coredump,0x3F0000,0x10000, diff --git a/variants/arduino_nano_nora/dfu_callbacks.cpp b/variants/arduino_nano_nora/dfu_callbacks.cpp index 64847f05074..fa7d57da7d9 100644 --- a/variants/arduino_nano_nora/dfu_callbacks.cpp +++ b/variants/arduino_nano_nora/dfu_callbacks.cpp @@ -10,6 +10,7 @@ namespace { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #include "../../libraries/Update/src/Updater.cpp" +#include "../../cores/esp32/HEXBuilder.cpp" #include "../../cores/esp32/MD5Builder.cpp" #pragma GCC diagnostic pop } // namespace diff --git a/variants/aslcanx2/default_8MB_ffat.csv b/variants/aslcanx2/default_8MB_ffat.csv new file mode 100644 index 00000000000..2791bf7912e --- /dev/null +++ b/variants/aslcanx2/default_8MB_ffat.csv @@ -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, 0x330000, +app1, app, ota_1, 0x340000,0x330000, +ffat, data, fat, 0x670000,0x180000, +coredump, data, coredump,0x7F0000,0x10000, diff --git a/variants/um_rmp/pins_arduino.h b/variants/aslcanx2/pins_arduino.h similarity index 58% rename from variants/um_rmp/pins_arduino.h rename to variants/aslcanx2/pins_arduino.h index 54ad00ff0d4..eb876a09708 100644 --- a/variants/um_rmp/pins_arduino.h +++ b/variants/aslcanx2/pins_arduino.h @@ -4,11 +4,21 @@ #include #include "soc/soc_caps.h" -#define USB_VID 0x303A -#define USB_PID 0x8001 -#define USB_MANUFACTURER "Unexpected Maker" -#define USB_PRODUCT "RM Pro" -#define USB_SERIAL "" +#define USB_VID 0x16D0 +#define USB_PID 0x07F2 + +static const uint8_t LED_BUILTIN = 2; +#define BUILTIN_LED LED_BUILTIN // backward compatibility +#define LED_BUILTIN LED_BUILTIN + +static const uint8_t CAN1_RX = 6; +static const uint8_t CAN1_TX = 7; + +static const uint8_t SS = -1; +static const uint8_t CS = 10; +static const uint8_t MOSI = 11; +static const uint8_t MISO = 13; +static const uint8_t SCK = 12; static const uint8_t TX = 43; static const uint8_t RX = 44; @@ -16,13 +26,6 @@ static const uint8_t RX = 44; static const uint8_t SDA = 8; static const uint8_t SCL = 9; -static const uint8_t SS = 14; -static const uint8_t MOSI = 35; -static const uint8_t MISO = 37; -static const uint8_t SDO = 35; -static const uint8_t SDI = 37; -static const uint8_t SCK = 36; - static const uint8_t A0 = 1; static const uint8_t A1 = 2; static const uint8_t A2 = 3; @@ -59,21 +62,4 @@ static const uint8_t T12 = 12; static const uint8_t T13 = 13; static const uint8_t T14 = 14; -static const uint8_t DAC1 = 17; -static const uint8_t DAC2 = 18; - -static const uint8_t VBAT_SENSE = 3; -static const uint8_t VBUS_SENSE = 21; - -static const uint8_t RGB_DATA = 1; -// RGB_BUILTIN and RGB_BRIGHTNESS can be used in new Arduino API neopixelWrite() -#define RGB_BUILTIN (RGB_DATA + SOC_GPIO_PIN_COUNT) -#define RGB_BRIGHTNESS 64 -// BUILTIN_LED can be used in new Arduino API digitalWrite() like in Blink.ino -static const uint8_t LED_BUILTIN = RGB_BUILTIN; -#define BUILTIN_LED LED_BUILTIN // backward compatibility -#define LED_BUILTIN LED_BUILTIN // allow testing #ifdef LED_BUILTIN - -static const uint8_t RGB_PWR = 2; - #endif /* Pins_Arduino_h */