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
- 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
with:
release: '10-2020-q4'
@ -73,22 +73,6 @@ runs:
echo >> $GITHUB_PATH "$PATH"
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
- name: Get riscv toolchain
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 != ''
run: |
> 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
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Set up port
if: env.PLATFORM == 'esp'
uses: ./.github/actions/deps/ports/espressif
id: set-up-port
uses: ./.github/actions/deps/ports
with:
board: ${{ inputs.board }}
- name: Set up submodules
id: set-up-submodules
uses: ./.github/actions/deps/submodules
@ -75,7 +70,7 @@ jobs:
uses: ./.github/actions/deps/external
with:
action: cache
platform: ${{ env.PLATFORM }}
platform: ${{ env[format('PLATFORM_{0}', steps.set-up-port.outputs.port)] }}
- name: Set up mpy-cross
if: steps.set-up-submodules.outputs.frozen == 'True'
uses: ./.github/actions/mpy_cross
@ -96,9 +91,9 @@ jobs:
mkfs.fat --version || true
- name: Build board
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
uses: actions/upload-artifact@v3
with:
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:
python-version: 3.x
- name: Set up port
if: inputs.platform == 'esp'
uses: ./.github/actions/deps/ports/espressif
uses: ./.github/actions/deps/ports
with:
board: ${{ matrix.board }}
- name: Set up submodules
id: set-up-submodules
uses: ./.github/actions/deps/submodules

View File

@ -22,12 +22,12 @@ jobs:
outputs:
build-doc: ${{ steps.set-matrix.outputs.build-doc }}
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-arm: ${{ steps.set-matrix.outputs.boards-arm }}
boards-atmel: ${{ steps.set-matrix.outputs.boards-atmel }}
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-rpi: ${{ steps.set-matrix.outputs.boards-rpi }}
cp-version: ${{ steps.set-up-submodules.outputs.version }}
steps:
- name: Dump GitHub context
@ -55,24 +55,23 @@ jobs:
uses: ./.github/actions/deps/external
with:
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
uses: ./.github/actions/mpy_cross
with:
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
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
if: github.event_name == 'pull_request'
run: |
@ -220,6 +219,74 @@ jobs:
[ -z "$TWINE_USERNAME" ] || echo "Uploading dev release to PyPi"
[ -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:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-aarch != '[]' }}
@ -240,6 +307,16 @@ jobs:
boards: ${{ needs.scheduler.outputs.boards-arm }}
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:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-esp != '[]' }}
@ -250,16 +327,6 @@ jobs:
boards: ${{ needs.scheduler.outputs.boards-esp }}
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:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-riscv != '[]' }}
@ -269,13 +336,3 @@ jobs:
platform: riscv
boards: ${{ needs.scheduler.outputs.boards-riscv }}
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"]
path = frozen/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"]
path = ports/broadcom/firmware
url = https://github.com/raspberrypi/rpi-firmware.git
@ -328,3 +324,7 @@
[submodule "frozen/Adafruit_CircuitPython_SSD1680"]
path = frozen/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"
msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2419,6 +2427,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -28,6 +28,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n"
msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2389,6 +2397,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -32,6 +32,14 @@ msgstr ""
"\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
msgid ""
"\n"
@ -2406,6 +2414,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -31,6 +31,14 @@ msgstr ""
"\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
msgid ""
"\n"
@ -2455,6 +2463,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

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

View File

