Merge remote-tracking branch 'adafruit/main' into banglejs2

This commit is contained in:
Scott Shawcroft 2023-02-23 14:43:38 -08:00
commit f832386cda
No known key found for this signature in database
GPG Key ID: 0DFD512649C052DA
45 changed files with 873 additions and 371 deletions

View File

@ -45,7 +45,7 @@ runs:
# arm # arm
- name: Get arm toolchain - name: Get arm toolchain
if: inputs.platform == 'aarch' || inputs.platform == 'arm' || inputs.platform == 'nrf' if: inputs.platform == 'aarch' || inputs.platform == 'arm'
uses: carlosperate/arm-none-eabi-gcc-action@v1 uses: carlosperate/arm-none-eabi-gcc-action@v1
with: with:
release: '10-2020-q4' release: '10-2020-q4'
@ -73,22 +73,6 @@ runs:
echo >> $GITHUB_PATH "$PATH" echo >> $GITHUB_PATH "$PATH"
shell: bash shell: bash
# nrf
- name: Get nrfutil 7+
if: inputs.platform == 'nrf'
run: |
wget https://developer.nordicsemi.com/.pc-tools/nrfutil/x64-linux/nrfutil
chmod +x nrfutil
./nrfutil install nrf5sdk-tools
mkdir -p $HOME/.local/bin
mv nrfutil $HOME/.local/bin
echo "$HOME/.local/bin" >> $GITHUB_PATH
shell: bash
- name: Print nrfutil version
if: inputs.platform == 'nrf'
run: nrfutil -V
shell: bash
# riscv # riscv
- name: Get riscv toolchain - name: Get riscv toolchain
if: inputs.platform == 'riscv' if: inputs.platform == 'riscv'

28
.github/actions/deps/ports/action.yml vendored Normal file
View File