@ -34,6 +34,14 @@ msgstr ""
"\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
msgid ""
"\n"
@ -2414,6 +2422,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2023-02-20 03:39+0000\n"
"Last-Translator: Jose David M <jquintana202020@gmail.com>\n"
"PO-Revision-Date: 2023-02-23 17:53+0000\n"
"Last-Translator: Luis Ruiz San Segundo <luisan00@hotmail.com>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
@ -34,6 +34,19 @@ msgstr ""
"\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
msgid ""
"\n"
@ -50,7 +63,7 @@ msgid ""
"Press reset to exit safe mode.\n"
msgstr ""
"\n"
"Presione reset para salir de safe mode.\n"
"Presione reset para salir del modo seguro.\n"
#: supervisor/shared/safe_mode.c
msgid ""
@ -58,7 +71,7 @@ msgid ""
"You are in safe mode because:\n"
msgstr ""
"\n"
"Estas in safe mode porque:\n"
"Estas en modo seguro porque:\n"
#: py/obj.c
msgid " File \"%q\""
@ -145,7 +158,7 @@ msgstr "%q está siendo utilizado"
#: py/objstr.c py/objstrunicode.c
msgid "%q index out of range"
msgstr "%q indice fuera de rango"
msgstr "%q índice fuera de rango"
#: shared-module/bitbangio/SPI.c
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
msgid "%q length must be %d"
msgstr "%q tamaño debe ser %d"
msgstr "%q longitud debe ser %d"
#: py/argcheck.c
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
msgid "%q length must be <= %d"
msgstr "%q tamaño debe ser <= %d"
msgstr "%q longitud debe ser <= %d"
#: py/argcheck.c
msgid "%q length must be >= %d"
msgstr "%q tamaño debe ser >= %d"
msgstr "%q longitud debe ser >= %d"
#: py/argcheck.c
msgid "%q must be %d"
@ -197,7 +210,7 @@ msgstr "%q debe ser >= %d"
#: shared-bindings/analogbufio/BufferedIn.c
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
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
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
msgid "%q=%q"
@ -349,7 +362,7 @@ msgstr "'=' alineación no permitida en el especificador string format"
#: shared-module/struct/__init__.c
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
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/rotaryio/IncrementalEncoder.c
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
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
#, c-format
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
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/nrf/common-hal/busio/I2C.c
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/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
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
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/pulseio/PulseIn.c
#: ports/nrf/common-hal/rotaryio/IncrementalEncoder.c
#: shared-bindings/pwmio/PWMOut.c
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
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
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
msgid "All sync event channels in use"
msgstr ""
"Todos los canales de eventos de sincronización (sync event channels) están "
"siendo utilizados"
"en uso"
#: shared-bindings/pwmio/PWMOut.c
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/audioio/AudioOut.c
@ -560,7 +573,7 @@ msgstr "Tratando de localizar %d bloques"
#: ports/raspberrypi/audio_dma.c
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
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 "
"disable.\n"
msgstr ""
"Auto-reload habilitado. Simplemente guarda los archivos via USB para "
"ejecutarlos o entra al REPL para desabilitarlos.\n"
"Auto-reload habilitado. Simplemente guarda los archivos vía USB para "
"ejecutarlos o entra al REPL para deshabilitarlo.\n"
#: ports/espressif/common-hal/canio/CAN.c
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/framebufferio/FramebufferDisplay.c
@ -605,7 +618,7 @@ msgstr "Bits depth debe ser múltiplo de 8."
#: shared-bindings/bitmaptools/__init__.c
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
msgid "Boot device must be first (interface #0)."
@ -634,44 +647,43 @@ msgstr "El brillo no se puede ajustar"
#: shared-bindings/_bleio/UUID.c
#, c-format
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
msgid "Buffer elements must be 4 bytes long or less"
msgstr ""
"Los elementos del búfer deben de ser de una longitud de 4 bytes o menos"
msgstr "Los elementos del buffer deben tener una longitud de 4 bytes o menos"
#: shared-bindings/framebufferio/FramebufferDisplay.c
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
#: shared-bindings/framebufferio/FramebufferDisplay.c
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
#, c-format
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/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c
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
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
#, c-format
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
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/espressif/common-hal/paralleldisplay/ParallelBus.c
@ -758,7 +770,7 @@ msgstr ""
#: ports/espressif/common-hal/alarm/pin/PinAlarm.c
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
msgid "Cannot record to a file"
@ -1844,7 +1856,7 @@ msgstr ""
#: main.c
msgid "Pretending to deep sleep until alarm, CTRL-C or file write.\n"
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"
#: 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_stick_c/mpconfigboard.h
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
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
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
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
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_lite/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_matrix/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_u/mpconfigboard.h
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
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
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
msgid "[truncated due to length]"

View File

@ -29,6 +29,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n"
msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2409,6 +2417,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2022-12-27 18:02+0000\n"
"Last-Translator: Blinka CircuitPython <limor@ladyada.net>\n"
"PO-Revision-Date: 2023-02-22 18:34+0000\n"
"Last-Translator: Neradoc <weblate@ri1.fr>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\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
msgid ""
@ -34,6 +34,14 @@ msgstr ""
"Le code a été arrêté par l'actualisation automatique. Rechargement "
"prochain.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -46,12 +54,16 @@ msgid ""
"\n"
"Press reset to exit safe mode.\n"
msgstr ""
"\n"
"Appuyer sur reset pour sortir du mode sûr.\n"
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
"You are in safe mode because:\n"
msgstr ""
"\n"
"Le mode sûr est actif:\n"
#: py/obj.c
msgid " File \"%q\""
@ -127,7 +139,7 @@ msgstr "Échec de %q : %d"
#: py/argcheck.c
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/raspberrypi/common-hal/rp2pio/StateMachine.c
@ -150,7 +162,7 @@ msgstr ""
#: ports/raspberrypi/common-hal/wifi/Radio.c
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
msgid "%q length must be %d"
@ -190,7 +202,7 @@ msgstr "%q doit être >= %d"
#: shared-bindings/analogbufio/BufferedIn.c
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
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
#: shared-bindings/canio/CAN.c shared-bindings/digitalio/Pull.c
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
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
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
msgid "%q step cannot be zero"
msgstr ""
msgstr "le pas ne peut être zéro dans %q"
#: py/bc.c py/objnamedtuple.c
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
msgid "Address range not allowed"
msgstr ""
msgstr "Plage d'adresses non autorisée"
#: ports/espressif/common-hal/canio/CAN.c
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
#, c-format
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
msgid "Another PWMAudioOut is already active"
@ -921,7 +933,7 @@ msgstr ""
#: py/obj.c
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
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
msgid "Error in safemode.py."
msgstr ""
msgstr "Erreur dans safemode.py."
#: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c
msgid "Error: Failure to bind"
@ -958,7 +970,7 @@ msgstr "Erreur : Impossible de lier"
#: shared-bindings/alarm/__init__.c
msgid "Expected a kind of %q"
msgstr ""
msgstr "Argument de type %q attendu"
#: ports/espressif/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
msgid "File not found"
msgstr ""
msgstr "Fichier non trouvé"
#: ports/atmel-samd/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
msgid "Heap allocation when VM not running."
msgstr ""
msgstr "Allocation du tas en dehors de la MV."
#: supervisor/shared/safe_mode.c
msgid ""
"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
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/i2ctarget/I2CTarget.c
msgid "I2C peripheral in use"
msgstr "périphérique I2C utilisé"
msgstr "Périphérique I2C utilisé"
#: shared-bindings/audiobusio/I2SOut.c
msgid "I2SOut not available"
@ -1258,7 +1270,7 @@ msgstr "Le minuteur du watchdog interne a expiré."
#: supervisor/shared/safe_mode.c
msgid "Interrupt error."
msgstr ""
msgstr "Erreur d'interruption."
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
msgid "Invalid %q"
@ -1297,7 +1309,7 @@ msgstr "Bits par valeur invalides"
#: shared-module/os/getenv.c
#, c-format
msgid "Invalid byte %.*s"
msgstr ""
msgstr "Octet invalide %.*s"
#: ports/atmel-samd/common-hal/imagecapture/ParallelImageCapture.c
#, c-format
@ -1327,7 +1339,7 @@ msgstr "État invalide"
#: shared-module/os/getenv.c
msgid "Invalid unicode escape"
msgstr ""
msgstr "Séquence unicode invalide"
#: shared-bindings/aesio/aes.c
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
msgid "Key not found"
msgstr ""
msgstr "Clé non trouvée"
#: shared-module/is31fl3741/FrameBuffer.c
msgid "LED mappings must match display size"
@ -1448,7 +1460,7 @@ msgstr "Erreur NVS"
#: shared-bindings/socketpool/SocketPool.c
msgid "Name or service not known"
msgstr ""
msgstr "Nom ou service inconnu"
#: py/qstr.c
msgid "Name too long"
@ -1693,7 +1705,7 @@ msgstr "Une seul %q autorisée en sommeil profond."
#: ports/espressif/common-hal/espulp/ULPAlarm.c
msgid "Only one %q can be set."
msgstr ""
msgstr "Un seul %q peut être défini."
#: ports/espressif/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
msgid "Out of MDNS service slots"
msgstr ""
msgstr "À cours de services MDNS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
msgid "Out of memory"
@ -1865,7 +1877,7 @@ msgstr "Taille du programme invalide"
#: ports/espressif/common-hal/espulp/ULP.c
msgid "Program too long"
msgstr ""
msgstr "Programme trop long"
#: shared-bindings/digitalio/DigitalInOut.c
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
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
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
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
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
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
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
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
msgid "Third-party firmware fatal error."
msgstr ""
msgstr "Erreur fatale de logiciel système tierce partie."
#: shared-module/imagecapture/ParallelImageCapture.c
msgid "This microcontroller does not support continuous capture."
@ -2182,7 +2194,7 @@ msgstr "Initialisation UART"
#: ports/raspberrypi/common-hal/busio/UART.c
msgid "UART peripheral in use"
msgstr ""
msgstr "Périphérique UART utilisé"
#: ports/stm/common-hal/busio/UART.c
msgid "UART re-init"
@ -2237,7 +2249,7 @@ msgstr "Impossible d'allouer des tampons pour une conversion signée"
#: supervisor/shared/safe_mode.c
msgid "Unable to allocate the heap."
msgstr ""
msgstr "Impossible d'allouer le tas."
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
@ -2268,7 +2280,7 @@ msgstr "Impossible de lancer la requête mDNS"
#: shared-bindings/memorymap/AddressRange.c
msgid "Unable to write to address."
msgstr ""
msgstr "L'écriture a échoué."
#: shared-bindings/nvm/ByteArray.c
msgid "Unable to write to nvm."
@ -2437,15 +2449,15 @@ msgstr "Wi-Fi : "
#: ports/raspberrypi/common-hal/wifi/Radio.c
msgid "Wifi is in access point mode."
msgstr ""
msgstr "Wifi en mode point d'accès."
#: ports/raspberrypi/common-hal/wifi/Radio.c
msgid "Wifi is in station mode."
msgstr ""
msgstr "Wifi en mode station."
#: ports/raspberrypi/common-hal/wifi/Radio.c
msgid "Wifi is not enabled"
msgstr ""
msgstr "Le wifi n'est pas activé"
#: main.c
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/meowmeow/mpconfigboard.h
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_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
msgstr "Vous avez appuyé le bouton A au démarrage."
#: supervisor/shared/safe_mode.c
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
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 ""
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
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
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_lite/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_matrix/mpconfigboard.h
#: ports/espressif/boards/m5stack_atom_u/mpconfigboard.h
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
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
msgid "You pressed the reset button during boot."
msgstr ""
msgstr "Vous avez appuyé le bouton reset au démarrage."
#: supervisor/shared/micropython.c
msgid "[truncated due to length]"
msgstr ""
msgstr "[taille limite atteinte]"
#: py/objtype.c
msgid "__init__() should return None"
@ -2575,7 +2591,7 @@ msgstr "la tableau à trop de dimensions"
#: extmod/ulab/code/ndarray.c
msgid "array is too big"
msgstr ""
msgstr "matrice trop grande"
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/memorymap/AddressRange.c shared-bindings/nvm/ByteArray.c
@ -2802,7 +2818,7 @@ msgstr "attribut non modifiable"
#: py/runtime.c
msgid "can't set attribute '%q'"
msgstr ""
msgstr "attribut '%q' non modifiable"
#: py/emitnative.c
msgid "can't store '%q'"
@ -3068,6 +3084,8 @@ msgid ""
"espcamera.Camera requires reserved PSRAM to be configured. See the "
"documentation for instructions."
msgstr ""
"espcamera.Camera a besoin de PSRAM réservée. Voir la documentation pour les "
"instructions."
#: py/runtime.c
msgid "exceptions must derive from BaseException"
@ -3285,7 +3303,7 @@ msgstr "l'index est hors limites"
#: shared-bindings/_pixelmap/PixelMap.c
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
#: ports/espressif/common-hal/pulseio/PulseIn.c
@ -3671,7 +3689,7 @@ msgstr "compte de décalage négatif"
#: shared-bindings/_pixelmap/PixelMap.c
msgid "nested index must be int"
msgstr ""
msgstr "sous index doit être entier"
#: shared-module/sdcardio/SDCard.c
msgid "no SD card"
@ -3843,7 +3861,7 @@ msgstr "seul bit_depth = 16 est pris en charge"
#: ports/stm/common-hal/audiobusio/PDMIn.c
msgid "only mono is supported"
msgstr ""
msgstr "seul mono est supporté"
#: extmod/ulab/code/numpy/create.c
msgid "only ndarrays can be concatenated"
@ -3851,7 +3869,7 @@ msgstr ""
#: ports/stm/common-hal/audiobusio/PDMIn.c
msgid "only oversample=64 is supported"
msgstr ""
msgstr "seul oversample=64 supporté"
#: ports/nrf/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"
msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2391,6 +2399,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -31,6 +31,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n"
msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2416,6 +2424,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -34,6 +34,14 @@ msgstr ""
"\n"
"オートリロードでコード実行は中止された。まもなくリロードする。\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2408,6 +2416,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -29,6 +29,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n"
msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2395,6 +2403,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -28,6 +28,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n"
msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2418,6 +2426,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -30,6 +30,14 @@ msgid ""
"Code stopped by auto-reload. Reloading soon.\n"
msgstr ""
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2399,6 +2407,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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"
"Language-Team: \n"
"Language: pt_BR\n"
@ -32,6 +32,18 @@ msgstr ""
"\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
msgid ""
"\n"
@ -2466,7 +2478,11 @@ msgstr "Você pressionou o botão BOOT na inicialização"
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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
msgid "You pressed the SW38 button at start up."