@ -0,0 +1,28 @@
name: Fetch port deps
inputs:
board:
required: true
type: string
outputs:
port:
value: ${{ steps.board-to-port.outputs.port }}
runs:
using: composite
steps:
- name: Board to port
id: board-to-port
run: |
PORT=$(find ports/*/boards/ -type d -name ${{ inputs.board }} | sed 's/^ports\///g;s/\/boards.*//g')
if [ -z $PORT ]; then (exit 1); else echo >> $GITHUB_OUTPUT "port=$PORT"; fi
shell: bash
- name: Set up espressif port
if: steps.board-to-port.outputs.port == 'espressif'
uses: ./.github/actions/deps/ports/espressif
- name: Set up nrf port
if: steps.board-to-port.outputs.port == 'nrf'
uses: ./.github/actions/deps/ports/nrf

View File

@ -0,0 +1,17 @@
name: Fetch nrf port deps
runs:
using: composite
steps:
- name: Get nrfutil 7+
run: |
wget https://developer.nordicsemi.com/.pc-tools/nrfutil/x64-linux/nrfutil
chmod +x nrfutil
./nrfutil install nrf5sdk-tools
mkdir -p $HOME/.local/bin
mv nrfutil $HOME/.local/bin
echo "$HOME/.local/bin" >> $GITHUB_PATH
shell: bash
- name: Print nrfutil version
run: nrfutil -V
shell: bash

View File

@ -51,20 +51,15 @@ jobs:
if: inputs.debug || inputs.flags != '' if: inputs.debug || inputs.flags != ''
run: | run: |
> custom-build && git add custom-build > custom-build && git add custom-build
- name: Get port
id: get-port
run: |
PORT=$(find ports/*/boards/ -type d -name ${{ inputs.board }} | sed 's/^ports\///g;s/\/boards.*//g')
if [ -z $PORT ]; then (exit 1); else echo >> $GITHUB_OUTPUT "port=$PORT"; fi
- name: Port to platform
run: echo >> $GITHUB_ENV "PLATFORM=${{ env[format('PLATFORM_{0}', steps.get-port.outputs.port)] }}"
- name: Set up python - name: Set up python
uses: actions/setup-python@v4 uses: actions/setup-python@v4
with: with:
python-version: 3.x python-version: 3.x
- name: Set up port - name: Set up port
if: env.PLATFORM == 'esp' id: set-up-port
uses: ./.github/actions/deps/ports/espressif uses: ./.github/actions/deps/ports
with:
board: ${{ inputs.board }}
- name: Set up submodules - name: Set up submodules
id: set-up-submodules id: set-up-submodules
uses: ./.github/actions/deps/submodules uses: ./.github/actions/deps/submodules
@ -75,7 +70,7 @@ jobs:
uses: ./.github/actions/deps/external uses: ./.github/actions/deps/external
with: with:
action: cache action: cache
platform: ${{ env.PLATFORM }} platform: ${{ env[format('PLATFORM_{0}', steps.set-up-port.outputs.port)] }}
- name: Set up mpy-cross - name: Set up mpy-cross
if: steps.set-up-submodules.outputs.frozen == 'True' if: steps.set-up-submodules.outputs.frozen == 'True'
uses: ./.github/actions/mpy_cross uses: ./.github/actions/mpy_cross
@ -96,9 +91,9 @@ jobs:
mkfs.fat --version || true mkfs.fat --version || true
- name: Build board - name: Build board
run: make -j2 ${{ inputs.flags }} BOARD=${{ inputs.board }} DEBUG=${{ inputs.debug && '1' || '0' }} TRANSLATION=${{ inputs.language }} run: make -j2 ${{ inputs.flags }} BOARD=${{ inputs.board }} DEBUG=${{ inputs.debug && '1' || '0' }} TRANSLATION=${{ inputs.language }}
working-directory: ports/${{ steps.get-port.outputs.port }} working-directory: ports/${{ steps.set-up-port.outputs.port }}
- name: Upload artifact - name: Upload artifact
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:
name: ${{ inputs.board }}-${{ inputs.language }}-${{ inputs.version }}${{ inputs.flags != '' && '-custom' || '' }}${{ inputs.debug && '-debug' || '' }} name: ${{ inputs.board }}-${{ inputs.language }}-${{ inputs.version }}${{ inputs.flags != '' && '-custom' || '' }}${{ inputs.debug && '-debug' || '' }}
path: ports/${{ steps.get-port.outputs.port }}/build-${{ inputs.board }}/firmware.* path: ports/${{ steps.set-up-port.outputs.port }}/build-${{ inputs.board }}/firmware.*

View File

@ -38,8 +38,9 @@ jobs:
with: with:
python-version: 3.x python-version: 3.x
- name: Set up port - name: Set up port
if: inputs.platform == 'esp' uses: ./.github/actions/deps/ports
uses: ./.github/actions/deps/ports/espressif with:
board: ${{ matrix.board }}
- name: Set up submodules - name: Set up submodules
id: set-up-submodules id: set-up-submodules
uses: ./.github/actions/deps/submodules uses: ./.github/actions/deps/submodules

View File

@ -22,12 +22,12 @@ jobs:
outputs: outputs:
build-doc: ${{ steps.set-matrix.outputs.build-doc }} build-doc: ${{ steps.set-matrix.outputs.build-doc }}
build-boards: ${{ steps.set-matrix.outputs.build-boards }} build-boards: ${{ steps.set-matrix.outputs.build-boards }}
build-windows: ${{ steps.set-matrix.outputs.build-windows }}
boards-aarch: ${{ steps.set-matrix.outputs.boards-aarch }} boards-aarch: ${{ steps.set-matrix.outputs.boards-aarch }}
boards-arm: ${{ steps.set-matrix.outputs.boards-arm }} boards-arm: ${{ steps.set-matrix.outputs.boards-arm }}
boards-atmel: ${{ steps.set-matrix.outputs.boards-atmel }}
boards-esp: ${{ steps.set-matrix.outputs.boards-esp }} boards-esp: ${{ steps.set-matrix.outputs.boards-esp }}
boards-nrf: ${{ steps.set-matrix.outputs.boards-nrf }}
boards-riscv: ${{ steps.set-matrix.outputs.boards-riscv }} boards-riscv: ${{ steps.set-matrix.outputs.boards-riscv }}
boards-rpi: ${{ steps.set-matrix.outputs.boards-rpi }}
cp-version: ${{ steps.set-up-submodules.outputs.version }} cp-version: ${{ steps.set-up-submodules.outputs.version }}
steps: steps:
- name: Dump GitHub context - name: Dump GitHub context
@ -55,24 +55,23 @@ jobs:
uses: ./.github/actions/deps/external uses: ./.github/actions/deps/external
with: with:
action: cache action: cache
# Disabled: Needs to be updated
# - name: Get last commit with checks
# id: get-last-commit-with-checks
# if: github.event_name == 'pull_request'
# working-directory: tools
# run: python3 -u ci_changes_per_commit.py
# env:
# REPO: ${{ github.repository }}
# PULL: ${{ github.event.number }}
# GITHUB_TOKEN: ${{ github.token }}
# EXCLUDE_COMMIT: ${{ github.event.after }}
- name: Set up mpy-cross - name: Set up mpy-cross
uses: ./.github/actions/mpy_cross uses: ./.github/actions/mpy_cross
with: with:
download: false download: false
- name: Get last commit with checks
id: get-last-commit-with-checks
if: github.event_name == 'pull_request'
working-directory: tools
run: python3 -u ci_changes_per_commit.py
env:
REPO: ${{ github.repository }}
PULL: ${{ github.event.number }}
GITHUB_TOKEN: ${{ github.token }}
EXCLUDE_COMMIT: ${{ github.event.pull_request.head.sha }}
- name: Set head sha - name: Set head sha
if: github.event_name == 'pull_request' if: github.event_name == 'pull_request'
run: echo "HEAD_SHA=$(git show -s --format=%s $GITHUB_SHA | grep -o -P "(?<=Merge ).*(?= into)")" >> $GITHUB_ENV run: echo "HEAD_SHA=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
- name: Set base sha - name: Set base sha
if: github.event_name == 'pull_request' if: github.event_name == 'pull_request'
run: | run: |
@ -220,6 +219,74 @@ jobs:
[ -z "$TWINE_USERNAME" ] || echo "Uploading dev release to PyPi" [ -z "$TWINE_USERNAME" ] || echo "Uploading dev release to PyPi"
[ -z "$TWINE_USERNAME" ] || twine upload circuitpython-stubs/dist/* [ -z "$TWINE_USERNAME" ] || twine upload circuitpython-stubs/dist/*
build-windows:
runs-on: windows-2022
needs: scheduler
if: ${{ needs.scheduler.outputs.build-windows == 'True' }}
env:
CP_VERSION: ${{ needs.scheduler.outputs.cp-version }}
defaults:
run:
# We define a custom shell script here, although `msys2.cmd` does neither exist nor is it available in the PATH yet
shell: msys2 {0}
steps:
# We want to change the configuration of the git command that actions/checkout will be using
# (since it is not possible to set autocrlf through the action yet, see actions/checkout#226).
- run: git config --global core.autocrlf input
shell: bash
- name: Check python coding (cmd)
run: python -c "import sys, locale; print(sys.getdefaultencoding(), locale.getpreferredencoding(False))"
shell: cmd
# We use a JS Action, which calls the system terminal or other custom terminals directly, if required
- uses: msys2/setup-msys2@v2
with:
install: base-devel git wget unzip gcc python-pip
# The goal of this was to test how things worked when the default file encoding (locale.getpreferedencoding())
# was not UTF-8. However, msys2 python does use utf-8 as the preferred file encoding, and using actions/setup-python
# python3.8 gave a broken build, so we're not really testing what we wanted to test.
# However, commandline length limits are being tested so that does some good.
- name: Check python coding (msys2)
run: |
locale -v
which python; python --version
python -c "import sys, locale; print(sys.getdefaultencoding(), locale.getpreferredencoding(False))"
which python3; python3 --version
python3 -c "import sys, locale; print(sys.getdefaultencoding(), locale.getpreferredencoding(False))"
- name: Install dependencies
run: |
wget --no-verbose -O gcc-arm.zip https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-win32.zip
unzip -q -d /tmp gcc-arm.zip
tar -C /tmp/gcc-arm-none-* -cf - . | tar -C /usr/local -xf -
pip install wheel
# requirements_dev.txt doesn't install on windows. (with msys2 python)
# instead, pick a subset for what we want to do
pip install cascadetoml jinja2 typer click intelhex
# check that installed packages work....?
which python; python --version; python -c "import cascadetoml"
which python3; python3 --version; python3 -c "import cascadetoml"
- name: Set up repository
uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 1
- name: Set up submodules
uses: ./.github/actions/deps/submodules
- name: build mpy-cross
run: make -j2 -C mpy-cross
- name: build rp2040
run: make -j2 -C ports/raspberrypi BOARD=adafruit_feather_rp2040 TRANSLATION=de_DE
- name: build samd21
run: make -j2 -C ports/atmel-samd BOARD=feather_m0_express TRANSLATION=zh_Latn_pinyin
- name: build samd51
run: make -j2 -C ports/atmel-samd BOARD=feather_m4_express TRANSLATION=es
- name: build nrf
run: make -j2 -C ports/nrf BOARD=feather_nrf52840_express TRANSLATION=fr
- name: build stm
run: make -j2 -C ports/stm BOARD=feather_stm32f405_express TRANSLATION=pt_BR
# I gave up trying to do esp builds on windows when I saw
# ERROR: Platform MINGW64_NT-10.0-17763-x86_64 appears to be unsupported
# https://github.com/espressif/esp-idf/issues/7062
aarch: aarch:
needs: [scheduler, mpy-cross, tests] needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-aarch != '[]' }} if: ${{ needs.scheduler.outputs.boards-aarch != '[]' }}
@ -240,6 +307,16 @@ jobs:
boards: ${{ needs.scheduler.outputs.boards-arm }} boards: ${{ needs.scheduler.outputs.boards-arm }}
cp-version: ${{ needs.scheduler.outputs.cp-version }} cp-version: ${{ needs.scheduler.outputs.cp-version }}
atmel:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-atmel != '[]' }}
uses: ./.github/workflows/build-boards.yml
secrets: inherit
with:
platform: arm
boards: ${{ needs.scheduler.outputs.boards-atmel }}
cp-version: ${{ needs.scheduler.outputs.cp-version }}
esp: esp:
needs: [scheduler, mpy-cross, tests] needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-esp != '[]' }} if: ${{ needs.scheduler.outputs.boards-esp != '[]' }}
@ -250,16 +327,6 @@ jobs:
boards: ${{ needs.scheduler.outputs.boards-esp }} boards: ${{ needs.scheduler.outputs.boards-esp }}
cp-version: ${{ needs.scheduler.outputs.cp-version }} cp-version: ${{ needs.scheduler.outputs.cp-version }}
nrf:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-nrf != '[]' }}
uses: ./.github/workflows/build-boards.yml
secrets: inherit
with:
platform: nrf
boards: ${{ needs.scheduler.outputs.boards-nrf }}
cp-version: ${{ needs.scheduler.outputs.cp-version }}
riscv: riscv:
needs: [scheduler, mpy-cross, tests] needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-riscv != '[]' }} if: ${{ needs.scheduler.outputs.boards-riscv != '[]' }}
@ -269,13 +336,3 @@ jobs:
platform: riscv platform: riscv
boards: ${{ needs.scheduler.outputs.boards-riscv }} boards: ${{ needs.scheduler.outputs.boards-riscv }}
cp-version: ${{ needs.scheduler.outputs.cp-version }} cp-version: ${{ needs.scheduler.outputs.cp-version }}
rpi:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-rpi != '[]' }}
uses: ./.github/workflows/build-boards.yml
secrets: inherit
with:
platform: arm
boards: ${{ needs.scheduler.outputs.boards-rpi }}
cp-version: ${{ needs.scheduler.outputs.cp-version }}

View File

@ -1,111 +0,0 @@
name: windows port
on:
push:
pull_request:
paths:
- '.github/workflows/ports_windows.yml'
- 'extmod/**'
- 'lib/**'
- 'mpy-cross/**'
- 'ports/unix/**'
- 'ports/windows/**'
- 'py/**'
- 'requirements*.txt'
- 'tools/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
windows:
runs-on: windows-2022
defaults:
run:
# We define a custom shell script here, although `msys2.cmd` does neither exist nor is it available in the PATH yet
shell: msys2 {0}
steps:
# We want to change the configuration of the git command that actions/checkout will be using (since it is not possible to set autocrlf through the action yet, see actions/checkout#226).
- run: git config --global core.autocrlf input
shell: bash
- name: Check python coding (cmd)
run: python -c "import sys, locale; print(sys.getdefaultencoding(), locale.getpreferredencoding(False))"
shell: cmd
# We use a JS Action, which calls the system terminal or other custom terminals directly, if required
- uses: msys2/setup-msys2@v2
with:
update: true
install: base-devel git wget unzip gcc python-pip
# The goal of this was to test how things worked when the default file
# encoding (locale.getpreferedencoding()) was not UTF-8. However, msys2
# python does use utf-8 as the preferred file encoding, and using
# actions/setup-python python3.8 gave a broken build, so we're not really
# testing what we wanted to test.
#
# however, commandline length limits are being tested so that does some
# good.
- name: Check python coding (msys2)
run: |
locale -v
which python; python --version
python -c "import sys, locale; print(sys.getdefaultencoding(), locale.getpreferredencoding(False))"
which python3; python3 --version
python3 -c "import sys, locale; print(sys.getdefaultencoding(), locale.getpreferredencoding(False))"
- name: Install dependencies
run: |
wget --no-verbose -O gcc-arm.zip https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-win32.zip
unzip -q -d /tmp gcc-arm.zip
tar -C /tmp/gcc-arm-none-* -cf - . | tar -C /usr/local -xf -
pip install wheel
# requirements_dev.txt doesn't install on windows. (with msys2 python)
# instead, pick a subset for what we want to do
pip install cascadetoml jinja2 typer click intelhex
# check that installed packages work....?
which python; python --version; python -c "import cascadetoml"
which python3; python3 --version; python3 -c "import cascadetoml"
- name: Set up repository
uses: actions/checkout@v3
with:
submodules: false
fetch-depth: 1
- name: Set up submodules
uses: ./.github/actions/deps/submodules
with:
version: true
- name: build mpy-cross
run: make -j2 -C mpy-cross
- name: build rp2040
run: make -j2 -C ports/raspberrypi BOARD=adafruit_feather_rp2040 TRANSLATION=de_DE
- name: build samd21
run: make -j2 -C ports/atmel-samd BOARD=feather_m0_express TRANSLATION=zh_Latn_pinyin
- name: build samd51
run: make -j2 -C ports/atmel-samd BOARD=feather_m4_express TRANSLATION=es
- name: build nrf
run: make -j2 -C ports/nrf BOARD=feather_nrf52840_express TRANSLATION=fr
- name: build stm
run: make -j2 -C ports/stm BOARD=feather_stm32f405_express TRANSLATION=pt_BR
# I gave up trying to do esp32 builds on windows when I saw
# ERROR: Platform MINGW64_NT-10.0-17763-x86_64 appears to be unsupported
# https://github.com/espressif/esp-idf/issues/7062
#
# - name: prepare esp
# run: ports/espressif/esp-idf/install.bat
# shell: cmd
#
# - name: build esp
# run: . ports/espressif/esp-idf/export.sh && make -j2 -C ports/espressif BOARD=adafruit_metro_esp32s2

8
.gitmodules vendored
View File

@ -187,10 +187,6 @@
[submodule "frozen/Adafruit_CircuitPython_APDS9960"] [submodule "frozen/Adafruit_CircuitPython_APDS9960"]
path = frozen/Adafruit_CircuitPython_APDS9960 path = frozen/Adafruit_CircuitPython_APDS9960
url = https://github.com/adafruit/Adafruit_CircuitPython_APDS9960 url = https://github.com/adafruit/Adafruit_CircuitPython_APDS9960
[submodule "ports/broadcom/peripherals"]
path = ports/broadcom/peripherals
url = https://github.com/adafruit/broadcom-peripherals.git
branch = main-build
[submodule "rpi-firmware"] [submodule "rpi-firmware"]
path = ports/broadcom/firmware path = ports/broadcom/firmware
url = https://github.com/raspberrypi/rpi-firmware.git url = https://github.com/raspberrypi/rpi-firmware.git
@ -328,3 +324,7 @@
[submodule "frozen/Adafruit_CircuitPython_SSD1680"] [submodule "frozen/Adafruit_CircuitPython_SSD1680"]
path = frozen/Adafruit_CircuitPython_SSD1680 path = frozen/Adafruit_CircuitPython_SSD1680
url = https://github.com/adafruit/Adafruit_CircuitPython_SSD1680 url = https://github.com/adafruit/Adafruit_CircuitPython_SSD1680
[submodule "ports/broadcom/peripherals"]
path = ports/broadcom/peripherals
url = https://github.com/adafruit/broadcom-peripherals.git
branch = main-build

View File

@ -30,6 +30,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
msgstr "" msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2419,6 +2427,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -28,6 +28,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
msgstr "" msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2389,6 +2397,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -32,6 +32,14 @@ msgstr ""
"\n" "\n"
"Kód byl zastaven kvůli automatickému načtení. K načtení dojde brzy.\n" "Kód byl zastaven kvůli automatickému načtení. K načtení dojde brzy.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2406,6 +2414,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -31,6 +31,14 @@ msgstr ""
"\n" "\n"
"Code wurde durch automatisches Neuladen gestoppt. Wird bald neu geladen.\n" "Code wurde durch automatisches Neuladen gestoppt. Wird bald neu geladen.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2455,6 +2463,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -35,6 +35,14 @@ msgstr ""
"Ο κώδικας σταμάτησε λόγω της αυτόματης επαναφόρτωσης. Η επαναφόρτωση θα " "Ο κώδικας σταμάτησε λόγω της αυτόματης επαναφόρτωσης. Η επαναφόρτωση θα "
"γίνει σύντομα.\n" "γίνει σύντομα.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2414,6 +2422,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -34,6 +34,14 @@ msgstr ""
"\n" "\n"
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2414,6 +2422,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2023-02-20 03:39+0000\n" "PO-Revision-Date: 2023-02-23 17:53+0000\n"
"Last-Translator: Jose David M <jquintana202020@gmail.com>\n" "Last-Translator: Luis Ruiz San Segundo <luisan00@hotmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: es\n" "Language: es\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -34,6 +34,19 @@ msgstr ""
"\n" "\n"
"Código detenido por la auto-recarga. Recargando pronto.\n" "Código detenido por la auto-recarga. Recargando pronto.\n"
#: main.c
#, fuzzy
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
"\n"
"CIRCUITPY_PYSTACK_SIZE no válido\n"
"\n"
"\n"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -50,7 +63,7 @@ msgid ""
"Press reset to exit safe mode.\n" "Press reset to exit safe mode.\n"
msgstr "" msgstr ""
"\n" "\n"
"Presione reset para salir de safe mode.\n" "Presione reset para salir del modo seguro.\n"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
@ -58,7 +71,7 @@ msgid ""
"You are in safe mode because:\n" "You are in safe mode because:\n"
msgstr "" msgstr ""
"\n" "\n"
"Estas in safe mode porque:\n" "Estas en modo seguro porque:\n"
#: py/obj.c #: py/obj.c
msgid " File \"%q\"" msgid " File \"%q\""
@ -145,7 +158,7 @@ msgstr "%q está siendo utilizado"
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "%q index out of range" msgid "%q index out of range"
msgstr "%q indice fuera de rango" msgstr "%q índice fuera de rango"
#: shared-module/bitbangio/SPI.c #: shared-module/bitbangio/SPI.c
msgid "%q init failed" msgid "%q init failed"
@ -161,19 +174,19 @@ msgstr "%q es solamente de lectura en esta tarjeta"
#: py/argcheck.c shared-bindings/usb_hid/Device.c #: py/argcheck.c shared-bindings/usb_hid/Device.c
msgid "%q length must be %d" msgid "%q length must be %d"
msgstr "%q tamaño debe ser %d" msgstr "%q longitud debe ser %d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q length must be %d-%d" msgid "%q length must be %d-%d"
msgstr "%q tamaño debe ser %d-%d" msgstr "%q longitud debe ser %d-%d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q length must be <= %d" msgid "%q length must be <= %d"
msgstr "%q tamaño debe ser <= %d" msgstr "%q longitud debe ser <= %d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q length must be >= %d" msgid "%q length must be >= %d"
msgstr "%q tamaño debe ser >= %d" msgstr "%q longitud debe ser >= %d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q must be %d" msgid "%q must be %d"
@ -197,7 +210,7 @@ msgstr "%q debe ser >= %d"
#: shared-bindings/analogbufio/BufferedIn.c #: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'" msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr "%q debe ser un byte-matriz o matriz de tipo 'H' o 'B'" msgstr "%q debe ser un bytearray o array de tipo 'H' o 'B'"
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'" msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'"
@ -243,7 +256,7 @@ msgstr "%q() toma %d argumentos posicionales pero %d fueron dados"
#: shared-bindings/usb_hid/Device.c #: shared-bindings/usb_hid/Device.c
msgid "%q, %q, and %q must all be the same length" msgid "%q, %q, and %q must all be the same length"
msgstr "%q, %q, y %q deben tener el mismo largo" msgstr "%q, %q, y %q deben tener la misma longitud"
#: py/objint.c shared-bindings/storage/__init__.c #: py/objint.c shared-bindings/storage/__init__.c
msgid "%q=%q" msgid "%q=%q"
@ -349,7 +362,7 @@ msgstr "'=' alineación no permitida en el especificador string format"
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "'S' and 'O' are not supported format types" msgid "'S' and 'O' are not supported format types"
msgstr "'S' y 'O' no son compatibles con los tipos de formato" msgstr "'S' y 'O' no son tipos de formato soportados"
#: py/compile.c #: py/compile.c
msgid "'align' requires 1 argument" msgid "'align' requires 1 argument"
@ -423,7 +436,7 @@ msgstr "tipos de 64 bit"
#: ports/atmel-samd/common-hal/countio/Counter.c #: ports/atmel-samd/common-hal/countio/Counter.c
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c #: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
msgid "A hardware interrupt channel is already in use" msgid "A hardware interrupt channel is already in use"
msgstr "El canal EXTINT ya está siendo utilizado" msgstr "Un canal de interrupción por hardware ya está en uso"
#: ports/espressif/common-hal/analogio/AnalogIn.c #: ports/espressif/common-hal/analogio/AnalogIn.c
msgid "ADC2 is being used by WiFi" msgid "ADC2 is being used by WiFi"
@ -432,7 +445,7 @@ msgstr "ADC2 está siendo usado por WiFi"
#: shared-bindings/_bleio/Address.c shared-bindings/ipaddress/IPv4Address.c #: shared-bindings/_bleio/Address.c shared-bindings/ipaddress/IPv4Address.c
#, c-format #, c-format
msgid "Address must be %d bytes long" msgid "Address must be %d bytes long"
msgstr "La dirección debe tener %d bytes de largo" msgstr "La dirección debe tener %d bytes de longitud"
#: ports/espressif/common-hal/memorymap/AddressRange.c #: ports/espressif/common-hal/memorymap/AddressRange.c
msgid "Address range not allowed" msgid "Address range not allowed"
@ -446,7 +459,7 @@ msgstr "Todos los periféricos CAN están en uso"
#: ports/espressif/common-hal/i2ctarget/I2CTarget.c #: ports/espressif/common-hal/i2ctarget/I2CTarget.c
#: ports/nrf/common-hal/busio/I2C.c #: ports/nrf/common-hal/busio/I2C.c
msgid "All I2C peripherals are in use" msgid "All I2C peripherals are in use"
msgstr "Todos los periféricos I2C están siendo usados" msgstr "Todos los periféricos I2C están en uso"
#: ports/espressif/common-hal/countio/Counter.c #: ports/espressif/common-hal/countio/Counter.c
#: ports/espressif/common-hal/frequencyio/FrequencyIn.c #: ports/espressif/common-hal/frequencyio/FrequencyIn.c
@ -462,36 +475,36 @@ msgstr "Todos los FIFOs de RX en uso"
#: ports/espressif/common-hal/busio/SPI.c ports/nrf/common-hal/busio/SPI.c #: ports/espressif/common-hal/busio/SPI.c ports/nrf/common-hal/busio/SPI.c
msgid "All SPI peripherals are in use" msgid "All SPI peripherals are in use"
msgstr "Todos los periféricos SPI están siendo usados" msgstr "Todos los periféricos SPI están en uso"
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
msgid "All UART peripherals are in use" msgid "All UART peripherals are in use"
msgstr "Todos los periféricos UART están siendo usados" msgstr "Todos los periféricos UART están en uso"
#: ports/nrf/common-hal/countio/Counter.c #: ports/nrf/common-hal/countio/Counter.c
#: ports/nrf/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/rotaryio/IncrementalEncoder.c #: ports/nrf/common-hal/rotaryio/IncrementalEncoder.c
#: shared-bindings/pwmio/PWMOut.c #: shared-bindings/pwmio/PWMOut.c
msgid "All channels in use" msgid "All channels in use"
msgstr "Todos los canales esta en uso" msgstr "Todos los canales están en uso"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c #: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "All event channels in use" msgid "All event channels in use"
msgstr "Todos los canales de eventos estan siendo usados" msgstr "Todos los canales de eventos están en uso"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "All state machines in use" msgid "All state machines in use"
msgstr "Todas las máquinas de estado en uso" msgstr "Todas las máquinas de estado están en uso"
#: ports/atmel-samd/audio_dma.c #: ports/atmel-samd/audio_dma.c
msgid "All sync event channels in use" msgid "All sync event channels in use"
msgstr "" msgstr ""
"Todos los canales de eventos de sincronización (sync event channels) están " "Todos los canales de eventos de sincronización (sync event channels) están "
"siendo utilizados" "en uso"
#: shared-bindings/pwmio/PWMOut.c #: shared-bindings/pwmio/PWMOut.c
msgid "All timers for this pin are in use" msgid "All timers for this pin are in use"
msgstr "Todos los timers para este pin están siendo utilizados" msgstr "Todos los timers para este pin están en uso"
#: ports/atmel-samd/common-hal/_pew/PewPew.c #: ports/atmel-samd/common-hal/_pew/PewPew.c
#: ports/atmel-samd/common-hal/audioio/AudioOut.c #: ports/atmel-samd/common-hal/audioio/AudioOut.c
@ -560,7 +573,7 @@ msgstr "Tratando de localizar %d bloques"
#: ports/raspberrypi/audio_dma.c #: ports/raspberrypi/audio_dma.c
msgid "Audio conversion not implemented" msgid "Audio conversion not implemented"
msgstr "Conversión de audio no esta implementada" msgstr "Conversión de audio no está implementada"
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "AuthMode.OPEN is not used with password" msgid "AuthMode.OPEN is not used with password"
@ -579,12 +592,12 @@ msgid ""
"Auto-reload is on. Simply save files over USB to run them or enter REPL to " "Auto-reload is on. Simply save files over USB to run them or enter REPL to "
"disable.\n" "disable.\n"
msgstr "" msgstr ""
"Auto-reload habilitado. Simplemente guarda los archivos via USB para " "Auto-reload habilitado. Simplemente guarda los archivos vía USB para "
"ejecutarlos o entra al REPL para desabilitarlos.\n" "ejecutarlos o entra al REPL para deshabilitarlo.\n"
#: ports/espressif/common-hal/canio/CAN.c #: ports/espressif/common-hal/canio/CAN.c
msgid "Baudrate not supported by peripheral" msgid "Baudrate not supported by peripheral"
msgstr "El periférico no maneja el Baudrate" msgstr "Baudrate no soportado por el periférico"
#: shared-module/displayio/Display.c #: shared-module/displayio/Display.c
#: shared-module/framebufferio/FramebufferDisplay.c #: shared-module/framebufferio/FramebufferDisplay.c
@ -605,7 +618,7 @@ msgstr "Bits depth debe ser múltiplo de 8."
#: shared-bindings/bitmaptools/__init__.c #: shared-bindings/bitmaptools/__init__.c
msgid "Bitmap size and bits per value must match" msgid "Bitmap size and bits per value must match"
msgstr "El tamaño del mapa de bits y los bits por valor deben cotejar" msgstr "El tamaño del mapa de bits y los bits por valor deben coincidir"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "Boot device must be first (interface #0)." msgid "Boot device must be first (interface #0)."
@ -634,44 +647,43 @@ msgstr "El brillo no se puede ajustar"
#: shared-bindings/_bleio/UUID.c #: shared-bindings/_bleio/UUID.c
#, c-format #, c-format
msgid "Buffer + offset too small %d %d %d" msgid "Buffer + offset too small %d %d %d"
msgstr "Búfer + compensado muy pequeños %d %d %d" msgstr "Buffer + offset muy pequeños %d %d %d"
#: ports/raspberrypi/bindings/rp2pio/StateMachine.c #: ports/raspberrypi/bindings/rp2pio/StateMachine.c
msgid "Buffer elements must be 4 bytes long or less" msgid "Buffer elements must be 4 bytes long or less"
msgstr "" msgstr "Los elementos del buffer deben tener una longitud de 4 bytes o menos"
"Los elementos del búfer deben de ser de una longitud de 4 bytes o menos"
#: shared-bindings/framebufferio/FramebufferDisplay.c #: shared-bindings/framebufferio/FramebufferDisplay.c
msgid "Buffer is not a bytearray." msgid "Buffer is not a bytearray."
msgstr "Búfer no es un bytearray." msgstr "Buffer no es un bytearray."
#: ports/cxd56/common-hal/camera/Camera.c shared-bindings/displayio/Display.c #: ports/cxd56/common-hal/camera/Camera.c shared-bindings/displayio/Display.c
#: shared-bindings/framebufferio/FramebufferDisplay.c #: shared-bindings/framebufferio/FramebufferDisplay.c
msgid "Buffer is too small" msgid "Buffer is too small"
msgstr "Búfer es muy pequeño" msgstr "Buffer es muy pequeño"
#: ports/stm/common-hal/audiopwmio/PWMAudioOut.c #: ports/stm/common-hal/audiopwmio/PWMAudioOut.c
#, c-format #, c-format
msgid "Buffer length %d too big. It must be less than %d" msgid "Buffer length %d too big. It must be less than %d"
msgstr "Longitud del búfer %d es demasiado grande. Tiene que ser menor a %d" msgstr "La longitud del buffer %d es demasiado grande. Tiene que ser menor a %d"
#: ports/atmel-samd/common-hal/sdioio/SDCard.c #: ports/atmel-samd/common-hal/sdioio/SDCard.c
#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c #: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c
msgid "Buffer length must be a multiple of 512" msgid "Buffer length must be a multiple of 512"
msgstr "El tamaño del búfer debe ser múltiplo de 512" msgstr "El tamaño del buffer debe ser múltiplo de 512"
#: ports/stm/common-hal/sdioio/SDCard.c shared-bindings/floppyio/__init__.c #: ports/stm/common-hal/sdioio/SDCard.c shared-bindings/floppyio/__init__.c
msgid "Buffer must be a multiple of 512 bytes" msgid "Buffer must be a multiple of 512 bytes"
msgstr "fer deber ser un múltiplo de 512 bytes" msgstr "El buffer deber ser un múltiplo de 512 bytes"
#: shared-bindings/_bleio/PacketBuffer.c #: shared-bindings/_bleio/PacketBuffer.c
#, c-format #, c-format
msgid "Buffer too short by %d bytes" msgid "Buffer too short by %d bytes"
msgstr "Búfer muy corto por %d bytes" msgstr "Buffer muy corto por %d bytes"
#: ports/espressif/common-hal/imagecapture/ParallelImageCapture.c #: ports/espressif/common-hal/imagecapture/ParallelImageCapture.c
msgid "Buffers must be same size" msgid "Buffers must be same size"
msgstr "Búferes deben ser del mismo tamaño" msgstr "Los buffers deben ser del mismo tamaño"
#: ports/atmel-samd/common-hal/paralleldisplay/ParallelBus.c #: ports/atmel-samd/common-hal/paralleldisplay/ParallelBus.c
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c #: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
@ -758,7 +770,7 @@ msgstr ""
#: ports/espressif/common-hal/alarm/pin/PinAlarm.c #: ports/espressif/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot pull on input-only pin." msgid "Cannot pull on input-only pin."
msgstr "No puede hacer pull en un pin de entrada sola." msgstr "No puede hacer pull en un pin de solo entrada."
#: shared-bindings/audiobusio/PDMIn.c #: shared-bindings/audiobusio/PDMIn.c
msgid "Cannot record to a file" msgid "Cannot record to a file"
@ -1844,7 +1856,7 @@ msgstr ""
#: main.c #: main.c
msgid "Pretending to deep sleep until alarm, CTRL-C or file write.\n" msgid "Pretending to deep sleep until alarm, CTRL-C or file write.\n"
msgstr "" msgstr ""
"Pretendiendo ir a deep sleep hasta la alarma, CTRL-C or una escritura de " "Pretendiendo ir a deep sleep hasta la alarma, CTRL-C o una escritura de "
"archivo\n" "archivo\n"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
@ -2461,38 +2473,42 @@ msgstr "Usted presionó ambos botones al iniciar."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
msgid "You pressed button A at start up." msgid "You pressed button A at start up."
msgstr "Usted presionó el boton A al iniciar." msgstr "Usted presionó el botón A al iniciar."
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "You pressed the BOOT button at start up" msgid "You pressed the BOOT button at start up"
msgstr "Usted presionó el boton BOOT al iniciar" msgstr "Usted presionó el botón BOOT al iniciar"
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h #: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr "Presionaste el botón GPIO0 al inicio."
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr "Presionó el botón Rec al inicio."
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "Usted presionó el boton SW38 al iniciar." msgstr "Usted presionó el botón SW38 al iniciar."
#: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h #: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h
msgid "You pressed the VOLUME button at start up." msgid "You pressed the VOLUME button at start up."
msgstr "Usted presionó el boton de Volumén al iniciar." msgstr "Usted presionó el botón de volumen al iniciar."
#: ports/espressif/boards/m5stack_atom_echo/mpconfigboard.h #: ports/espressif/boards/m5stack_atom_echo/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_lite/mpconfigboard.h #: ports/espressif/boards/m5stack_atom_lite/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_matrix/mpconfigboard.h #: ports/espressif/boards/m5stack_atom_matrix/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_u/mpconfigboard.h #: ports/espressif/boards/m5stack_atom_u/mpconfigboard.h
msgid "You pressed the central button at start up." msgid "You pressed the central button at start up."
msgstr "Usted presionó el boton central al iniciar." msgstr "Usted presionó el botón central al iniciar."
#: ports/nrf/boards/aramcon2_badge/mpconfigboard.h #: ports/nrf/boards/aramcon2_badge/mpconfigboard.h
msgid "You pressed the left button at start up." msgid "You pressed the left button at start up."
msgstr "Usted presionó el boton izquierdo al iniciar." msgstr "Usted presionó el botón izquierdo al iniciar."
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "You pressed the reset button during boot." msgid "You pressed the reset button during boot."
msgstr "Usted presionó el boton izquierdo al iniciar." msgstr "Presionó el botón de reinicio durante el arranque."
#: supervisor/shared/micropython.c #: supervisor/shared/micropython.c
msgid "[truncated due to length]" msgid "[truncated due to length]"

View File

@ -29,6 +29,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
msgstr "" msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2409,6 +2417,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: 0.1\n" "Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2022-12-27 18:02+0000\n" "PO-Revision-Date: 2023-02-22 18:34+0000\n"
"Last-Translator: Blinka CircuitPython <limor@ladyada.net>\n" "Last-Translator: Neradoc <weblate@ri1.fr>\n"
"Language: fr\n" "Language: fr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.15.1-dev\n" "X-Generator: Weblate 4.16-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -34,6 +34,14 @@ msgstr ""
"Le code a été arrêté par l'actualisation automatique. Rechargement " "Le code a été arrêté par l'actualisation automatique. Rechargement "
"prochain.\n" "prochain.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -46,12 +54,16 @@ msgid ""
"\n" "\n"
"Press reset to exit safe mode.\n" "Press reset to exit safe mode.\n"
msgstr "" msgstr ""
"\n"
"Appuyer sur reset pour sortir du mode sûr.\n"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
"You are in safe mode because:\n" "You are in safe mode because:\n"
msgstr "" msgstr ""
"\n"
"Le mode sûr est actif:\n"
#: py/obj.c #: py/obj.c
msgid " File \"%q\"" msgid " File \"%q\""
@ -127,7 +139,7 @@ msgstr "Échec de %q : %d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q in %q must be of type %q, not %q" msgid "%q in %q must be of type %q, not %q"
msgstr "" msgstr "%q dans %q doit être de type %q, pas %q"
#: ports/espressif/common-hal/espulp/ULP.c #: ports/espressif/common-hal/espulp/ULP.c
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
@ -150,7 +162,7 @@ msgstr ""
#: ports/raspberrypi/common-hal/wifi/Radio.c #: ports/raspberrypi/common-hal/wifi/Radio.c
msgid "%q is read-only for this board" msgid "%q is read-only for this board"
msgstr "" msgstr "%q est en lecture seule sur cette carte"
#: py/argcheck.c shared-bindings/usb_hid/Device.c #: py/argcheck.c shared-bindings/usb_hid/Device.c
msgid "%q length must be %d" msgid "%q length must be %d"
@ -190,7 +202,7 @@ msgstr "%q doit être >= %d"
#: shared-bindings/analogbufio/BufferedIn.c #: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'" msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr "" msgstr "%q doit être un bytearray ou matrice de type 'H' ou 'B'"
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'" msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'"
@ -199,11 +211,11 @@ msgstr "%q doit être a bytearray ou array de type 'h', 'H', 'b', ou 'B'"
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c #: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/canio/CAN.c shared-bindings/digitalio/Pull.c #: shared-bindings/canio/CAN.c shared-bindings/digitalio/Pull.c
msgid "%q must be of type %q or %q, not %q" msgid "%q must be of type %q or %q, not %q"
msgstr "" msgstr "%q doit être de type %q ou %q, pas %q"
#: py/argcheck.c py/obj.c py/objstrunicode.c #: py/argcheck.c py/obj.c py/objstrunicode.c
msgid "%q must be of type %q, not %q" msgid "%q must be of type %q, not %q"
msgstr "" msgstr "%q doit être de type %q, pas %q"
#: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/busio/UART.c
msgid "%q must be power of 2" msgid "%q must be power of 2"
@ -228,7 +240,7 @@ msgstr "broche %q invalide"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c #: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero" msgid "%q step cannot be zero"
msgstr "" msgstr "le pas ne peut être zéro dans %q"
#: py/bc.c py/objnamedtuple.c #: py/bc.c py/objnamedtuple.c
msgid "%q() takes %d positional arguments but %d were given" msgid "%q() takes %d positional arguments but %d were given"
@ -429,7 +441,7 @@ msgstr "L'adresse doit être longue de %d octets"
#: ports/espressif/common-hal/memorymap/AddressRange.c #: ports/espressif/common-hal/memorymap/AddressRange.c
msgid "Address range not allowed" msgid "Address range not allowed"
msgstr "" msgstr "Plage d'adresses non autorisée"
#: ports/espressif/common-hal/canio/CAN.c #: ports/espressif/common-hal/canio/CAN.c
msgid "All CAN peripherals are in use" msgid "All CAN peripherals are in use"
@ -524,7 +536,7 @@ msgstr "Déjà à la recherche des réseaux wifi"
#: shared-module/os/getenv.c #: shared-module/os/getenv.c
#, c-format #, c-format
msgid "An error occurred while retrieving '%s':\n" msgid "An error occurred while retrieving '%s':\n"
msgstr "" msgstr "Erreur survenue en récupérant '%s':\n"
#: ports/stm/common-hal/audiopwmio/PWMAudioOut.c #: ports/stm/common-hal/audiopwmio/PWMAudioOut.c
msgid "Another PWMAudioOut is already active" msgid "Another PWMAudioOut is already active"
@ -921,7 +933,7 @@ msgstr ""
#: py/obj.c #: py/obj.c
msgid "During handling of the above exception, another exception occurred:" msgid "During handling of the above exception, another exception occurred:"
msgstr "" msgstr "Pendant la gestion de cette exception, un autre s'est produite:"
#: shared-bindings/aesio/aes.c #: shared-bindings/aesio/aes.c
msgid "ECB only operates on 16 bytes at a time" msgid "ECB only operates on 16 bytes at a time"
@ -950,7 +962,7 @@ msgstr "Erreur dans l'expression régulière"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "Error in safemode.py." msgid "Error in safemode.py."
msgstr "" msgstr "Erreur dans safemode.py."
#: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c #: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c
msgid "Error: Failure to bind" msgid "Error: Failure to bind"
@ -958,7 +970,7 @@ msgstr "Erreur : Impossible de lier"
#: shared-bindings/alarm/__init__.c #: shared-bindings/alarm/__init__.c
msgid "Expected a kind of %q" msgid "Expected a kind of %q"
msgstr "" msgstr "Argument de type %q attendu"
#: ports/espressif/common-hal/_bleio/Adapter.c #: ports/espressif/common-hal/_bleio/Adapter.c
#: ports/nrf/common-hal/_bleio/Adapter.c #: ports/nrf/common-hal/_bleio/Adapter.c
@ -1035,7 +1047,7 @@ msgstr "Le fichier existe"
#: shared-module/os/getenv.c #: shared-module/os/getenv.c
msgid "File not found" msgid "File not found"
msgstr "" msgstr "Fichier non trouvé"
#: ports/atmel-samd/common-hal/canio/Listener.c #: ports/atmel-samd/common-hal/canio/Listener.c
#: ports/espressif/common-hal/canio/Listener.c #: ports/espressif/common-hal/canio/Listener.c
@ -1123,12 +1135,12 @@ msgstr "Matériel utilisé, essayez d'autres broches"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "Heap allocation when VM not running." msgid "Heap allocation when VM not running."
msgstr "" msgstr "Allocation du tas en dehors de la MV."
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"Heap was corrupted because the stack was too small. Increase stack size." "Heap was corrupted because the stack was too small. Increase stack size."
msgstr "" msgstr "Tas corrompu parce que la pile était trop petite. Augmenter la pile."
#: extmod/vfs_posix_file.c py/objstringio.c #: extmod/vfs_posix_file.c py/objstringio.c
msgid "I/O operation on closed file" msgid "I/O operation on closed file"
@ -1141,7 +1153,7 @@ msgstr "Erreur d'initialisation I2C"
#: ports/raspberrypi/common-hal/busio/I2C.c #: ports/raspberrypi/common-hal/busio/I2C.c
#: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c #: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c
msgid "I2C peripheral in use" msgid "I2C peripheral in use"
msgstr "périphérique I2C utilisé" msgstr "Périphérique I2C utilisé"
#: shared-bindings/audiobusio/I2SOut.c #: shared-bindings/audiobusio/I2SOut.c
msgid "I2SOut not available" msgid "I2SOut not available"
@ -1258,7 +1270,7 @@ msgstr "Le minuteur du watchdog interne a expiré."
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "Interrupt error." msgid "Interrupt error."
msgstr "" msgstr "Erreur d'interruption."
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c #: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
msgid "Invalid %q" msgid "Invalid %q"
@ -1297,7 +1309,7 @@ msgstr "Bits par valeur invalides"
#: shared-module/os/getenv.c #: shared-module/os/getenv.c
#, c-format #, c-format
msgid "Invalid byte %.*s" msgid "Invalid byte %.*s"
msgstr "" msgstr "Octet invalide %.*s"
#: ports/atmel-samd/common-hal/imagecapture/ParallelImageCapture.c #: ports/atmel-samd/common-hal/imagecapture/ParallelImageCapture.c
#, c-format #, c-format
@ -1327,7 +1339,7 @@ msgstr "État invalide"
#: shared-module/os/getenv.c #: shared-module/os/getenv.c
msgid "Invalid unicode escape" msgid "Invalid unicode escape"
msgstr "" msgstr "Séquence unicode invalide"
#: shared-bindings/aesio/aes.c #: shared-bindings/aesio/aes.c
msgid "Key must be 16, 24, or 32 bytes long" msgid "Key must be 16, 24, or 32 bytes long"
@ -1335,7 +1347,7 @@ msgstr "La clé doit comporter 16, 24 ou 32 octets"
#: shared-module/os/getenv.c #: shared-module/os/getenv.c
msgid "Key not found" msgid "Key not found"
msgstr "" msgstr "Clé non trouvée"
#: shared-module/is31fl3741/FrameBuffer.c #: shared-module/is31fl3741/FrameBuffer.c
msgid "LED mappings must match display size" msgid "LED mappings must match display size"
@ -1448,7 +1460,7 @@ msgstr "Erreur NVS"
#: shared-bindings/socketpool/SocketPool.c #: shared-bindings/socketpool/SocketPool.c
msgid "Name or service not known" msgid "Name or service not known"
msgstr "" msgstr "Nom ou service inconnu"
#: py/qstr.c #: py/qstr.c
msgid "Name too long" msgid "Name too long"
@ -1693,7 +1705,7 @@ msgstr "Une seul %q autorisée en sommeil profond."
#: ports/espressif/common-hal/espulp/ULPAlarm.c #: ports/espressif/common-hal/espulp/ULPAlarm.c
msgid "Only one %q can be set." msgid "Only one %q can be set."
msgstr "" msgstr "Un seul %q peut être défini."
#: ports/espressif/common-hal/i2ctarget/I2CTarget.c #: ports/espressif/common-hal/i2ctarget/I2CTarget.c
#: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c #: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c
@ -1729,7 +1741,7 @@ msgstr "Timeout de l'opération"
#: ports/raspberrypi/common-hal/mdns/Server.c #: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Out of MDNS service slots" msgid "Out of MDNS service slots"
msgstr "" msgstr "À cours de services MDNS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
msgid "Out of memory" msgid "Out of memory"
@ -1865,7 +1877,7 @@ msgstr "Taille du programme invalide"
#: ports/espressif/common-hal/espulp/ULP.c #: ports/espressif/common-hal/espulp/ULP.c
msgid "Program too long" msgid "Program too long"
msgstr "" msgstr "Programme trop long"
#: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output." msgid "Pull not used when direction is output."
@ -2047,7 +2059,7 @@ msgstr "Canal stéréo droit doit être sur le canal PWM B"
#: ports/raspberrypi/common-hal/wifi/Radio.c #: ports/raspberrypi/common-hal/wifi/Radio.c
msgid "Stopping AP is not supported." msgid "Stopping AP is not supported."
msgstr "" msgstr "Stopper n'est pas supporté."
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin" msgid "Supply at least one UART pin"
@ -2067,11 +2079,11 @@ msgstr "Délais de lecture de température dépassée"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "The `microcontroller` module was used to boot into safe mode." msgid "The `microcontroller` module was used to boot into safe mode."
msgstr "" msgstr "Le module microcontroller a été utilisé pour démarrer en mode sûr."
#: py/obj.c #: py/obj.c
msgid "The above exception was the direct cause of the following exception:" msgid "The above exception was the direct cause of the following exception:"
msgstr "" msgstr "L'exception précédente est la cause directe de l'exception suivante:"
#: shared-bindings/rgbmatrix/RGBMatrix.c #: shared-bindings/rgbmatrix/RGBMatrix.c
msgid "The length of rgb_pins must be 6, 12, 18, 24, or 30" msgid "The length of rgb_pins must be 6, 12, 18, 24, or 30"
@ -2079,7 +2091,7 @@ msgstr "La taille de rgb_pins doit être 6, 12, 18, 24 ou 30"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "The power dipped. Make sure you are providing enough power." msgid "The power dipped. Make sure you are providing enough power."
msgstr "" msgstr "La puissance a chu. Assurez vous de fournir assez de puissance."
#: shared-module/audiomixer/MixerVoice.c #: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's" msgid "The sample's bits_per_sample does not match the mixer's"
@ -2100,7 +2112,7 @@ msgstr "Le signe de l'échantillon ne correspond pas à celui du mixer"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "Third-party firmware fatal error." msgid "Third-party firmware fatal error."
msgstr "" msgstr "Erreur fatale de logiciel système tierce partie."
#: shared-module/imagecapture/ParallelImageCapture.c #: shared-module/imagecapture/ParallelImageCapture.c
msgid "This microcontroller does not support continuous capture." msgid "This microcontroller does not support continuous capture."
@ -2182,7 +2194,7 @@ msgstr "Initialisation UART"
#: ports/raspberrypi/common-hal/busio/UART.c #: ports/raspberrypi/common-hal/busio/UART.c
msgid "UART peripheral in use" msgid "UART peripheral in use"
msgstr "" msgstr "Périphérique UART utilisé"
#: ports/stm/common-hal/busio/UART.c #: ports/stm/common-hal/busio/UART.c
msgid "UART re-init" msgid "UART re-init"
@ -2237,7 +2249,7 @@ msgstr "Impossible d'allouer des tampons pour une conversion signée"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "Unable to allocate the heap." msgid "Unable to allocate the heap."
msgstr "" msgstr "Impossible d'allouer le tas."
#: ports/espressif/common-hal/busio/I2C.c #: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock" msgid "Unable to create lock"
@ -2268,7 +2280,7 @@ msgstr "Impossible de lancer la requête mDNS"
#: shared-bindings/memorymap/AddressRange.c #: shared-bindings/memorymap/AddressRange.c
msgid "Unable to write to address." msgid "Unable to write to address."
msgstr "" msgstr "L'écriture a échoué."
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "Unable to write to nvm." msgid "Unable to write to nvm."
@ -2437,15 +2449,15 @@ msgstr "Wi-Fi : "
#: ports/raspberrypi/common-hal/wifi/Radio.c #: ports/raspberrypi/common-hal/wifi/Radio.c
msgid "Wifi is in access point mode." msgid "Wifi is in access point mode."
msgstr "" msgstr "Wifi en mode point d'accès."
#: ports/raspberrypi/common-hal/wifi/Radio.c #: ports/raspberrypi/common-hal/wifi/Radio.c
msgid "Wifi is in station mode." msgid "Wifi is in station mode."
msgstr "" msgstr "Wifi en mode station."
#: ports/raspberrypi/common-hal/wifi/Radio.c #: ports/raspberrypi/common-hal/wifi/Radio.c
msgid "Wifi is not enabled" msgid "Wifi is not enabled"
msgstr "" msgstr "Le wifi n'est pas activé"
#: main.c #: main.c
msgid "Woken up by alarm.\n" msgid "Woken up by alarm.\n"
@ -2461,48 +2473,52 @@ msgstr "Écritures non supporté vers les Characteristic"
#: ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h #: ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h
#: ports/atmel-samd/boards/meowmeow/mpconfigboard.h #: ports/atmel-samd/boards/meowmeow/mpconfigboard.h
msgid "You pressed both buttons at start up." msgid "You pressed both buttons at start up."
msgstr "" msgstr "Vous avez appuyé les deux boutons au démarrage."
#: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
msgid "You pressed button A at start up." msgid "You pressed button A at start up."
msgstr "" msgstr "Vous avez appuyé le bouton A au démarrage."
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "You pressed the BOOT button at start up" msgid "You pressed the BOOT button at start up"
msgstr "" msgstr "Vous avez appuyé le bouton BOOT au démarrage"
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h #: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "Vous avez appuyé le bouton GPIO0 au démarrage."
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr "Vous avez appuyé le bouton SW38 au démarrage."
#: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h #: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h
msgid "You pressed the VOLUME button at start up." msgid "You pressed the VOLUME button at start up."
msgstr "" msgstr "Vous avez appuyé le bouton VOLUME au démarrage."
#: ports/espressif/boards/m5stack_atom_echo/mpconfigboard.h #: ports/espressif/boards/m5stack_atom_echo/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_lite/mpconfigboard.h #: ports/espressif/boards/m5stack_atom_lite/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_matrix/mpconfigboard.h #: ports/espressif/boards/m5stack_atom_matrix/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_u/mpconfigboard.h #: ports/espressif/boards/m5stack_atom_u/mpconfigboard.h
msgid "You pressed the central button at start up." msgid "You pressed the central button at start up."
msgstr "" msgstr "Vous avez appuyé le bouton central au démarrage."
#: ports/nrf/boards/aramcon2_badge/mpconfigboard.h #: ports/nrf/boards/aramcon2_badge/mpconfigboard.h
msgid "You pressed the left button at start up." msgid "You pressed the left button at start up."
msgstr "" msgstr "Vous avez appuyé le bouton gauche au démarrage."
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "You pressed the reset button during boot." msgid "You pressed the reset button during boot."
msgstr "" msgstr "Vous avez appuyé le bouton reset au démarrage."
#: supervisor/shared/micropython.c #: supervisor/shared/micropython.c
msgid "[truncated due to length]" msgid "[truncated due to length]"
msgstr "" msgstr "[taille limite atteinte]"
#: py/objtype.c #: py/objtype.c
msgid "__init__() should return None" msgid "__init__() should return None"
@ -2575,7 +2591,7 @@ msgstr "la tableau à trop de dimensions"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "array is too big" msgid "array is too big"
msgstr "" msgstr "matrice trop grande"
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/memorymap/AddressRange.c shared-bindings/nvm/ByteArray.c #: shared-bindings/memorymap/AddressRange.c shared-bindings/nvm/ByteArray.c
@ -2802,7 +2818,7 @@ msgstr "attribut non modifiable"
#: py/runtime.c #: py/runtime.c
msgid "can't set attribute '%q'" msgid "can't set attribute '%q'"
msgstr "" msgstr "attribut '%q' non modifiable"
#: py/emitnative.c #: py/emitnative.c
msgid "can't store '%q'" msgid "can't store '%q'"
@ -3068,6 +3084,8 @@ msgid ""
"espcamera.Camera requires reserved PSRAM to be configured. See the " "espcamera.Camera requires reserved PSRAM to be configured. See the "
"documentation for instructions." "documentation for instructions."
msgstr "" msgstr ""
"espcamera.Camera a besoin de PSRAM réservée. Voir la documentation pour les "
"instructions."
#: py/runtime.c #: py/runtime.c
msgid "exceptions must derive from BaseException" msgid "exceptions must derive from BaseException"
@ -3285,7 +3303,7 @@ msgstr "l'index est hors limites"
#: shared-bindings/_pixelmap/PixelMap.c #: shared-bindings/_pixelmap/PixelMap.c
msgid "index must be tuple or int" msgid "index must be tuple or int"
msgstr "" msgstr "l'index doit être un tuple ou entier"
#: extmod/ulab/code/numpy/numerical.c extmod/ulab/code/ulab_tools.c #: extmod/ulab/code/numpy/numerical.c extmod/ulab/code/ulab_tools.c
#: ports/espressif/common-hal/pulseio/PulseIn.c #: ports/espressif/common-hal/pulseio/PulseIn.c
@ -3671,7 +3689,7 @@ msgstr "compte de décalage négatif"
#: shared-bindings/_pixelmap/PixelMap.c #: shared-bindings/_pixelmap/PixelMap.c
msgid "nested index must be int" msgid "nested index must be int"
msgstr "" msgstr "sous index doit être entier"
#: shared-module/sdcardio/SDCard.c #: shared-module/sdcardio/SDCard.c
msgid "no SD card" msgid "no SD card"
@ -3843,7 +3861,7 @@ msgstr "seul bit_depth = 16 est pris en charge"
#: ports/stm/common-hal/audiobusio/PDMIn.c #: ports/stm/common-hal/audiobusio/PDMIn.c
msgid "only mono is supported" msgid "only mono is supported"
msgstr "" msgstr "seul mono est supporté"
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/numpy/create.c
msgid "only ndarrays can be concatenated" msgid "only ndarrays can be concatenated"
@ -3851,7 +3869,7 @@ msgstr ""
#: ports/stm/common-hal/audiobusio/PDMIn.c #: ports/stm/common-hal/audiobusio/PDMIn.c
msgid "only oversample=64 is supported" msgid "only oversample=64 is supported"
msgstr "" msgstr "seul oversample=64 supporté"
#: ports/nrf/common-hal/audiobusio/PDMIn.c #: ports/nrf/common-hal/audiobusio/PDMIn.c
#: ports/stm/common-hal/audiobusio/PDMIn.c #: ports/stm/common-hal/audiobusio/PDMIn.c

View File

@ -28,6 +28,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
msgstr "" msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2391,6 +2399,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -31,6 +31,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
msgstr "" msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2416,6 +2424,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -34,6 +34,14 @@ msgstr ""
"\n" "\n"
"オートリロードでコード実行は中止された。まもなくリロードする。\n" "オートリロードでコード実行は中止された。まもなくリロードする。\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2408,6 +2416,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -29,6 +29,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
msgstr "" msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2395,6 +2403,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -28,6 +28,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
msgstr "" msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2418,6 +2426,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -30,6 +30,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
msgstr "" msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2399,6 +2407,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2023-02-20 03:39+0000\n" "PO-Revision-Date: 2023-02-23 17:53+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n" "Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: pt_BR\n" "Language: pt_BR\n"
@ -32,6 +32,18 @@ msgstr ""
"\n" "\n"
"O código parou pela recarga automática. Recarregando em breve.\n" "O código parou pela recarga automática. Recarregando em breve.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
"\n"
"CIRCUITPY_PYSTACK_SIZE inválido\n"
"\n"
"\n"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2466,7 +2478,11 @@ msgstr "Você pressionou o botão BOOT na inicialização"
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h #: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr "Você pressionou o botão GPIO0 durante a inicialização."
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr "Você pressionou o botão Rec durante a inicialização."
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."

View File

@ -34,6 +34,14 @@ msgstr ""
"\n" "\n"
"Программа остановлена автоматической перезагрузкой. Скоро перезагрузка.\n" "Программа остановлена автоматической перезагрузкой. Скоро перезагрузка.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2454,6 +2462,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2023-02-20 03:39+0000\n" "PO-Revision-Date: 2023-02-23 17:53+0000\n"
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n" "Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: sv\n" "Language: sv\n"
@ -32,6 +32,18 @@ msgstr ""
"\n" "\n"
"Koden stoppades av automatisk laddning. Omladdning sker strax.\n" "Koden stoppades av automatisk laddning. Omladdning sker strax.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
"\n"
"Ogiltig CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\n"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2439,7 +2451,11 @@ msgstr "Du tryckte ner BOOT-knappen vid start"
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h #: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr "Du tryckte på GPIO0-knappen vid start."
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr "Du tryckte ned Rec-knappen vid start."
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."

View File

@ -34,6 +34,14 @@ msgstr ""
"Program otomatik yeniden yükleme tarafından durduruldu. Birazdan tekrar " "Program otomatik yeniden yükleme tarafından durduruldu. Birazdan tekrar "
"yüklenecek.\n" "yüklenecek.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2413,6 +2421,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

View File

@ -34,6 +34,14 @@ msgstr ""
"dài mǎ yīn zì dòng chóng xīn jiā zǎi ér tíng zhǐ. jí jiāng chóng xīn jiā " "dài mǎ yīn zì dòng chóng xīn jiā zǎi ér tíng zhǐ. jí jiāng chóng xīn jiā "
"zǎi.\n" "zǎi.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
"\n" "\n"
@ -2439,6 +2447,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up." msgid "You pressed the GPIO0 button at start up."
msgstr "" msgstr ""
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h #: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up." msgid "You pressed the SW38 button at start up."
msgstr "" msgstr ""

78
main.c
View File

@ -122,8 +122,8 @@
uint8_t value_out = 0; uint8_t value_out = 0;
#endif #endif
#if MICROPY_ENABLE_PYSTACK #if MICROPY_ENABLE_PYSTACK && CIRCUITPY_OS_GETENV
static size_t PLACE_IN_DTCM_BSS(_pystack[CIRCUITPY_PYSTACK_SIZE / sizeof(size_t)]); #include "shared-module/os/__init__.h"
#endif #endif
static void reset_devices(void) { static void reset_devices(void) {
@ -132,7 +132,32 @@ static void reset_devices(void) {
#endif #endif
} }
STATIC void start_mp(supervisor_allocation *heap) { #if MICROPY_ENABLE_PYSTACK
STATIC supervisor_allocation *allocate_pystack(safe_mode_t safe_mode) {
mp_int_t pystack_size = CIRCUITPY_PYSTACK_SIZE;
#if CIRCUITPY_OS_GETENV && CIRCUITPY_SETTABLE_PYSTACK
// Fetch value if exists from settings.toml
// Leaves size to build default on any failure
if (safe_mode == SAFE_MODE_NONE || safe_mode == SAFE_MODE_USER) {
(void)common_hal_os_getenv_int("CIRCUITPY_PYSTACK_SIZE", &pystack_size);
// Check if value is valid
pystack_size = pystack_size - pystack_size % sizeof(size_t); // Round down to multiple of 4.
if ((pystack_size < 384) || (pystack_size > 900000)) {
serial_write_compressed(translate("\nInvalid CIRCUITPY_PYSTACK_SIZE\n\n\r"));
pystack_size = CIRCUITPY_PYSTACK_SIZE; // Reset
}
}
#endif
supervisor_allocation *pystack = allocate_memory(pystack_size, false, false);
if (pystack == NULL) {
serial_write_compressed(translate("\nInvalid CIRCUITPY_PYSTACK_SIZE\n\n\r"));
pystack = allocate_memory(CIRCUITPY_PYSTACK_SIZE, false, false);
}
return pystack;
}
#endif
STATIC void start_mp(supervisor_allocation *heap, supervisor_allocation *pystack) {
supervisor_workflow_reset(); supervisor_workflow_reset();
// Stack limit should be less than real stack size, so we have a chance // Stack limit should be less than real stack size, so we have a chance
@ -160,7 +185,7 @@ STATIC void start_mp(supervisor_allocation *heap) {
readline_init0(); readline_init0();
#if MICROPY_ENABLE_PYSTACK #if MICROPY_ENABLE_PYSTACK
mp_pystack_init(_pystack, _pystack + (sizeof(_pystack) / sizeof(size_t))); mp_pystack_init(pystack->ptr, pystack->ptr + get_allocation_length(pystack) / sizeof(size_t));
#endif #endif
#if MICROPY_ENABLE_GC #if MICROPY_ENABLE_GC
@ -264,7 +289,7 @@ STATIC void count_strn(void *data, const char *str, size_t len) {
*(size_t *)data += len; *(size_t *)data += len;
} }
STATIC void cleanup_after_vm(supervisor_allocation *heap, mp_obj_t exception) { STATIC void cleanup_after_vm(supervisor_allocation *heap, supervisor_allocation *pystack, mp_obj_t exception) {
// Get the traceback of any exception from this run off the heap. // Get the traceback of any exception from this run off the heap.
// MP_OBJ_SENTINEL means "this run does not contribute to traceback storage, don't touch it" // MP_OBJ_SENTINEL means "this run does not contribute to traceback storage, don't touch it"
// MP_OBJ_NULL (=0) means "this run completed successfully, clear any stored traceback" // MP_OBJ_NULL (=0) means "this run completed successfully, clear any stored traceback"
@ -345,6 +370,9 @@ STATIC void cleanup_after_vm(supervisor_allocation *heap, mp_obj_t exception) {
filesystem_flush(); filesystem_flush();
stop_mp(); stop_mp();
free_memory(heap); free_memory(heap);
#if MICROPY_ENABLE_PYSTACK
free_memory(pystack);
#endif
supervisor_move_memory(); supervisor_move_memory();
// Let the workflows know we've reset in case they want to restart. // Let the workflows know we've reset in case they want to restart.
@ -399,10 +427,12 @@ STATIC bool run_code_py(safe_mode_t safe_mode, bool *simulate_reset) {
}; };
#endif #endif
supervisor_allocation *pystack = NULL;
#if MICROPY_ENABLE_PYSTACK
pystack = allocate_pystack(safe_mode);
#endif
supervisor_allocation *heap = allocate_remaining_memory(); supervisor_allocation *heap = allocate_remaining_memory();
start_mp(heap, pystack);
// Prepare the VM state.
start_mp(heap);
#if CIRCUITPY_USB #if CIRCUITPY_USB
usb_setup_with_vm(); usb_setup_with_vm();
@ -450,7 +480,7 @@ STATIC bool run_code_py(safe_mode_t safe_mode, bool *simulate_reset) {
// Finished executing python code. Cleanup includes filesystem flush and a board reset. // Finished executing python code. Cleanup includes filesystem flush and a board reset.
cleanup_after_vm(heap, _exec_result.exception); cleanup_after_vm(heap, pystack, _exec_result.exception);
_exec_result.exception = NULL; _exec_result.exception = NULL;
// If a new next code file was set, that is a reason to keep it (obviously). Stuff this into // If a new next code file was set, that is a reason to keep it (obviously). Stuff this into
@ -739,8 +769,12 @@ STATIC void __attribute__ ((noinline)) run_safemode_py(safe_mode_t safe_mode) {
return; return;
} }
supervisor_allocation *pystack = NULL;
#if MICROPY_ENABLE_PYSTACK
pystack = allocate_pystack(safe_mode);
#endif
supervisor_allocation *heap = allocate_remaining_memory(); supervisor_allocation *heap = allocate_remaining_memory();
start_mp(heap); start_mp(heap, pystack);
static const char *const safemode_py_filenames[] = {"safemode.py", "safemode.txt"}; static const char *const safemode_py_filenames[] = {"safemode.py", "safemode.txt"};
maybe_run_list(safemode_py_filenames, MP_ARRAY_SIZE(safemode_py_filenames)); maybe_run_list(safemode_py_filenames, MP_ARRAY_SIZE(safemode_py_filenames));
@ -751,7 +785,7 @@ STATIC void __attribute__ ((noinline)) run_safemode_py(safe_mode_t safe_mode) {
set_safe_mode(SAFE_MODE_SAFEMODE_PY_ERROR); set_safe_mode(SAFE_MODE_SAFEMODE_PY_ERROR);
} }
cleanup_after_vm(heap, _exec_result.exception); cleanup_after_vm(heap, pystack, _exec_result.exception);
_exec_result.exception = NULL; _exec_result.exception = NULL;
} }
#endif #endif
@ -772,9 +806,12 @@ STATIC void __attribute__ ((noinline)) run_boot_py(safe_mode_t safe_mode) {
// Do USB setup even if boot.py is not run. // Do USB setup even if boot.py is not run.
supervisor_allocation *pystack = NULL;
#if MICROPY_ENABLE_PYSTACK
pystack = allocate_pystack(safe_mode);
#endif
supervisor_allocation *heap = allocate_remaining_memory(); supervisor_allocation *heap = allocate_remaining_memory();
start_mp(heap, pystack);
start_mp(heap);
#if CIRCUITPY_USB #if CIRCUITPY_USB
// Set up default USB values after boot.py VM starts but before running boot.py. // Set up default USB values after boot.py VM starts but before running boot.py.
@ -860,7 +897,7 @@ STATIC void __attribute__ ((noinline)) run_boot_py(safe_mode_t safe_mode) {
port_post_boot_py(true); port_post_boot_py(true);
cleanup_after_vm(heap, _exec_result.exception); cleanup_after_vm(heap, pystack, _exec_result.exception);
_exec_result.exception = NULL; _exec_result.exception = NULL;
port_post_boot_py(false); port_post_boot_py(false);
@ -871,12 +908,16 @@ STATIC void __attribute__ ((noinline)) run_boot_py(safe_mode_t safe_mode) {
#endif #endif
} }
STATIC int run_repl(void) { STATIC int run_repl(safe_mode_t safe_mode) {
int exit_code = PYEXEC_FORCED_EXIT; int exit_code = PYEXEC_FORCED_EXIT;
stack_resize(); stack_resize();
filesystem_flush(); filesystem_flush();
supervisor_allocation *pystack = NULL;
#if MICROPY_ENABLE_PYSTACK
pystack = allocate_pystack(safe_mode);
#endif
supervisor_allocation *heap = allocate_remaining_memory(); supervisor_allocation *heap = allocate_remaining_memory();
start_mp(heap); start_mp(heap, pystack);
#if CIRCUITPY_USB #if CIRCUITPY_USB
usb_setup_with_vm(); usb_setup_with_vm();
@ -919,7 +960,7 @@ STATIC int run_repl(void) {
exit_code = PYEXEC_DEEP_SLEEP; exit_code = PYEXEC_DEEP_SLEEP;
} }
#endif #endif
cleanup_after_vm(heap, MP_OBJ_SENTINEL); cleanup_after_vm(heap, pystack, MP_OBJ_SENTINEL);
// Also reset bleio. The above call omits it in case workflows should continue. In this case, // Also reset bleio. The above call omits it in case workflows should continue. In this case,
// we're switching straight to another VM so we want to reset. // we're switching straight to another VM so we want to reset.
@ -938,6 +979,7 @@ STATIC int run_repl(void) {
} }
int __attribute__((used)) main(void) { int __attribute__((used)) main(void) {
// initialise the cpu and peripherals // initialise the cpu and peripherals
set_safe_mode(port_init()); set_safe_mode(port_init());
@ -1038,7 +1080,7 @@ int __attribute__((used)) main(void) {
bool simulate_reset = true; bool simulate_reset = true;
for (;;) { for (;;) {
if (!skip_repl) { if (!skip_repl) {
exit_code = run_repl(); exit_code = run_repl(get_safe_mode());
supervisor_set_run_reason(RUN_REASON_REPL_RELOAD); supervisor_set_run_reason(RUN_REASON_REPL_RELOAD);
} }
if (exit_code == PYEXEC_FORCED_EXIT) { if (exit_code == PYEXEC_FORCED_EXIT) {

View File

@ -20,11 +20,13 @@ CIRCUITPY_BLEIO_HCI = 0
CIRCUITPY_DISPLAYIO = 0 CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_FLOPPYIO = 0 CIRCUITPY_FLOPPYIO = 0
CIRCUITPY_FRAMEBUFFERIO = 0 CIRCUITPY_FRAMEBUFFERIO = 0
CIRCUITPY_PIXELMAP = 0
CIRCUITPY_GETPASS = 0 CIRCUITPY_GETPASS = 0
CIRCUITPY_KEYPAD = 0 CIRCUITPY_KEYPAD = 0
CIRCUITPY_MSGPACK = 0 CIRCUITPY_MSGPACK = 0
CIRCUITPY_PS2IO = 0 CIRCUITPY_PS2IO = 0
CIRCUITPY_RGBMATRIX = 0 CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_RAINBOWIO = 0
CIRCUITPY_ROTARYIO = 0 CIRCUITPY_ROTARYIO = 0
CIRCUITPY_TOUCHIO = 0 CIRCUITPY_TOUCHIO = 0
CIRCUITPY_USB_HID = 0 CIRCUITPY_USB_HID = 0

View File

@ -98,7 +98,7 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
self->sda_pin = sda; self->sda_pin = sda;
self->scl_pin = scl; self->scl_pin = scl;
uint32_t source_clock = vcmailbox_get_clock_rate_measured(VCMAILBOX_CLOCK_CORE); uint32_t source_clock = vcmailbox_get_clock_rate(VCMAILBOX_CLOCK_CORE);
uint16_t clock_divider = source_clock / frequency; uint16_t clock_divider = source_clock / frequency;
self->peripheral->DIV_b.CDIV = clock_divider; self->peripheral->DIV_b.CDIV = clock_divider;

View File

@ -87,6 +87,8 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
mp_raise_NotImplementedError(translate("Half duplex SPI is not implemented")); mp_raise_NotImplementedError(translate("Half duplex SPI is not implemented"));
} }
// BCM_VERSION != 2711 have 3 SPI but as listed in peripherals/gen/pins.c two are on
// index 0, once one index 0 SPI is found the other will throw an invalid_pins error.
for (size_t i = 0; i < NUM_SPI; i++) { for (size_t i = 0; i < NUM_SPI; i++) {
if (spi_in_use[i]) { if (spi_in_use[i]) {
continue; continue;
@ -157,6 +159,7 @@ void common_hal_busio_spi_deinit(busio_spi_obj_t *self) {
common_hal_reset_pin(self->MOSI); common_hal_reset_pin(self->MOSI);
common_hal_reset_pin(self->MISO); common_hal_reset_pin(self->MISO);
self->clock = NULL; self->clock = NULL;
spi_in_use[self->index] = false;
if (self->index == 1 || if (self->index == 1 ||
self->index == 2) { self->index == 2) {
@ -180,7 +183,7 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
if (self->index == 1 || self->index == 2) { if (self->index == 1 || self->index == 2) {
SPI1_Type *p = aux_spi[self->index]; SPI1_Type *p = aux_spi[self->index];
uint32_t source_clock = vcmailbox_get_clock_rate_measured(VCMAILBOX_CLOCK_CORE); uint32_t source_clock = vcmailbox_get_clock_rate(VCMAILBOX_CLOCK_CORE);
uint16_t clock_divider = source_clock / baudrate; uint16_t clock_divider = source_clock / baudrate;
if (source_clock % baudrate > 0) { if (source_clock % baudrate > 0) {
clock_divider += 2; clock_divider += 2;
@ -198,7 +201,7 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
SPI0_Type *p = spi[self->index]; SPI0_Type *p = spi[self->index];
p->CS = polarity << SPI0_CS_CPOL_Pos | p->CS = polarity << SPI0_CS_CPOL_Pos |
phase << SPI0_CS_CPHA_Pos; phase << SPI0_CS_CPHA_Pos;
uint32_t source_clock = vcmailbox_get_clock_rate_measured(VCMAILBOX_CLOCK_CORE); uint32_t source_clock = vcmailbox_get_clock_rate(VCMAILBOX_CLOCK_CORE);
uint16_t clock_divider = source_clock / baudrate; uint16_t clock_divider = source_clock / baudrate;
if (source_clock % baudrate > 0) { if (source_clock % baudrate > 0) {
clock_divider += 2; clock_divider += 2;

View File

@ -124,7 +124,7 @@ void pl011_IRQHandler(uint8_t index) {
// Clear the interrupt in case we weren't able to clear it by emptying the // Clear the interrupt in case we weren't able to clear it by emptying the
// FIFO. (This won't clear the FIFO.) // FIFO. (This won't clear the FIFO.)
ARM_UART_PL011_Type *pl011 = uart[index]; ARM_UART_PL011_Type *pl011 = uart[index];
pl011->ICR = UART0_ICR_RXIC_Msk; pl011->ICR = ARM_UART_PL011_ICR_RXIC_Msk;
} }
void UART0_IRQHandler(void) { void UART0_IRQHandler(void) {
@ -258,31 +258,31 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
common_hal_busio_uart_set_baudrate(self, baudrate); common_hal_busio_uart_set_baudrate(self, baudrate);
uint32_t line_control = UART0_LCR_H_FEN_Msk; uint32_t line_control = ARM_UART_PL011_LCR_H_FEN_Msk;
line_control |= (bits - 5) << UART0_LCR_H_WLEN_Pos; line_control |= (bits - 5) << ARM_UART_PL011_LCR_H_WLEN_Pos;
if (stop == 2) { if (stop == 2) {
line_control |= UART0_LCR_H_STP2_Msk; line_control |= ARM_UART_PL011_LCR_H_STP2_Msk;
} }
if (parity != BUSIO_UART_PARITY_NONE) { if (parity != BUSIO_UART_PARITY_NONE) {
line_control |= UART0_LCR_H_PEN_Msk; line_control |= ARM_UART_PL011_LCR_H_PEN_Msk;
} }
if (parity == BUSIO_UART_PARITY_EVEN) { if (parity == BUSIO_UART_PARITY_EVEN) {
line_control |= UART0_LCR_H_EPS_Msk; line_control |= ARM_UART_PL011_LCR_H_EPS_Msk;
} }
pl011->LCR_H = line_control; pl011->LCR_H = line_control;
uint32_t control = UART0_CR_UARTEN_Msk; uint32_t control = ARM_UART_PL011_CR_UARTEN_Msk;
if (tx != NULL) { if (tx != NULL) {
control |= UART0_CR_TXE_Msk; control |= ARM_UART_PL011_CR_TXE_Msk;
} }
if (rx != NULL) { if (rx != NULL) {
control |= UART0_CR_RXE_Msk; control |= ARM_UART_PL011_CR_RXE_Msk;
} }
if (cts != NULL) { if (cts != NULL) {
control |= UART0_CR_CTSEN_Msk; control |= ARM_UART_PL011_CR_CTSEN_Msk;
} }
if (rts != NULL) { if (rts != NULL) {
control |= UART0_CR_RTSEN_Msk; control |= ARM_UART_PL011_CR_RTSEN_Msk;
} }
pl011->CR = control; pl011->CR = control;
} }
@ -460,7 +460,7 @@ uint32_t common_hal_busio_uart_get_baudrate(busio_uart_obj_t *self) {
void common_hal_busio_uart_set_baudrate(busio_uart_obj_t *self, uint32_t baudrate) { void common_hal_busio_uart_set_baudrate(busio_uart_obj_t *self, uint32_t baudrate) {
if (self->uart_id == 1) { if (self->uart_id == 1) {
uint32_t source_clock = vcmailbox_get_clock_rate_measured(VCMAILBOX_CLOCK_CORE); uint32_t source_clock = vcmailbox_get_clock_rate(VCMAILBOX_CLOCK_CORE);
UART1->BAUD = ((source_clock / (baudrate * 8)) - 1); UART1->BAUD = ((source_clock / (baudrate * 8)) - 1);
} else { } else {
ARM_UART_PL011_Type *pl011 = uart[self->uart_id]; ARM_UART_PL011_Type *pl011 = uart[self->uart_id];

View File

@ -122,27 +122,27 @@ STATIC sdmmc_err_t _do_transaction(int slot, sdmmc_command_t *cmdinfo) {
if (EMMC->STATUS_b.DAT_INHIBIT) { if (EMMC->STATUS_b.DAT_INHIBIT) {
return SDMMC_ERR_BUSY; return SDMMC_ERR_BUSY;
} }
cmd_flags = EMMC_CMDTM_TM_BLKCNT_EN_Msk | EMMC_CMDTM_CMD_ISDATA_Msk; cmd_flags = Arasan_EMMC_Distributor_CMDTM_TM_BLKCNT_EN_Msk | Arasan_EMMC_Distributor_CMDTM_CMD_ISDATA_Msk;
if (cmdinfo->datalen > cmdinfo->blklen) { if (cmdinfo->datalen > cmdinfo->blklen) {
cmd_flags |= EMMC_CMDTM_TM_MULTI_BLOCK_Msk; cmd_flags |= Arasan_EMMC_Distributor_CMDTM_TM_MULTI_BLOCK_Msk;
if ((cmdinfo->flags & SCF_AUTO_STOP) != 0) { if ((cmdinfo->flags & SCF_AUTO_STOP) != 0) {
cmd_flags |= 1 << EMMC_CMDTM_TM_AUTO_CMD_EN_Pos; cmd_flags |= 1 << Arasan_EMMC_Distributor_CMDTM_TM_AUTO_CMD_EN_Pos;
} }
} }
if (read) { if (read) {
cmd_flags |= EMMC_CMDTM_TM_DAT_DIR_Msk; cmd_flags |= Arasan_EMMC_Distributor_CMDTM_TM_DAT_DIR_Msk;
} }
EMMC->BLKSIZECNT = (cmdinfo->datalen / cmdinfo->blklen) << EMMC_BLKSIZECNT_BLKCNT_Pos | EMMC->BLKSIZECNT = (cmdinfo->datalen / cmdinfo->blklen) << Arasan_EMMC_Distributor_BLKSIZECNT_BLKCNT_Pos |
cmdinfo->blklen << EMMC_BLKSIZECNT_BLKSIZE_Pos; cmdinfo->blklen << Arasan_EMMC_Distributor_BLKSIZECNT_BLKSIZE_Pos;
} }
uint32_t response_type = EMMC_CMDTM_CMD_RSPNS_TYPE_RESPONSE_48BITS; uint32_t response_type = EMMC_CMDTM_CMD_RSPNS_TYPE_RESPONSE_48BITS;
uint32_t crc = 0; uint32_t crc = 0;
if ((cmdinfo->flags & SCF_RSP_CRC) != 0) { if ((cmdinfo->flags & SCF_RSP_CRC) != 0) {
crc |= EMMC_CMDTM_CMD_CRCCHK_EN_Msk; crc |= Arasan_EMMC_Distributor_CMDTM_CMD_CRCCHK_EN_Msk;
} }
if ((cmdinfo->flags & SCF_RSP_IDX) != 0) { if ((cmdinfo->flags & SCF_RSP_IDX) != 0) {
crc |= EMMC_CMDTM_CMD_IXCHK_EN_Msk; crc |= Arasan_EMMC_Distributor_CMDTM_CMD_IXCHK_EN_Msk;
} }
if ((cmdinfo->flags & SCF_RSP_136) != 0) { if ((cmdinfo->flags & SCF_RSP_136) != 0) {
response_type = EMMC_CMDTM_CMD_RSPNS_TYPE_RESPONSE_136BITS; response_type = EMMC_CMDTM_CMD_RSPNS_TYPE_RESPONSE_136BITS;
@ -152,8 +152,8 @@ STATIC sdmmc_err_t _do_transaction(int slot, sdmmc_command_t *cmdinfo) {
response_type = EMMC_CMDTM_CMD_RSPNS_TYPE_RESPONSE_NONE; response_type = EMMC_CMDTM_CMD_RSPNS_TYPE_RESPONSE_NONE;
} }
uint32_t full_cmd = cmd_flags | crc | uint32_t full_cmd = cmd_flags | crc |
cmdinfo->opcode << EMMC_CMDTM_CMD_INDEX_Pos | cmdinfo->opcode << Arasan_EMMC_Distributor_CMDTM_CMD_INDEX_Pos |
response_type << EMMC_CMDTM_CMD_RSPNS_TYPE_Pos; response_type << Arasan_EMMC_Distributor_CMDTM_CMD_RSPNS_TYPE_Pos;
EMMC->CMDTM = full_cmd; EMMC->CMDTM = full_cmd;
// Wait for an interrupt to indicate completion of the command. // Wait for an interrupt to indicate completion of the command.
@ -170,7 +170,7 @@ STATIC sdmmc_err_t _do_transaction(int slot, sdmmc_command_t *cmdinfo) {
} }
return SDMMC_ERR_TIMEOUT; return SDMMC_ERR_TIMEOUT;
} else { } else {
EMMC->INTERRUPT = EMMC_INTERRUPT_CMD_DONE_Msk; EMMC->INTERRUPT = Arasan_EMMC_Distributor_INTERRUPT_CMD_DONE_Msk;
} }
// Transfer the data. // Transfer the data.
@ -197,7 +197,7 @@ STATIC sdmmc_err_t _do_transaction(int slot, sdmmc_command_t *cmdinfo) {
EMMC->DATA = ((uint32_t *)cmdinfo->data)[i]; EMMC->DATA = ((uint32_t *)cmdinfo->data)[i];
} }
} }
uint32_t data_done_mask = EMMC_INTERRUPT_ERR_Msk | EMMC_INTERRUPT_DATA_DONE_Msk; uint32_t data_done_mask = Arasan_EMMC_Distributor_INTERRUPT_ERR_Msk | Arasan_EMMC_Distributor_INTERRUPT_DATA_DONE_Msk;
start_ticks = port_get_raw_ticks(NULL); start_ticks = port_get_raw_ticks(NULL);
while ((EMMC->INTERRUPT & data_done_mask) == 0 && (port_get_raw_ticks(NULL) - start_ticks) < (size_t)cmdinfo->timeout_ms) { while ((EMMC->INTERRUPT & data_done_mask) == 0 && (port_get_raw_ticks(NULL) - start_ticks) < (size_t)cmdinfo->timeout_ms) {
} }
@ -282,7 +282,7 @@ void common_hal_sdioio_sdcard_construct(sdioio_sdcard_obj_t *self,
} }
// Set max timeout // Set max timeout
EMMC->CONTROL1 |= EMMC_CONTROL1_CLK_INTLEN_Msk | (0xe << EMMC_CONTROL1_DATA_TOUNIT_Pos); EMMC->CONTROL1 |= Arasan_EMMC_Distributor_CONTROL1_CLK_INTLEN_Msk | (0xe << Arasan_EMMC_Distributor_CONTROL1_DATA_TOUNIT_Pos);
EMMC->IRPT_MASK = 0xffffffff; EMMC->IRPT_MASK = 0xffffffff;

@ -1 +1 @@
Subproject commit 08370086080759ed54ac1136d62d2ad24c6fa267 Subproject commit d3a6b50a21e7dd49ba4bfa0374da3407594caa50

View File

@ -0,0 +1,34 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2023 Radio Sound, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "supervisor/board.h"
#include "mpconfigboard.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "components/driver/include/driver/gpio.h"
#include "components/hal/include/hal/gpio_hal.h"
#include "common-hal/microcontroller/Pin.h"
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View File

@ -0,0 +1,50 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2023 Radio Sound, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
// Micropython setup
#define MICROPY_HW_BOARD_NAME "Espressif ESP32-LyraT"
#define MICROPY_HW_MCU_NAME "ESP32"
#define MICROPY_HW_LED_STATUS (&pin_GPIO22)
#define CIRCUITPY_BOARD_I2C (1)
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO23, .sda = &pin_GPIO18}}
#define CIRCUITPY_BOARD_SPI (1)
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO14, .mosi = &pin_GPIO13, .miso = &pin_GPIO12}}
#define CIRCUITPY_BOARD_UART (0)
// For entering safe mode, use Rec button
#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO36)
// Explanation of how a user got into safe mode
#define BOARD_USER_SAFE_MODE_ACTION translate("You pressed the Rec button at start up.")
// UART pins attached to the USB-serial converter chip
#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO1)
#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO3)

View File

@ -0,0 +1,10 @@
CIRCUITPY_CREATOR_ID = 0x000C303A
CIRCUITPY_CREATION_ID = 0x0032A000
IDF_TARGET = esp32
CIRCUITPY_ESP_FLASH_MODE = dio
CIRCUITPY_ESP_FLASH_FREQ = 40m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESPCAMERA = 0

View File

@ -0,0 +1,56 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
// External pins are in silkscreen order, from top to bottom, left side, then right side
{ MP_ROM_QSTR(MP_QSTR_CS0), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO23) },
{ MP_ROM_QSTR(MP_QSTR_D23), MP_ROM_PTR(&pin_GPIO23) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_D18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_D25), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_D26), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_D35), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_D22), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_REC), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_SW36), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_MODE), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_SW39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -0,0 +1,37 @@
CONFIG_ESP32_SPIRAM_SUPPORT=y
# SPI RAM config
#
CONFIG_SPIRAM_TYPE_AUTO=y
# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set
# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set
# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set
CONFIG_SPIRAM_SIZE=4194304
CONFIG_SPIRAM_SPEED_40M=y
CONFIG_SPIRAM=y
CONFIG_SPIRAM_BOOT_INIT=y
CONFIG_SPIRAM_IGNORE_NOTFOUND=y
CONFIG_SPIRAM_USE_MEMMAP=y
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
# CONFIG_SPIRAM_USE_MALLOC is not set
CONFIG_SPIRAM_MEMTEST=y
# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set
# CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY is not set
CONFIG_SPIRAM_CACHE_WORKAROUND=y
# Uncomment (remove ###) to send ESP_LOG output to TX/RX pins
### #
### # ESP System Settings
### #
### CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=y
### # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
### CONFIG_ESP_CONSOLE_UART_CUSTOM=y
### # CONFIG_ESP_CONSOLE_NONE is not set
### CONFIG_ESP_CONSOLE_UART=y
### CONFIG_ESP_CONSOLE_UART_CUSTOM_NUM_0=y
### # CONFIG_ESP_CONSOLE_UART_CUSTOM_NUM_1 is not set
### CONFIG_ESP_CONSOLE_UART_NUM=0
### CONFIG_ESP_CONSOLE_UART_TX_GPIO=8
### CONFIG_ESP_CONSOLE_UART_RX_GPIO=7
### CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200
### # CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5 is not set
### # end of ESP System Settings

View File

@ -1109,7 +1109,7 @@ int socketpool_socket_recv_into(socketpool_socket_obj_t *socket,
break; break;
} }
if (ret == (unsigned)-1) { if (ret == (unsigned)-1) {
return -_errno; mp_raise_OSError(_errno);
} }
return ret; return ret;
} }

View File

@ -145,6 +145,7 @@ extern void common_hal_mcu_enable_interrupts(void);
#define MICROPY_REPL_AUTO_INDENT (1) #define MICROPY_REPL_AUTO_INDENT (1)
#define MICROPY_REPL_EVENT_DRIVEN (0) #define MICROPY_REPL_EVENT_DRIVEN (0)
#define MICROPY_ENABLE_PYSTACK (1) #define MICROPY_ENABLE_PYSTACK (1)
#define CIRCUITPY_SETTABLE_PYSTACK (1)
#define MICROPY_STACK_CHECK (1) #define MICROPY_STACK_CHECK (1)
#define MICROPY_STREAMS_NON_BLOCK (1) #define MICROPY_STREAMS_NON_BLOCK (1)
#ifndef MICROPY_USE_INTERNAL_PRINTF #ifndef MICROPY_USE_INTERNAL_PRINTF

View File

@ -166,26 +166,14 @@ def get_commit_depth_and_check_suite(query_commits):
return [None, None] return [None, None]
def append_runs_to_list(runs, bad_runs_by_matrix):
regex_matrix = re.compile("^build-[^ ]+")
regex_board = re.compile("\([^ ]+\)$")
for run in runs["nodes"]:
name = run["name"]
res_matrix = regex_matrix.search(name)
if res_matrix:
matrix = res_matrix.group()
if matrix not in bad_runs_by_matrix:
bad_runs_by_matrix[matrix] = []
res_board = regex_board.search(name)
if res_board:
bad_runs_by_matrix[matrix].append(res_board.group()[1:-1])
def get_bad_check_runs(query_check_runs): def get_bad_check_runs(query_check_runs):
more_pages = True more_pages = True
bad_runs_by_matrix = {} bad_runs_by_matrix = {}
run_types = ["failed", "incomplete"] run_types = ["failed", "incomplete"]
regex_matrix = re.compile(r"^\S+ \/ (build|run) \(\S+\)$")
while more_pages: while more_pages:
check_runs = query_check_runs.fetch()["data"]["node"] check_runs = query_check_runs.fetch()["data"]["node"]
more_pages = False more_pages = False
@ -194,7 +182,17 @@ def get_bad_check_runs(query_check_runs):
run_type_camel = run_type.capitalize() + "Run" run_type_camel = run_type.capitalize() + "Run"
run_type = run_type + "Runs" run_type = run_type + "Runs"
append_runs_to_list(check_runs[run_type], bad_runs_by_matrix) for check_run in check_runs[run_type]["nodes"]:
name = check_run["name"]
res_matrix = regex_matrix.search(name)
if res_matrix:
matrix = name.split(" /", 1)[0]
matrix_job = name.split(" (", 1)[1][:-1]
bad_runs_by_matrix.setdefault(matrix, []).append(matrix_job)
elif name != "scheduler":
bad_runs_by_matrix[name] = True
else:
return {}
if query_check_runs.paginate( if query_check_runs.paginate(
check_runs[run_type]["pageInfo"], "after" + run_type_camel check_runs[run_type]["pageInfo"], "after" + run_type_camel

View File

@ -80,14 +80,16 @@ def main():
submodules = ["extmod/ulab", "lib/", "tools/"] submodules = ["extmod/ulab", "lib/", "tools/"]
elif TARGET == "build-doc": elif TARGET == "build-doc":
# used in .readthedocs.yml to generate RTD # used in .readthedocs.yml to generate RTD
submodules = ["extmod/ulab", "frozen/"] submodules = ["extmod/ulab"]
submodules_tags = ["frozen/"]
elif TARGET == "mpy-cross" or TARGET == "mpy-cross-mac": elif TARGET == "mpy-cross" or TARGET == "mpy-cross-mac":
submodules = ["tools/"] # for huffman submodules = ["tools/"] # for huffman
elif TARGET == "windows": elif TARGET == "build-windows":
# This builds one board from a number of ports so fill out a bunch of submodules # This builds one board from a number of ports so fill out a bunch of submodules
submodules = ["extmod/ulab", "lib/", "tools/", "ports/", "data/nvm.toml"] submodules = ["extmod/ulab", "lib/", "tools/", "ports/", "data/nvm.toml"]
elif TARGET == "website": elif TARGET == "website":
submodules = ["tools/adabot/", "frozen/"] submodules = ["tools/adabot/"]
submodules_tags = ["frozen/"]
elif TARGET == "pre-commit": elif TARGET == "pre-commit":
submodules = ["extmod/ulab"] submodules = ["extmod/ulab"]
else: else:

View File

@ -42,15 +42,15 @@ from shared_bindings_matrix import (
all_ports_all_boards, all_ports_all_boards,
) )
PORT_TO_BUILD_JOB = { PORT_TO_ARCH = {
"atmel-samd": "arm", "atmel-samd": "atmel",
"broadcom": "aarch", "broadcom": "aarch",
"cxd56": "arm", "cxd56": "arm",
"espressif": "esp", "espressif": "esp",
"litex": "riscv", "litex": "riscv",
"mimxrt10xx": "arm", "mimxrt10xx": "arm",
"nrf": "nrf", "nrf": "arm",
"raspberrypi": "rpi", "raspberrypi": "arm",
"stm": "arm", "stm": "arm",
} }
@ -62,6 +62,24 @@ IGNORE = [
# Files in these directories never influence board builds # Files in these directories never influence board builds
IGNORE_DIRS = ["tests", "docs", ".devcontainer"] IGNORE_DIRS = ["tests", "docs", ".devcontainer"]
PATTERN_DOCS = (
r"^(?:\.github|docs|extmod\/ulab)|"
r"^(?:(?:ports\/\w+\/bindings|shared-bindings)\S+\.c|tools\/extract_pyi\.py|conf\.py|requirements-doc\.txt)$|"
r"(?:-stubs|\.(?:md|MD|rst|RST))$"
)
PATTERN_WINDOWS = [
".github/",
"extmod/",
"lib/",
"mpy-cross/",
"ports/unix/",
"ports/windows/",
"py/",
"requirements",
"tools/",
]
if len(sys.argv) > 1: if len(sys.argv) > 1:
print("Using files list on commandline") print("Using files list on commandline")
changed_files = sys.argv[1:] changed_files = sys.argv[1:]
@ -92,6 +110,9 @@ def set_output(name: str, value):
def set_boards_to_build(build_all: bool): def set_boards_to_build(build_all: bool):
if last_failed_jobs.get("mpy_cross") or last_failed_jobs.get("tests"):
build_all = True
# Get boards in json format # Get boards in json format
boards_info_json = build_board_info.get_board_mapping() boards_info_json = build_board_info.get_board_mapping()
all_board_ids = set() all_board_ids = set()
@ -203,14 +224,13 @@ def set_boards_to_build(build_all: bool):
boards_to_build = all_board_ids boards_to_build = all_board_ids
break break
# Split boards by build job. # Split boards by architecture.
build_job_to_boards = {"aarch": [], "arm": [], "esp": [], "nrf": [], "riscv": [], "rpi": []} arch_to_boards = {"aarch": [], "arm": [], "atmel": [], "esp": [], "riscv": []}
# Append previously failed boards # Append previously failed boards
for build_job in build_job_to_boards: for arch in arch_to_boards:
job_name = f"build-{build_job}" if arch in last_failed_jobs:
if job_name in last_failed_jobs: for board in last_failed_jobs[arch]:
for board in last_failed_jobs[job_name]:
if not board in boards_to_build: if not board in boards_to_build:
boards_to_build.append(board) boards_to_build.append(board)
@ -225,34 +245,32 @@ def set_boards_to_build(build_all: bool):
# if this happens it's not in `board_to_port`. # if this happens it's not in `board_to_port`.
if not port: if not port:
continue continue
build_job_to_boards[PORT_TO_BUILD_JOB[port]].append(board) arch_to_boards[PORT_TO_ARCH[port]].append(board)
print(" ", board) print(" ", board)
# Set the step outputs for each architecture # Set the step outputs for each architecture
for build_job in build_job_to_boards: for arch in arch_to_boards:
set_output(f"boards-{build_job}", json.dumps(build_job_to_boards[build_job])) set_output(f"boards-{arch}", json.dumps(arch_to_boards[arch]))
def set_docs_to_build(build_doc: bool): def set_docs_to_build(build_doc: bool):
if not build_doc: if not build_doc:
if "build-doc" in last_failed_jobs: if last_failed_jobs.get("build-doc"):
build_doc = True build_doc = True
else: else:
doc_pattern = re.compile( doc_pattern = re.compile(PATTERN_DOCS)
r"^(?:\.github\/workflows\/|docs|extmod\/ulab|(?:(?:ports\/\w+\/bindings|shared-bindings)\S+\.c|conf\.py|tools\/extract_pyi\.py|requirements-doc\.txt)$)|(?:-stubs|\.(?:md|MD|rst|RST))$"
)
github_workspace = os.environ.get("GITHUB_WORKSPACE") or "" github_workspace = os.environ.get("GITHUB_WORKSPACE") or ""
github_workspace = github_workspace and github_workspace + "/" github_workspace = github_workspace and github_workspace + "/"
for p in changed_files: for file in changed_files:
if doc_pattern.search(p) and ( if doc_pattern.search(file) and (
( (
subprocess.run( subprocess.run(
f"git diff -U0 $BASE_SHA...$HEAD_SHA {github_workspace + p} | grep -o -m 1 '^[+-]\/\/|'", f"git diff -U0 $BASE_SHA...$HEAD_SHA {github_workspace + file} | grep -o -m 1 '^[+-]\/\/|'",
capture_output=True, capture_output=True,
shell=True, shell=True,
).stdout ).stdout
) )
if p.endswith(".c") if file.endswith(".c")
else True else True
): ):
build_doc = True build_doc = True
@ -263,6 +281,25 @@ def set_docs_to_build(build_doc: bool):
set_output("build-doc", build_doc) set_output("build-doc", build_doc)
def set_windows_to_build(build_windows):
if not build_windows:
if last_failed_jobs.get("build-windows"):
build_windows = True
else:
for file in changed_files:
for pattern in PATTERN_WINDOWS:
if file.startswith(pattern):
build_windows = True
break
else:
continue
break
# Set the step outputs
print("Building windows:", build_windows)
set_output("build-windows", build_windows)
def check_changed_files(): def check_changed_files():
if not changed_files: if not changed_files:
print("Building all docs/boards") print("Building all docs/boards")
@ -275,6 +312,7 @@ def check_changed_files():
def main(): def main():
build_all = check_changed_files() build_all = check_changed_files()
set_docs_to_build(build_all) set_docs_to_build(build_all)
set_windows_to_build(build_all)
set_boards_to_build(build_all) set_boards_to_build(build_all)