View File

@ -34,6 +34,14 @@ msgstr ""
"\n"
"Программа остановлена автоматической перезагрузкой. Скоро перезагрузка.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2454,6 +2462,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: sv\n"
@ -32,6 +32,18 @@ msgstr ""
"\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
msgid ""
"\n"
@ -2439,7 +2451,11 @@ msgstr "Du tryckte ner BOOT-knappen vid start"
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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
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 "
"yüklenecek.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2413,6 +2421,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
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ā "
"zǎi.\n"
#: main.c
msgid ""
"\n"
"Invalid CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\r"
msgstr ""
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -2439,6 +2447,10 @@ msgstr ""
msgid "You pressed the GPIO0 button at start up."
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
msgid "You pressed the SW38 button at start up."
msgstr ""

78
main.c
View File

@ -122,8 +122,8 @@
uint8_t value_out = 0;
#endif
#if MICROPY_ENABLE_PYSTACK
static size_t PLACE_IN_DTCM_BSS(_pystack[CIRCUITPY_PYSTACK_SIZE / sizeof(size_t)]);
#if MICROPY_ENABLE_PYSTACK && CIRCUITPY_OS_GETENV
#include "shared-module/os/__init__.h"
#endif
static void reset_devices(void) {
@ -132,7 +132,32 @@ static void reset_devices(void) {
#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();
// 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();
#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
#if MICROPY_ENABLE_GC
@ -264,7 +289,7 @@ STATIC void count_strn(void *data, const char *str, size_t 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.
// 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"
@ -345,6 +370,9 @@ STATIC void cleanup_after_vm(supervisor_allocation *heap, mp_obj_t exception) {
filesystem_flush();
stop_mp();
free_memory(heap);
#if MICROPY_ENABLE_PYSTACK
free_memory(pystack);
#endif
supervisor_move_memory();
// 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
supervisor_allocation *pystack = NULL;
#if MICROPY_ENABLE_PYSTACK
pystack = allocate_pystack(safe_mode);
#endif
supervisor_allocation *heap = allocate_remaining_memory();
// Prepare the VM state.
start_mp(heap);
start_mp(heap, pystack);
#if CIRCUITPY_USB
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.
cleanup_after_vm(heap, _exec_result.exception);
cleanup_after_vm(heap, pystack, _exec_result.exception);
_exec_result.exception = NULL;
// 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;
}
supervisor_allocation *pystack = NULL;
#if MICROPY_ENABLE_PYSTACK
pystack = allocate_pystack(safe_mode);
#endif
supervisor_allocation *heap = allocate_remaining_memory();
start_mp(heap);
start_mp(heap, pystack);
static const char *const safemode_py_filenames[] = {"safemode.py", "safemode.txt"};
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);
}
cleanup_after_vm(heap, _exec_result.exception);
cleanup_after_vm(heap, pystack, _exec_result.exception);
_exec_result.exception = NULL;
}
#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.
supervisor_allocation *pystack = NULL;
#if MICROPY_ENABLE_PYSTACK
pystack = allocate_pystack(safe_mode);
#endif
supervisor_allocation *heap = allocate_remaining_memory();
start_mp(heap);
start_mp(heap, pystack);
#if CIRCUITPY_USB
// 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);
cleanup_after_vm(heap, _exec_result.exception);
cleanup_after_vm(heap, pystack, _exec_result.exception);
_exec_result.exception = NULL;
port_post_boot_py(false);
@ -871,12 +908,16 @@ STATIC void __attribute__ ((noinline)) run_boot_py(safe_mode_t safe_mode) {
#endif
}
STATIC int run_repl(void) {
STATIC int run_repl(safe_mode_t safe_mode) {
int exit_code = PYEXEC_FORCED_EXIT;
stack_resize();
filesystem_flush();
supervisor_allocation *pystack = NULL;
#if MICROPY_ENABLE_PYSTACK
pystack = allocate_pystack(safe_mode);
#endif
supervisor_allocation *heap = allocate_remaining_memory();
start_mp(heap);
start_mp(heap, pystack);
#if CIRCUITPY_USB
usb_setup_with_vm();
@ -919,7 +960,7 @@ STATIC int run_repl(void) {
exit_code = PYEXEC_DEEP_SLEEP;
}
#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,
// 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) {
// initialise the cpu and peripherals
set_safe_mode(port_init());
@ -1038,7 +1080,7 @@ int __attribute__((used)) main(void) {
bool simulate_reset = true;
for (;;) {
if (!skip_repl) {
exit_code = run_repl();
exit_code = run_repl(get_safe_mode());
supervisor_set_run_reason(RUN_REASON_REPL_RELOAD);
}
if (exit_code == PYEXEC_FORCED_EXIT) {

View File

@ -20,11 +20,13 @@ CIRCUITPY_BLEIO_HCI = 0
CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_FLOPPYIO = 0
CIRCUITPY_FRAMEBUFFERIO = 0
CIRCUITPY_PIXELMAP = 0
CIRCUITPY_GETPASS = 0
CIRCUITPY_KEYPAD = 0
CIRCUITPY_MSGPACK = 0
CIRCUITPY_PS2IO = 0
CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_RAINBOWIO = 0
CIRCUITPY_ROTARYIO = 0
CIRCUITPY_TOUCHIO = 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->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;
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"));
}
// 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++) {
if (spi_in_use[i]) {
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->MISO);
self->clock = NULL;
spi_in_use[self->index] = false;
if (self->index == 1 ||
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) {
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;
if (source_clock % baudrate > 0) {
clock_divider += 2;
@ -198,7 +201,7 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
SPI0_Type *p = spi[self->index];
p->CS = polarity << SPI0_CS_CPOL_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;
if (source_clock % baudrate > 0) {
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
// FIFO. (This won't clear the FIFO.)
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) {
@ -258,31 +258,31 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
common_hal_busio_uart_set_baudrate(self, baudrate);
uint32_t line_control = UART0_LCR_H_FEN_Msk;
line_control |= (bits - 5) << UART0_LCR_H_WLEN_Pos;
uint32_t line_control = ARM_UART_PL011_LCR_H_FEN_Msk;
line_control |= (bits - 5) << ARM_UART_PL011_LCR_H_WLEN_Pos;
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) {
line_control |= UART0_LCR_H_PEN_Msk;
line_control |= ARM_UART_PL011_LCR_H_PEN_Msk;
}
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;
uint32_t control = UART0_CR_UARTEN_Msk;
uint32_t control = ARM_UART_PL011_CR_UARTEN_Msk;
if (tx != NULL) {
control |= UART0_CR_TXE_Msk;
control |= ARM_UART_PL011_CR_TXE_Msk;
}
if (rx != NULL) {
control |= UART0_CR_RXE_Msk;
control |= ARM_UART_PL011_CR_RXE_Msk;
}
if (cts != NULL) {
control |= UART0_CR_CTSEN_Msk;
control |= ARM_UART_PL011_CR_CTSEN_Msk;
}
if (rts != NULL) {
control |= UART0_CR_RTSEN_Msk;
control |= ARM_UART_PL011_CR_RTSEN_Msk;
}
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) {
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);
} else {
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) {
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) {
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) {
cmd_flags |= 1 << EMMC_CMDTM_TM_AUTO_CMD_EN_Pos;
cmd_flags |= 1 << Arasan_EMMC_Distributor_CMDTM_TM_AUTO_CMD_EN_Pos;
}
}
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 |
cmdinfo->blklen << EMMC_BLKSIZECNT_BLKSIZE_Pos;
EMMC->BLKSIZECNT = (cmdinfo->datalen / cmdinfo->blklen) << Arasan_EMMC_Distributor_BLKSIZECNT_BLKCNT_Pos |
cmdinfo->blklen << Arasan_EMMC_Distributor_BLKSIZECNT_BLKSIZE_Pos;
}
uint32_t response_type = EMMC_CMDTM_CMD_RSPNS_TYPE_RESPONSE_48BITS;
uint32_t 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) {
crc |= EMMC_CMDTM_CMD_IXCHK_EN_Msk;
crc |= Arasan_EMMC_Distributor_CMDTM_CMD_IXCHK_EN_Msk;
}
if ((cmdinfo->flags & SCF_RSP_136) != 0) {
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;
}
uint32_t full_cmd = cmd_flags | crc |
cmdinfo->opcode << EMMC_CMDTM_CMD_INDEX_Pos |
response_type << EMMC_CMDTM_CMD_RSPNS_TYPE_Pos;
cmdinfo->opcode << Arasan_EMMC_Distributor_CMDTM_CMD_INDEX_Pos |
response_type << Arasan_EMMC_Distributor_CMDTM_CMD_RSPNS_TYPE_Pos;
EMMC->CMDTM = full_cmd;
// 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;
} else {
EMMC->INTERRUPT = EMMC_INTERRUPT_CMD_DONE_Msk;
EMMC->INTERRUPT = Arasan_EMMC_Distributor_INTERRUPT_CMD_DONE_Msk;
}
// 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];
}
}
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);
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
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;

@ -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;
}
if (ret == (unsigned)-1) {
return -_errno;
mp_raise_OSError(_errno);
}
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_EVENT_DRIVEN (0)
#define MICROPY_ENABLE_PYSTACK (1)
#define CIRCUITPY_SETTABLE_PYSTACK (1)
#define MICROPY_STACK_CHECK (1)
#define MICROPY_STREAMS_NON_BLOCK (1)
#ifndef MICROPY_USE_INTERNAL_PRINTF

View File

@ -166,26 +166,14 @@ def get_commit_depth_and_check_suite(query_commits):
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):
more_pages = True
bad_runs_by_matrix = {}
run_types = ["failed", "incomplete"]
regex_matrix = re.compile(r"^\S+ \/ (build|run) \(\S+\)$")
while more_pages:
check_runs = query_check_runs.fetch()["data"]["node"]
more_pages = False
@ -194,7 +182,17 @@ def get_bad_check_runs(query_check_runs):
run_type_camel = run_type.capitalize() + "Run"
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(
check_runs[run_type]["pageInfo"], "after" + run_type_camel

View File

@ -80,14 +80,16 @@ def main():
submodules = ["extmod/ulab", "lib/", "tools/"]
elif TARGET == "build-doc":
# 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":
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
submodules = ["extmod/ulab", "lib/", "tools/", "ports/", "data/nvm.toml"]
elif TARGET == "website":
submodules = ["tools/adabot/", "frozen/"]
submodules = ["tools/adabot/"]
submodules_tags = ["frozen/"]
elif TARGET == "pre-commit":
submodules = ["extmod/ulab"]
else:

View File

@ -42,15 +42,15 @@ from shared_bindings_matrix import (
all_ports_all_boards,
)
PORT_TO_BUILD_JOB = {
"atmel-samd": "arm",
PORT_TO_ARCH = {
"atmel-samd": "atmel",
"broadcom": "aarch",
"cxd56": "arm",
"espressif": "esp",
"litex": "riscv",
"mimxrt10xx": "arm",
"nrf": "nrf",
"raspberrypi": "rpi",
"nrf": "arm",
"raspberrypi": "arm",
"stm": "arm",
}
@ -62,6 +62,24 @@ IGNORE = [
# Files in these directories never influence board builds
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:
print("Using files list on commandline")
changed_files = sys.argv[1:]
@ -92,6 +110,9 @@ def set_output(name: str, value):
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
boards_info_json = build_board_info.get_board_mapping()
all_board_ids = set()
@ -203,14 +224,13 @@ def set_boards_to_build(build_all: bool):
boards_to_build = all_board_ids
break
# Split boards by build job.
build_job_to_boards = {"aarch": [], "arm": [], "esp": [], "nrf": [], "riscv": [], "rpi": []}
# Split boards by architecture.
arch_to_boards = {"aarch": [], "arm": [], "atmel": [], "esp": [], "riscv": []}
# Append previously failed boards
for build_job in build_job_to_boards:
job_name = f"build-{build_job}"
if job_name in last_failed_jobs:
for board in last_failed_jobs[job_name]:
for arch in arch_to_boards:
if arch in last_failed_jobs:
for board in last_failed_jobs[arch]:
if not board in boards_to_build:
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 not port:
continue
build_job_to_boards[PORT_TO_BUILD_JOB[port]].append(board)
arch_to_boards[PORT_TO_ARCH[port]].append(board)
print(" ", board)
# Set the step outputs for each architecture
for build_job in build_job_to_boards:
set_output(f"boards-{build_job}", json.dumps(build_job_to_boards[build_job]))
for arch in arch_to_boards:
set_output(f"boards-{arch}", json.dumps(arch_to_boards[arch]))
def set_docs_to_build(build_doc: bool):
if not build_doc:
if "build-doc" in last_failed_jobs:
if last_failed_jobs.get("build-doc"):
build_doc = True
else:
doc_pattern = re.compile(
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))$"
)
doc_pattern = re.compile(PATTERN_DOCS)
github_workspace = os.environ.get("GITHUB_WORKSPACE") or ""
github_workspace = github_workspace and github_workspace + "/"
for p in changed_files:
if doc_pattern.search(p) and (
for file in changed_files:
if doc_pattern.search(file) and (
(
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,
shell=True,
).stdout
)
if p.endswith(".c")
if file.endswith(".c")
else True
):
build_doc = True
@ -263,6 +281,25 @@ def set_docs_to_build(build_doc: bool):
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():
if not changed_files:
print("Building all docs/boards")
@ -275,6 +312,7 @@ def check_changed_files():
def main():
build_all = check_changed_files()
set_docs_to_build(build_all)
set_windows_to_build(build_all)
set_boards_to_build(build_all)