Merge branch 'adafruit:main' into main

This commit is contained in:
flom_84 2023-03-13 13:02:03 +01:00 committed by GitHub
commit eca9393241
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
223 changed files with 8284 additions and 1725 deletions

View File

@ -9,54 +9,31 @@ inputs:
- cache
- restore
platform:
port:
required: false
default: none
type: choice
options:
- arm
- aarch
- esp
- riscv
- none
type: string
runs:
using: composite
steps:
# aarch
- name: Get aarch toolchain
if: inputs.platform == 'aarch'
run: |
wget --no-verbose https://adafruit-circuit-python.s3.amazonaws.com/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
sudo tar -C /usr --strip-components=1 -xaf gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
sudo apt-get install -y mtools
shell: bash
- name: Install mkfs.fat
if: inputs.platform == 'aarch'
run: |
wget https://github.com/dosfstools/dosfstools/releases/download/v4.2/dosfstools-4.2.tar.gz
tar -xaf dosfstools-4.2.tar.gz
cd dosfstools-4.2
./configure
make -j 2
cd src
echo >> $GITHUB_PATH $(pwd)
shell: bash
# arm
- name: Get arm toolchain
if: inputs.platform == 'aarch' || inputs.platform == 'arm'
if: >-
inputs.port != 'none' &&
inputs.port != 'litex' &&
inputs.port != 'espressif'
uses: carlosperate/arm-none-eabi-gcc-action@v1
with:
release: '10-2020-q4'
# esp
- name: Get esp toolchain
if: inputs.platform == 'esp'
# espressif
- name: Get espressif toolchain
if: inputs.port == 'espressif'
run: sudo apt-get install -y ninja-build
shell: bash
- name: Install IDF tools
if: inputs.platform == 'esp'
if: inputs.port == 'espressif'
run: |
echo "Installing ESP-IDF tools"
$IDF_PATH/tools/idf_tools.py --non-interactive install required
@ -66,24 +43,16 @@ runs:
rm -rf $IDF_TOOLS_PATH/dist
shell: bash
- name: Set environment
if: inputs.platform == 'esp'
if: inputs.port == 'espressif'
run: |
source $IDF_PATH/export.sh
echo >> $GITHUB_ENV "IDF_PYTHON_ENV_PATH=$IDF_PYTHON_ENV_PATH"
echo >> $GITHUB_PATH "$PATH"
shell: bash
# riscv
- name: Get riscv toolchain
if: inputs.platform == 'riscv'
run: |
wget https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-centos6.tar.gz
sudo tar -C /usr --strip-components=1 -xaf riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-centos6.tar.gz
shell: bash
# common
- name: Cache python dependencies
if: inputs.platform != 'esp'
if: inputs.port != 'espressif'
uses: ./.github/actions/deps/python
with:
action: ${{ inputs.action }}

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

@ -0,0 +1,36 @@
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 broadcom
if: steps.board-to-port.outputs.port == 'broadcom'
uses: ./.github/actions/deps/ports/broadcom
- name: Set up espressif
if: steps.board-to-port.outputs.port == 'espressif'
uses: ./.github/actions/deps/ports/espressif
- name: Set up litex
if: steps.board-to-port.outputs.port == 'litex'
uses: ./.github/actions/deps/ports/litex
- name: Set up nrf
if: steps.board-to-port.outputs.port == 'nrf'
uses: ./.github/actions/deps/ports/nrf

View File

@ -0,0 +1,21 @@
name: Fetch broadcom port deps
runs:
using: composite
steps:
- name: Get broadcom toolchain
run: |
wget --no-verbose https://adafruit-circuit-python.s3.amazonaws.com/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
sudo tar -C /usr --strip-components=1 -xaf gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
sudo apt-get install -y mtools
shell: bash
- name: Install mkfs.fat
run: |
wget https://github.com/dosfstools/dosfstools/releases/download/v4.2/dosfstools-4.2.tar.gz
tar -xaf dosfstools-4.2.tar.gz
cd dosfstools-4.2
./configure
make -j 2
cd src
echo >> $GITHUB_PATH $(pwd)
shell: bash

View File

@ -0,0 +1,10 @@
name: Fetch litex port deps
runs:
using: composite
steps:
- name: Get litex toolchain
run: |
wget https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-centos6.tar.gz
sudo tar -C /usr --strip-components=1 -xaf riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-centos6.tar.gz
shell: bash

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

@ -3,9 +3,6 @@ name: Build boards
on:
workflow_call:
inputs:
platform:
required: true
type: string
boards:
required: true
type: string
@ -19,7 +16,7 @@ on:
required: false
jobs:
build:
board:
runs-on: ubuntu-22.04
env:
CP_VERSION: ${{ inputs.cp-version }}
@ -38,15 +35,17 @@ jobs:
with:
python-version: 3.x
- name: Set up port
if: inputs.platform == 'esp'
uses: ./.github/actions/deps/ports/espressif
id: set-up-port
uses: ./.github/actions/deps/ports
with:
board: ${{ matrix.board }}
- name: Set up submodules
id: set-up-submodules
uses: ./.github/actions/deps/submodules
- name: Set up external
uses: ./.github/actions/deps/external
with:
platform: ${{ inputs.platform }}
port: ${{ steps.set-up-port.outputs.port }}
- name: Set up mpy-cross
if: steps.set-up-submodules.outputs.frozen == 'True'
uses: ./.github/actions/mpy_cross

View File

@ -9,8 +9,6 @@ on:
pull_request:
release:
types: [published]
check_suite:
types: [rerequested]
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
@ -18,15 +16,11 @@ concurrency:
jobs:
scheduler:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
outputs:
build-doc: ${{ steps.set-matrix.outputs.build-doc }}
build-boards: ${{ steps.set-matrix.outputs.build-boards }}
boards-aarch: ${{ steps.set-matrix.outputs.boards-aarch }}
boards-arm: ${{ steps.set-matrix.outputs.boards-arm }}
boards-esp: ${{ steps.set-matrix.outputs.boards-esp }}
boards-riscv: ${{ steps.set-matrix.outputs.boards-riscv }}
boards-rpi: ${{ steps.set-matrix.outputs.boards-rpi }}
docs: ${{ steps.set-matrix.outputs.docs }}
ports: ${{ steps.set-matrix.outputs.ports }}
windows: ${{ steps.set-matrix.outputs.windows }}
cp-version: ${{ steps.set-up-submodules.outputs.version }}
steps:
- name: Dump GitHub context
@ -54,53 +48,59 @@ 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: Set head sha
- name: Get last commit with checks
id: get-last-commit-with-checks
if: github.event_name == 'pull_request'
run: echo "HEAD_SHA=$(git show -s --format=%s $GITHUB_SHA | grep -o -P "(?<=Merge ).*(?= into)")" >> $GITHUB_ENV
- name: Set base sha
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 (pull)
if: github.event_name == 'pull_request'
run: echo "HEAD_SHA=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
- name: Set base sha (pull)
if: github.event_name == 'pull_request'
run: |
git fetch --no-tags --no-recurse-submodules --depth=$((DEPTH + 1)) origin $HEAD_SHA
echo "BASE_SHA=$(git rev-list $HEAD_SHA --skip=$DEPTH --max-count=1)" >> $GITHUB_ENV
env:
DEPTH: ${{ steps.get-last-commit-with-checks.outputs.commit_depth || github.event.pull_request.commits }}
- name: Set head sha (push)
if: github.event_name == 'push'
run: echo "HEAD_SHA=${{ github.event.after }}" >> $GITHUB_ENV
- name: Set base sha (push)
if: github.event_name == 'push'
run: git cat-file -e $SHA && echo "BASE_SHA=$SHA" >> $GITHUB_ENV || true
env:
SHA: ${{ github.event.before }}
- name: Get changes
id: get-changes
if: github.event_name == 'pull_request'
if: env.BASE_SHA && env.HEAD_SHA
run: echo $(git diff $BASE_SHA...$HEAD_SHA --name-only) | echo "changed_files=[\"$(sed "s/ /\", \"/g")\"]" >> $GITHUB_OUTPUT
- name: Set matrix
id: set-matrix
working-directory: tools
run: python3 -u ci_set_matrix.py
working-directory: tools
env:
CHANGED_FILES: ${{ steps.get-changes.outputs.changed_files }}
LAST_FAILED_JOBS: ${{ steps.get-last-commit-with-checks.outputs.check_runs }}
tests:
needs: scheduler
if: needs.scheduler.outputs.build-boards == 'True'
uses: ./.github/workflows/run-tests.yml
with:
cp-version: ${{ needs.scheduler.outputs.cp-version }}
mpy-cross:
needs: scheduler
if: needs.scheduler.outputs.build-boards == 'True'
if: needs.scheduler.outputs.ports != '{}'
uses: ./.github/workflows/build-mpy-cross.yml
secrets: inherit
with:
@ -109,7 +109,7 @@ jobs:
mpy-cross-mac:
runs-on: macos-11
needs: scheduler
if: ${{ needs.scheduler.outputs.build-boards == 'True' }}
if: needs.scheduler.outputs.ports != '{}'
env:
CP_VERSION: ${{ needs.scheduler.outputs.cp-version }}
steps:
@ -161,10 +161,10 @@ jobs:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
build-doc:
docs:
runs-on: ubuntu-22.04
needs: scheduler
if: ${{ needs.scheduler.outputs.build-doc == 'True' }}
if: needs.scheduler.outputs.docs == 'True'
env:
CP_VERSION: ${{ needs.scheduler.outputs.cp-version }}
steps:
@ -219,52 +219,83 @@ jobs:
[ -z "$TWINE_USERNAME" ] || echo "Uploading dev release to PyPi"
[ -z "$TWINE_USERNAME" ] || twine upload circuitpython-stubs/dist/*
aarch:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-aarch != '[]' }}
uses: ./.github/workflows/build-boards.yml
secrets: inherit
with:
platform: aarch
boards: ${{ needs.scheduler.outputs.boards-aarch }}
cp-version: ${{ needs.scheduler.outputs.cp-version }}
windows:
runs-on: windows-2022
needs: scheduler
if: needs.scheduler.outputs.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
arm:
ports:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-arm != '[]' }}
if: needs.scheduler.outputs.ports != '{}'
uses: ./.github/workflows/build-boards.yml
secrets: inherit
strategy:
fail-fast: false
matrix:
port: ${{ fromJSON(needs.scheduler.outputs.ports).ports }}
with:
platform: arm
boards: ${{ needs.scheduler.outputs.boards-arm }}
cp-version: ${{ needs.scheduler.outputs.cp-version }}
esp:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-esp != '[]' }}
uses: ./.github/workflows/build-boards.yml
secrets: inherit
with:
platform: esp
boards: ${{ needs.scheduler.outputs.boards-esp }}
cp-version: ${{ needs.scheduler.outputs.cp-version }}
riscv:
needs: [scheduler, mpy-cross, tests]
if: ${{ needs.scheduler.outputs.boards-riscv != '[]' }}
uses: ./.github/workflows/build-boards.yml
secrets: inherit
with:
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 }}
boards: ${{ toJSON(fromJSON(needs.scheduler.outputs.ports)[matrix.port]) }}
cp-version: ${{ needs.scheduler.outputs.cp-version }}

View File

@ -6,7 +6,7 @@ name: Update CircuitPython.org
on:
release:
types: [published, rerequested]
types: [published]
jobs:
website:

View File

@ -32,16 +32,6 @@ run-name: ${{ inputs.board }}-${{ inputs.language }}-${{ inputs.version }}${{ in
jobs:
build:
runs-on: ubuntu-22.04
env:
PLATFORM_atmel-samd: arm
PLATFORM_broadcom: aarch
PLATFORM_cxd56: arm
PLATFORM_espressif: esp
PLATFORM_litex: riscv
PLATFORM_mimxrt10xx: arm
PLATFORM_nrf: arm
PLATFORM_raspberrypi: arm
PLATFORM_stm: arm
steps:
- name: Set up repository
run: |
@ -51,20 +41,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 +60,7 @@ jobs:
uses: ./.github/actions/deps/external
with:
action: cache
platform: ${{ env.PLATFORM }}
port: ${{ 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 +81,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

@ -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

View File

@ -5,8 +5,8 @@
name: pre-commit
on:
pull_request:
push:
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}

View File

@ -9,7 +9,7 @@ on:
jobs:
run:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
@ -31,7 +31,7 @@ jobs:
- name: Set up python
uses: actions/setup-python@v4
with:
python-version: 3.x
python-version: 3.8
- name: Set up submodules
uses: ./.github/actions/deps/submodules
with:

11
.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
@ -313,8 +309,7 @@
branch = circuitpython
[submodule "ports/raspberrypi/lib/cyw43-driver"]
path = ports/raspberrypi/lib/cyw43-driver
url = https://github.com/adafruit/cyw43-driver.git
branch = circuitpython8
url = https://github.com/georgerobotics/cyw43-driver.git
[submodule "ports/raspberrypi/lib/lwip"]
path = ports/raspberrypi/lib/lwip
url = https://github.com/adafruit/lwip.git
@ -328,3 +323,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

@ -109,7 +109,7 @@ Pre-commit also requires some additional programs to be installed through your p
* Standard Unix tools such as make, find, etc
* The gettext package, any modern version
* uncrustify version 0.71 (0.72 is also tested)
* uncrustify version 0.71 (0.72 is also tested and OK; 0.75 is not OK)
Each time you create a git commit, the pre-commit quality checks will be run. You can also run them e.g., with `pre-commit run foo.c` or `pre-commit run --all` to run on all files whether modified or not.

@ -1 +1 @@
Subproject commit 2d292ad4e67890d4b85b027431ba9fef7bf561fd
Subproject commit 73fafcbe4c66b23df63be31e9227353b695abb08

@ -1 +1 @@
Subproject commit 1590d81f7d1474b25aed6a0cb793c7e6dc7634ec
Subproject commit 911201504a269dbfc49b04ca59bc54adabd4716a

@ -1 +1 @@
Subproject commit d645fc2aded3606e5b0c17689e9f29e7e56bb612
Subproject commit 187279a95e5cdd634d233af59352558cea4c1227

@ -1 +1 @@
Subproject commit 8e0f081a0fcc94053b8ef480a916b10855a3c0d5
Subproject commit 5433ba3760ca605267223de883a44cb8394f40a5

@ -1 +1 @@
Subproject commit 61ca58788aabd53558e10c32064a1304aa7454f2
Subproject commit 240fe51935f4a9def33ef347d40b13862a60b7ac

@ -1 +1 @@
Subproject commit f26bead58d3c4036eced586d275396816e92e80a
Subproject commit 9c3de3abce00b50ba936f4f8daad0a8a6bee34a6

@ -1 +1 @@
Subproject commit 96b4a05c8a225ad7ddc392be7fb69efebe151981
Subproject commit af1cba8a7e4e3950fcc5367e9c55a024d9ab9f64

@ -1 +1 @@
Subproject commit 203d0b1489cb90a39f8a780570287f1a5bd610a0
Subproject commit 558fff7223178eae6228e5262f3a08d3a4101394

@ -1 +1 @@
Subproject commit 168624262c18f5ee80ec392c0844d6a4c6548760
Subproject commit 91b6867aca2b0511571fed14ab051d37f1f1544c

View File

@ -0,0 +1,236 @@
//
// GIF Animator
// written by Larry Bank
// bitbank@pobox.com
// Arduino port started 7/5/2020
// Original GIF code written 20+ years ago :)
// The goal of this code is to decode images up to 480x320
// using no more than 22K of RAM (if sent directly to an LCD display)
//
// Copyright 2020 BitBank Software, Inc. All Rights Reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//===========================================================================
#include "AnimatedGIF.h"
// Here is all of the actual code...
#include "gif.inl"
//
// Memory initialization
//
int AnimatedGIF::open(uint8_t *pData, int iDataSize, GIF_DRAW_CALLBACK *pfnDraw)
{
_gif.iError = GIF_SUCCESS;
_gif.pfnRead = readMem;
_gif.pfnSeek = seekMem;
_gif.pfnDraw = pfnDraw;
_gif.pfnOpen = NULL;
_gif.pfnClose = NULL;
_gif.GIFFile.iSize = iDataSize;
_gif.GIFFile.pData = pData;
return GIFInit(&_gif);
} /* open() */
int AnimatedGIF::openFLASH(uint8_t *pData, int iDataSize, GIF_DRAW_CALLBACK *pfnDraw)
{
_gif.iError = GIF_SUCCESS;
_gif.pfnRead = readFLASH;
_gif.pfnSeek = seekMem;
_gif.pfnDraw = pfnDraw;
_gif.pfnOpen = NULL;
_gif.pfnClose = NULL;
_gif.GIFFile.iSize = iDataSize;
_gif.GIFFile.pData = pData;
return GIFInit(&_gif);
} /* openFLASH() */
//
// Returns the first comment block found (if any)
//
int AnimatedGIF::getComment(char *pDest)
{
int32_t iOldPos;
iOldPos = _gif.GIFFile.iPos; // keep old position
(*_gif.pfnSeek)(&_gif.GIFFile, _gif.iCommentPos);
(*_gif.pfnRead)(&_gif.GIFFile, (uint8_t *)pDest, _gif.sCommentLen);
(*_gif.pfnSeek)(&_gif.GIFFile, iOldPos);
pDest[_gif.sCommentLen] = 0; // zero terminate the string
return (int)_gif.sCommentLen;
} /* getComment() */
//
// Allocate a block of memory to hold the entire canvas (as 8-bpp)
//
int AnimatedGIF::allocFrameBuf(GIF_ALLOC_CALLBACK *pfnAlloc)
{
if (_gif.iCanvasWidth > 0 && _gif.iCanvasHeight > 0 && _gif.pFrameBuffer == NULL)
{
// Allocate a little extra space for the current line
// as RGB565 or RGB888
int iCanvasSize = _gif.iCanvasWidth * (_gif.iCanvasHeight+3);
_gif.pFrameBuffer = (unsigned char *)(*pfnAlloc)(iCanvasSize);
if (_gif.pFrameBuffer == NULL)
return GIF_ERROR_MEMORY;
return GIF_SUCCESS;
}
return GIF_INVALID_PARAMETER;
} /* allocFrameBuf() */
//
// Set the DRAW callback behavior to RAW (default)
// or COOKED (requires allocating a frame buffer)
//
int AnimatedGIF::setDrawType(int iType)
{
if (iType != GIF_DRAW_RAW && iType != GIF_DRAW_COOKED)
return GIF_INVALID_PARAMETER; // invalid drawing mode
_gif.ucDrawType = (uint8_t)iType;
return GIF_SUCCESS;
} /* setDrawType() */
//
// Release the memory used by the frame buffer
//
int AnimatedGIF::freeFrameBuf(GIF_FREE_CALLBACK *pfnFree)
{
if (_gif.pFrameBuffer)
{
(*pfnFree)(_gif.pFrameBuffer);
_gif.pFrameBuffer = NULL;
return GIF_SUCCESS;
}
return GIF_INVALID_PARAMETER;
} /* freeFrameBuf() */
//
// Return a pointer to the frame buffer (if it was allocated)
//
uint8_t * AnimatedGIF::getFrameBuf()
{
return _gif.pFrameBuffer;
} /* getFrameBuf() */
int AnimatedGIF::getCanvasWidth()
{
return _gif.iCanvasWidth;
} /* getCanvasWidth() */
int AnimatedGIF::getCanvasHeight()
{
return _gif.iCanvasHeight;
} /* getCanvasHeight() */
int AnimatedGIF::getLoopCount()
{
return _gif.iRepeatCount;
} /* getLoopCount() */
int AnimatedGIF::getInfo(GIFINFO *pInfo)
{
return GIF_getInfo(&_gif, pInfo);
} /* getInfo() */
int AnimatedGIF::getLastError()
{
return _gif.iError;
} /* getLastError() */
//
// File (SD/MMC) based initialization
//
int AnimatedGIF::open(const char *szFilename, GIF_OPEN_CALLBACK *pfnOpen, GIF_CLOSE_CALLBACK *pfnClose, GIF_READ_CALLBACK *pfnRead, GIF_SEEK_CALLBACK *pfnSeek, GIF_DRAW_CALLBACK *pfnDraw)
{
_gif.iError = GIF_SUCCESS;
_gif.pfnRead = pfnRead;
_gif.pfnSeek = pfnSeek;
_gif.pfnDraw = pfnDraw;
_gif.pfnOpen = pfnOpen;
_gif.pfnClose = pfnClose;
_gif.GIFFile.fHandle = (*pfnOpen)(szFilename, &_gif.GIFFile.iSize);
if (_gif.GIFFile.fHandle == NULL) {
_gif.iError = GIF_FILE_NOT_OPEN;
return 0;
}
return GIFInit(&_gif);
} /* open() */
void AnimatedGIF::close()
{
if (_gif.pfnClose)
(*_gif.pfnClose)(_gif.GIFFile.fHandle);
} /* close() */
void AnimatedGIF::reset()
{
(*_gif.pfnSeek)(&_gif.GIFFile, 0);
} /* reset() */
void AnimatedGIF::begin(unsigned char ucPaletteType)
{
memset(&_gif, 0, sizeof(_gif));
if (ucPaletteType != GIF_PALETTE_RGB565_LE && ucPaletteType != GIF_PALETTE_RGB565_BE && ucPaletteType != GIF_PALETTE_RGB888)
_gif.iError = GIF_INVALID_PARAMETER;
_gif.ucPaletteType = ucPaletteType;
_gif.ucDrawType = GIF_DRAW_RAW; // assume RAW pixel handling
_gif.pFrameBuffer = NULL;
} /* begin() */
//
// Play a single frame
// returns:
// 1 = good result and more frames exist
// 0 = no more frames exist, a frame may or may not have been played: use getLastError() and look for GIF_SUCCESS to know if a frame was played
// -1 = error
int AnimatedGIF::playFrame(bool bSync, int *delayMilliseconds, void *pUser)
{
int rc;
#if !defined( __MACH__ ) && !defined( __LINUX__ )
long lTime = millis();
#endif
if (_gif.GIFFile.iPos >= _gif.GIFFile.iSize-1) // no more data exists
{
(*_gif.pfnSeek)(&_gif.GIFFile, 0); // seek to start
}
if (GIFParseInfo(&_gif, 0))
{
_gif.pUser = pUser;
if (_gif.iError == GIF_EMPTY_FRAME) // don't try to decode it
return 0;
rc = DecodeLZW(&_gif, 0);
if (rc != 0) // problem
return -1;
}
else
{
// The file is "malformed" in that there is a bunch of non-image data after
// the last frame. Return as if all is well, though if needed getLastError()
// can be used to see if a frame was actually processed:
// GIF_SUCCESS -> frame processed, GIF_EMPTY_FRAME -> no frame processed
if (_gif.iError == GIF_EMPTY_FRAME)
{
if (delayMilliseconds)
*delayMilliseconds = 0;
return 0;
}
return -1; // error parsing the frame info, we may be at the end of the file
}
// Return 1 for more frames or 0 if this was the last frame
if (bSync)
{
#if !defined( __MACH__ ) && !defined( __LINUX__ )
lTime = millis() - lTime;
if (lTime < _gif.iFrameDelay) // need to pause a bit
delay(_gif.iFrameDelay - lTime);
#endif // __LINUX__
}
if (delayMilliseconds) // if not NULL, return the frame delay time
*delayMilliseconds = _gif.iFrameDelay;
return (_gif.GIFFile.iPos < _gif.GIFFile.iSize-10);
} /* playFrame() */

View File

@ -0,0 +1,216 @@
// Copyright 2020 BitBank Software, Inc. All Rights Reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//===========================================================================
#ifndef __ANIMATEDGIF__
#define __ANIMATEDGIF__
#if defined( PICO_BUILD ) || defined( __MACH__ ) || defined( __LINUX__ ) || defined( __MCUXPRESSO )
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#define memcpy_P memcpy
#define PROGMEM
#else
#include <Arduino.h>
#endif
//
// GIF Animator
// Written by Larry Bank
// Copyright (c) 2020 BitBank Software, Inc.
// bitbank@pobox.com
//
// Designed to decode images up to 480x320
// using less than 22K of RAM
//
/* GIF Defines and variables */
#define MAX_CHUNK_SIZE 255
#define LZW_BUF_SIZE (6*MAX_CHUNK_SIZE)
#define LZW_HIGHWATER (4*MAX_CHUNK_SIZE)
#ifdef __LINUX__
#define MAX_WIDTH 2048
#else
#define MAX_WIDTH 320
#endif // __LINUX__
#define FILE_BUF_SIZE 4096
#define PIXEL_FIRST 0
#define PIXEL_LAST 4096
#define LINK_UNUSED 5911 // 0x1717 to use memset
#define LINK_END 5912
#define MAX_HASH 5003
#define MAXMAXCODE 4096
enum {
GIF_PALETTE_RGB565_LE = 0, // little endian (default)
GIF_PALETTE_RGB565_BE, // big endian
GIF_PALETTE_RGB888 // original 24-bpp entries
};
// for compatibility with older code
#define LITTLE_ENDIAN_PIXELS GIF_PALETTE_RGB565_LE
#define BIG_ENDIAN_PIXELS GIF_PALETTE_RGB565_BE
//
// Draw callback pixel type
// RAW = 8-bit palettized pixels requiring transparent pixel handling
// COOKED = 16 or 24-bpp fully rendered pixels ready for display
//
enum {
GIF_DRAW_RAW = 0,
GIF_DRAW_COOKED
};
enum {
GIF_SUCCESS = 0,
GIF_DECODE_ERROR,
GIF_TOO_WIDE,
GIF_INVALID_PARAMETER,
GIF_UNSUPPORTED_FEATURE,
GIF_FILE_NOT_OPEN,
GIF_EARLY_EOF,
GIF_EMPTY_FRAME,
GIF_BAD_FILE,
GIF_ERROR_MEMORY
};
typedef struct gif_file_tag
{
int32_t iPos; // current file position
int32_t iSize; // file size
uint8_t *pData; // memory file pointer
void * fHandle; // class pointer to File/SdFat or whatever you want
} GIFFILE;
typedef struct gif_info_tag
{
int32_t iFrameCount; // total frames in file
int32_t iDuration; // duration of animation in milliseconds
int32_t iMaxDelay; // maximum frame delay
int32_t iMinDelay; // minimum frame delay
} GIFINFO;
typedef struct gif_draw_tag
{
int iX, iY; // Corner offset of this frame on the canvas
int y; // current line being drawn (0 = top line of image)
int iWidth, iHeight; // size of this frame
void *pUser; // user supplied pointer
uint8_t *pPixels; // 8-bit source pixels for this line
uint16_t *pPalette; // little or big-endian RGB565 palette entries (default)
uint8_t *pPalette24; // RGB888 palette (optional)
uint8_t ucTransparent; // transparent color
uint8_t ucHasTransparency; // flag indicating the transparent color is in use
uint8_t ucDisposalMethod; // frame disposal method
uint8_t ucBackground; // background color
uint8_t ucIsGlobalPalette; // Flag to indicate that a global palette, rather than a local palette is being used
} GIFDRAW;
// Callback function prototypes
typedef int32_t (GIF_READ_CALLBACK)(GIFFILE *pFile, uint8_t *pBuf, int32_t iLen);
typedef int32_t (GIF_SEEK_CALLBACK)(GIFFILE *pFile, int32_t iPosition);
typedef void (GIF_DRAW_CALLBACK)(GIFDRAW *pDraw);
typedef void * (GIF_OPEN_CALLBACK)(const char *szFilename, int32_t *pFileSize);
typedef void (GIF_CLOSE_CALLBACK)(void *pHandle);
typedef void * (GIF_ALLOC_CALLBACK)(uint32_t iSize);
typedef void (GIF_FREE_CALLBACK)(void *buffer);
//
// our private structure to hold a GIF image decode state
//
typedef struct gif_image_tag
{
int iWidth, iHeight, iCanvasWidth, iCanvasHeight;
int iX, iY; // GIF corner offset
int iBpp;
int iError; // last error
int iFrameDelay; // delay in milliseconds for this frame
int iRepeatCount; // NETSCAPE animation repeat count. 0=forever
int iXCount, iYCount; // decoding position in image (countdown values)
int iLZWOff; // current LZW data offset
int iLZWSize; // current quantity of data in the LZW buffer
int iCommentPos; // file offset of start of comment data
short sCommentLen; // length of comment
GIF_READ_CALLBACK *pfnRead;
GIF_SEEK_CALLBACK *pfnSeek;
GIF_DRAW_CALLBACK *pfnDraw;
GIF_OPEN_CALLBACK *pfnOpen;
GIF_CLOSE_CALLBACK *pfnClose;
GIFFILE GIFFile;
void *pUser;
unsigned char *pFrameBuffer;
unsigned char *pPixels, *pOldPixels;
unsigned char ucLineBuf[MAX_WIDTH]; // current line
unsigned char ucFileBuf[FILE_BUF_SIZE]; // holds temp data and pixel stack
unsigned short pPalette[384]; // can hold RGB565 or RGB888 - set in begin()
unsigned short pLocalPalette[384]; // color palettes for GIF images
unsigned char ucLZW[LZW_BUF_SIZE]; // holds 6 chunks (6x255) of GIF LZW data packed together
unsigned short usGIFTable[4096];
unsigned char ucGIFPixels[8192];
unsigned char bEndOfFrame;
unsigned char ucGIFBits, ucBackground, ucTransparent, ucCodeStart, ucMap, bUseLocalPalette;
unsigned char ucPaletteType; // RGB565 or RGB888
unsigned char ucDrawType; // RAW or COOKED
} GIFIMAGE;
#ifdef __cplusplus
//
// The GIF class wraps portable C code which does the actual work
//
class AnimatedGIF
{
public:
int open(uint8_t *pData, int iDataSize, GIF_DRAW_CALLBACK *pfnDraw);
int openFLASH(uint8_t *pData, int iDataSize, GIF_DRAW_CALLBACK *pfnDraw);
int open(const char *szFilename, GIF_OPEN_CALLBACK *pfnOpen, GIF_CLOSE_CALLBACK *pfnClose, GIF_READ_CALLBACK *pfnRead, GIF_SEEK_CALLBACK *pfnSeek, GIF_DRAW_CALLBACK *pfnDraw);
void close();
void reset();
void begin(unsigned char ucPaletteType = GIF_PALETTE_RGB565_LE);
void begin(int iEndian, unsigned char ucPaletteType) { begin(ucPaletteType); };
int playFrame(bool bSync, int *delayMilliseconds, void *pUser = NULL);
int getCanvasWidth();
int allocFrameBuf(GIF_ALLOC_CALLBACK *pfnAlloc);
int setDrawType(int iType);
int freeFrameBuf(GIF_FREE_CALLBACK *pfnFree);
uint8_t *getFrameBuf();
int getCanvasHeight();
int getLoopCount();
int getInfo(GIFINFO *pInfo);
int getLastError();
int getComment(char *destBuffer);
private:
GIFIMAGE _gif;
};
#else
// C interface
int GIF_openRAM(GIFIMAGE *pGIF, uint8_t *pData, int iDataSize, GIF_DRAW_CALLBACK *pfnDraw);
int GIF_openFile(GIFIMAGE *pGIF, const char *szFilename, GIF_DRAW_CALLBACK *pfnDraw);
void GIF_close(GIFIMAGE *pGIF);
void GIF_begin(GIFIMAGE *pGIF, unsigned char ucPaletteType);
void GIF_reset(GIFIMAGE *pGIF);
int GIF_playFrame(GIFIMAGE *pGIF, int *delayMilliseconds, void *pUser);
int GIF_getCanvasWidth(GIFIMAGE *pGIF);
int GIF_getCanvasHeight(GIFIMAGE *pGIF);
int GIF_getComment(GIFIMAGE *pGIF, char *destBuffer);
int GIF_getInfo(GIFIMAGE *pGIF, GIFINFO *pInfo);
int GIF_getLastError(GIFIMAGE *pGIF);
int GIF_getLoopCount(GIFIMAGE *pGIF);
#endif // __cplusplus
// Due to unaligned memory causing an exception, we have to do these macros the slow way
#define INTELSHORT(p) ((*p) + (*(p+1)<<8))
#define INTELLONG(p) ((*p) + (*(p+1)<<8) + (*(p+2)<<16) + (*(p+3)<<24))
#define MOTOSHORT(p) (((*(p))<<8) + (*(p+1)))
#define MOTOLONG(p) (((*p)<<24) + ((*(p+1))<<16) + ((*(p+2))<<8) + (*(p+3)))
// Must be a 32-bit target processor
#define REGISTER_WIDTH 32
#endif // __ANIMATEDGIF__

View File

@ -0,0 +1,182 @@
// Copyright 2020 BitBank Software, Inc. All Rights Reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ===========================================================================
//
// Modified 2023 by Mark Komus to work for CircuitPython
//
#ifndef __ANIMATEDGIF__
#define __ANIMATEDGIF__
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
//
// GIF Animator
// Written by Larry Bank
// Copyright (c) 2020 BitBank Software, Inc.
// bitbank@pobox.com
//
// Designed to decode images up to 480x320
// using less than 22K of RAM
//
/* GIF Defines and variables */
#define MAX_CHUNK_SIZE 255
#define LZW_BUF_SIZE (6 * MAX_CHUNK_SIZE)
#define LZW_HIGHWATER (4 * MAX_CHUNK_SIZE)
#define MAX_WIDTH 320
#define FILE_BUF_SIZE 4096
#define PIXEL_FIRST 0
#define PIXEL_LAST 4096
#define LINK_UNUSED 5911 // 0x1717 to use memset
#define LINK_END 5912
#define MAX_HASH 5003
#define MAXMAXCODE 4096
enum {
GIF_PALETTE_RGB565_LE = 0, // little endian (default)
GIF_PALETTE_RGB565_BE, // big endian
GIF_PALETTE_RGB888 // original 24-bpp entries
};
// for compatibility with older code
#define LITTLE_ENDIAN_PIXELS GIF_PALETTE_RGB565_LE
#define BIG_ENDIAN_PIXELS GIF_PALETTE_RGB565_BE
//
// Draw callback pixel type
// RAW = 8-bit palettized pixels requiring transparent pixel handling
// COOKED = 16 or 24-bpp fully rendered pixels ready for display
//
enum {
GIF_DRAW_RAW = 0,
GIF_DRAW_COOKED
};
enum {
GIF_SUCCESS = 0,
GIF_DECODE_ERROR,
GIF_TOO_WIDE,
GIF_INVALID_PARAMETER,
GIF_UNSUPPORTED_FEATURE,
GIF_FILE_NOT_OPEN,
GIF_EARLY_EOF,
GIF_EMPTY_FRAME,
GIF_BAD_FILE,
GIF_ERROR_MEMORY
};
typedef struct gif_file_tag
{
int32_t iPos; // current file position
int32_t iSize; // file size
uint8_t *pData; // memory file pointer
void *fHandle; // class pointer to File/SdFat or whatever you want
} GIFFILE;
typedef struct gif_info_tag
{
int32_t iFrameCount; // total frames in file
int32_t iDuration; // duration of animation in milliseconds
int32_t iMaxDelay; // maximum frame delay
int32_t iMinDelay; // minimum frame delay
} GIFINFO;
typedef struct gif_draw_tag
{
int iX, iY; // Corner offset of this frame on the canvas
int y; // current line being drawn (0 = top line of image)
int iWidth, iHeight; // size of this frame
void *pUser; // user supplied pointer
uint8_t *pPixels; // 8-bit source pixels for this line
uint16_t *pPalette; // little or big-endian RGB565 palette entries (default)
uint8_t *pPalette24; // RGB888 palette (optional)
uint8_t ucTransparent; // transparent color
uint8_t ucHasTransparency; // flag indicating the transparent color is in use
uint8_t ucDisposalMethod; // frame disposal method
uint8_t ucBackground; // background color
uint8_t ucIsGlobalPalette; // Flag to indicate that a global palette, rather than a local palette is being used
} GIFDRAW;
// Callback function prototypes
typedef int32_t (GIF_READ_CALLBACK)(GIFFILE *pFile, uint8_t *pBuf, int32_t iLen);
typedef int32_t (GIF_SEEK_CALLBACK)(GIFFILE *pFile, int32_t iPosition);
typedef void (GIF_DRAW_CALLBACK)(GIFDRAW *pDraw);
typedef void * (GIF_OPEN_CALLBACK)(const char *szFilename, int32_t *pFileSize);
typedef void (GIF_CLOSE_CALLBACK)(void *pHandle);
typedef void * (GIF_ALLOC_CALLBACK)(uint32_t iSize);
typedef void (GIF_FREE_CALLBACK)(void *buffer);
//
// our private structure to hold a GIF image decode state
//
typedef struct gif_image_tag
{
int iWidth, iHeight, iCanvasWidth, iCanvasHeight;
int iX, iY; // GIF corner offset
int iBpp;
int iError; // last error
int iFrameDelay; // delay in milliseconds for this frame
int iRepeatCount; // NETSCAPE animation repeat count. 0=forever
int iXCount, iYCount; // decoding position in image (countdown values)
int iLZWOff; // current LZW data offset
int iLZWSize; // current quantity of data in the LZW buffer
int iCommentPos; // file offset of start of comment data
short sCommentLen; // length of comment
GIF_READ_CALLBACK *pfnRead;
GIF_SEEK_CALLBACK *pfnSeek;
GIF_DRAW_CALLBACK *pfnDraw;
GIF_OPEN_CALLBACK *pfnOpen;
GIF_CLOSE_CALLBACK *pfnClose;
GIFFILE GIFFile;
void *pUser;
//unsigned char *pFrameBuffer;
unsigned int *pFrameBuffer;
unsigned char *pPixels, *pOldPixels;
unsigned char ucLineBuf[MAX_WIDTH]; // current line
unsigned char ucFileBuf[FILE_BUF_SIZE]; // holds temp data and pixel stack
unsigned short pPalette[384]; // can hold RGB565 or RGB888 - set in begin()
unsigned short pLocalPalette[384]; // color palettes for GIF images
unsigned char ucLZW[LZW_BUF_SIZE]; // holds 6 chunks (6x255) of GIF LZW data packed together
unsigned short usGIFTable[4096];
unsigned char ucGIFPixels[8192];
unsigned char bEndOfFrame;
unsigned char ucGIFBits, ucBackground, ucTransparent, ucCodeStart, ucMap, bUseLocalPalette;
unsigned char ucPaletteType; // RGB565 or RGB888
unsigned char ucDrawType; // RAW or COOKED
} GIFIMAGE;
// C interface
int GIF_openRAM(GIFIMAGE *pGIF, uint8_t *pData, int iDataSize, GIF_DRAW_CALLBACK *pfnDraw);
int GIF_openFile(GIFIMAGE *pGIF, const char *szFilename, GIF_DRAW_CALLBACK *pfnDraw);
void GIF_close(GIFIMAGE *pGIF);
void GIF_begin(GIFIMAGE *pGIF, unsigned char ucPaletteType);
void GIF_reset(GIFIMAGE *pGIF);
int GIF_playFrame(GIFIMAGE *pGIF, int *delayMilliseconds, void *pUser);
int GIF_getCanvasWidth(GIFIMAGE *pGIF);
int GIF_getCanvasHeight(GIFIMAGE *pGIF);
int GIF_getComment(GIFIMAGE *pGIF, char *destBuffer);
int GIF_getInfo(GIFIMAGE *pGIF, GIFINFO *pInfo);
int GIF_getLastError(GIFIMAGE *pGIF);
int GIF_getLoopCount(GIFIMAGE *pGIF);
int GIF_init(GIFIMAGE *pGIF);
void GIF_setDrawCallback(GIFIMAGE *pGIF, GIF_DRAW_CALLBACK *pfnDraw);
void GIF_scaleHalf(uint16_t *pCurrent, uint16_t *pPrev, int iWidth, int bBigEndian);
// Due to unaligned memory causing an exception, we have to do these macros the slow way
#define INTELSHORT(p) ((*p) + (*(p + 1) << 8))
#define INTELLONG(p) ((*p) + (*(p + 1) << 8) + (*(p + 2) << 16) + (*(p + 3) << 24))
#define MOTOSHORT(p) (((*(p)) << 8) + (*(p + 1)))
#define MOTOLONG(p) (((*p) << 24) + ((*(p + 1)) << 16) + ((*(p + 2)) << 8) + (*(p + 3)))
// Must be a 32-bit target processor
#define REGISTER_WIDTH 32
#endif // __ANIMATEDGIF__

View File

@ -0,0 +1,5 @@
This library is from the AnimatedGIF Arduino GIF decoder by Larry Bank.
Released under the Apache License 2.0
[AnimatedGIF](https://github.com/bitbank2/AnimatedGIF)
It has been modified for use in CircuitPython by Mark Komus.

1043
lib/AnimatedGIF/gif.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -278,6 +278,12 @@ typedef struct {
/* SBCS up-case tables (\x80-\xFF) */
// Optimize the 437-only case with a truncated lookup table.
#if FF_CODE_PAGE == 437
#define TBL_CT437 {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
0x41,0x49,0x4F,0x55,0xA5}
#else
#define TBL_CT437 {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
@ -286,6 +292,7 @@ typedef struct {
0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
#endif
#define TBL_CT720 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
@ -2887,7 +2894,12 @@ static FRESULT create_name ( /* FR_OK: successful, FR_INVALID_NAME: could not
}
#elif FF_CODE_PAGE < 900 /* SBCS cfg */
wc = ff_uni2oem(wc, CODEPAGE); /* Unicode ==> ANSI/OEM code */
// Optimize the 437-only case with a truncated lookup table.
#if FF_CODE_PAGE == 437
if (wc & 0x80 && wc < (0xA5 - 0x80)) wc = ExCvt[wc & 0x7F]; /* Convert extended character to upper (SBCS) */
#else
if (wc & 0x80) wc = ExCvt[wc & 0x7F]; /* Convert extended character to upper (SBCS) */
#endif
#else /* DBCS cfg */
wc = ff_uni2oem(ff_wtoupper(wc), CODEPAGE); /* Unicode ==> Upper convert ==> ANSI/OEM code */
#endif

View File

@ -499,6 +499,13 @@ DWORD ff_wtoupper ( /* Returns up-converted code point */
DWORD uni /* Unicode code point to be up-converted */
)
{
#if FF_FS_CASE_INSENSITIVE_COMPARISON_ASCII_ONLY
// Only uppercase ASCII characters. Everything else will require the user to
// pass in an uppercase version.
if ('a' <= uni && uni <= 'z') {
uni -= 32;
}
#else
const WORD *p;
WORD uc, bc, nc, cmd;
static const WORD cvt1[] = { /* Compressed up conversion table for U+0000 - U+0FFF */
@ -619,6 +626,7 @@ DWORD ff_wtoupper ( /* Returns up-converted code point */
}
uni = uc;
}
#endif
return uni;
}

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"
@ -139,7 +147,7 @@ msgstr "%q indeks di luar batas"
msgid "%q init failed"
msgstr ""
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -183,6 +191,10 @@ msgstr "%q harus <= %d"
msgid "%q must be >= %d"
msgstr "%q harus >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -217,10 +229,6 @@ msgstr ""
msgid "%q out of range"
msgstr "%q di luar jangkauan"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "pin %q tidak valid"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -237,7 +245,7 @@ msgstr "%q, %q, dan %q semuanya harus memiliki panjang yang sama"
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s kesalahan 0x%x"
@ -505,6 +513,7 @@ msgstr "Sudah disebarkan."
msgid "Already have all-matches listener"
msgstr ""
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -678,7 +687,7 @@ msgstr "Blok CBC harus merupakan kelipatan 16 byte"
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr ""
@ -815,6 +824,14 @@ msgid ""
msgstr ""
"Koneksi telah terputus dan tidak dapat lagi digunakan. Buat koneksi baru."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "File .mpy rusak"
@ -1066,7 +1083,7 @@ msgstr "Fungsinya membutuhkan kunci"
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1225,9 +1242,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "%q pada tidak valid"
@ -1249,8 +1268,7 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Argumen tidak valid"
@ -1276,7 +1294,7 @@ msgstr "Ukuran potongan format tidak valid"
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
@ -1285,7 +1303,7 @@ msgstr ""
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr ""
@ -1317,7 +1335,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1678,11 +1696,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr "Waktu habis"
@ -1690,7 +1708,7 @@ msgstr "Waktu habis"
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr "Kehabisan memori"
@ -1873,7 +1891,7 @@ msgstr "Baca-saja"
msgid "Read-only filesystem"
msgstr "sistem file (filesystem) bersifat Read-only"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1893,7 +1911,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr "Mode AES yang diminta tidak didukung"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -2008,10 +2026,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Berikan setidaknya satu pin UART"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2191,6 +2205,11 @@ msgstr "Tidak dapat mengalokasikan buffer untuk signed conversion"
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2209,10 +2228,20 @@ msgstr "Tidak dapat menemukan GCLK yang kosong"
msgid "Unable to init parser"
msgstr "Tidak dapat memulai parser"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "Tidak dapat membaca data palet warna"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2337,7 +2366,7 @@ msgstr "Panjang nilai != Panjang tetap yang dibutuhkan"
msgid "Value length > max_length"
msgstr "Panjang nilai > max_length"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2415,6 +2444,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4149,8 +4186,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx dan rx keduanya tidak boleh kosong"
@ -4372,6 +4407,12 @@ msgstr "zi harus berjenis float"
msgid "zi must be of shape (n_section, 2)"
msgstr "Zi harus berbentuk (n_section, 2)"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Berikan setidaknya satu pin UART"
#~ msgid "%q pin invalid"
#~ msgstr "pin %q tidak valid"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -136,7 +144,7 @@ msgstr ""
msgid "%q init failed"
msgstr ""
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -180,6 +188,10 @@ msgstr ""
msgid "%q must be >= %d"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -214,10 +226,6 @@ msgstr ""
msgid "%q out of range"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr ""
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -234,7 +242,7 @@ msgstr ""
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr ""
@ -502,6 +510,7 @@ msgstr ""
msgid "Already have all-matches listener"
msgstr ""
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -673,7 +682,7 @@ msgstr ""
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr ""
@ -805,6 +814,14 @@ msgid ""
"connection."
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
@ -1056,7 +1073,7 @@ msgstr ""
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1213,9 +1230,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr ""
@ -1237,8 +1256,7 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr ""
@ -1264,7 +1282,7 @@ msgstr ""
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
@ -1273,7 +1291,7 @@ msgstr ""
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr ""
@ -1305,7 +1323,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1661,11 +1679,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1673,7 +1691,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1849,7 +1867,7 @@ msgstr ""
msgid "Read-only filesystem"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1869,7 +1887,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -1982,10 +2000,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2165,6 +2179,11 @@ msgstr ""
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2183,10 +2202,20 @@ msgstr ""
msgid "Unable to init parser"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2309,7 +2338,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2387,6 +2416,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4120,8 +4157,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
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"
@ -140,7 +148,7 @@ msgstr "Index %q je mimo rozsah"
msgid "%q init failed"
msgstr "Inicializace %q selhala"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -184,6 +192,10 @@ msgstr "%q musí být <= %d"
msgid "%q must be >= %d"
msgstr "%q musí být >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -218,10 +230,6 @@ msgstr "%q je mimo hranice"
msgid "%q out of range"
msgstr "%q je mimo rozsah"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "pin %q není platný"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -238,7 +246,7 @@ msgstr "%q, %q, a %q musí mít všechny shodnou délku"
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s chyba 0x%x"
@ -506,6 +514,7 @@ msgstr "Již propagujeme."
msgid "Already have all-matches listener"
msgstr ""
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -679,7 +688,7 @@ msgstr "Bloky CBC musí být násobky 16 bajtů"
msgid "CIRCUITPY drive could not be found or created."
msgstr "Disk CIRCUITPY nelze nalézt nebo vytvořit."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr ""
@ -813,6 +822,14 @@ msgid ""
msgstr ""
"Připojení bylo odpojeno a nelze jej dále používat. Vytvořte nové připojení."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Poškozený soubor .mpy"
@ -1066,7 +1083,7 @@ msgstr "Funkce vyžaduje zámek"
msgid "GNSS init"
msgstr "Inicializace GNSS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr "Základní chyba"
@ -1225,9 +1242,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Neplatný pin %q"
@ -1249,8 +1268,7 @@ msgstr "Chybné BSSID"
msgid "Invalid MAC address"
msgstr "Chybná MAC adresa"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Neplatný argument"
@ -1276,7 +1294,7 @@ msgstr "Neplatná velikost bloku"
msgid "Invalid multicast MAC address"
msgstr "Chybná multicastová MAC adresa"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Chybná velikost"
@ -1285,7 +1303,7 @@ msgstr "Chybná velikost"
msgid "Invalid socket for TLS"
msgstr "Chybný soket pro TLS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "Chybný stav"
@ -1317,7 +1335,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "MAC adresa byla chybná"
@ -1674,11 +1692,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1686,7 +1704,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1864,7 +1882,7 @@ msgstr ""
msgid "Read-only filesystem"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1884,7 +1902,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -1997,10 +2015,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2180,6 +2194,11 @@ msgstr ""
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2198,10 +2217,20 @@ msgstr ""
msgid "Unable to init parser"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2324,7 +2353,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2402,6 +2431,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4135,8 +4172,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr ""
@ -4358,6 +4393,9 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
#~ msgid "%q pin invalid"
#~ msgstr "pin %q není platný"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

View File

@ -6,14 +6,14 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2023-01-13 18:51+0000\n"
"PO-Revision-Date: 2023-03-01 17:39+0000\n"
"Last-Translator: Ettore Atalan <atalanttore@googlemail.com>\n"
"Language: de_DE\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\n"
#: main.c
msgid ""
@ -31,6 +31,18 @@ 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 ""
"\n"
"Ungültige CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\n"
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -49,6 +61,8 @@ msgid ""
"\n"
"You are in safe mode because:\n"
msgstr ""
"\n"
"Sie befinden sich im abgesicherten Modus, weil:\n"
#: py/obj.c
msgid " File \"%q\""
@ -141,7 +155,7 @@ msgstr "Der Index %q befindet sich außerhalb des Bereiches"
msgid "%q init failed"
msgstr "%q Initialisierung ist gescheitert"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr "%q ist %q"
@ -185,6 +199,10 @@ msgstr "%q muss <= %d sein"
msgid "%q must be >= %d"
msgstr "%q muss >= %d sein"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -220,10 +238,6 @@ msgstr "%q außerhalb der Grenzen"
msgid "%q out of range"
msgstr "%q außerhalb des Bereichs"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "%q Pin ungültig"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr "Schritt %q kann nicht Null sein"
@ -241,7 +255,7 @@ msgstr "%q, %q und %q müssen alle die gleiche Länge haben"
msgid "%q=%q"
msgstr "%q=%q"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s Fehler 0x%x"
@ -509,6 +523,7 @@ msgstr "Bereits am Anbieten (advertising)."
msgid "Already have all-matches listener"
msgstr "All-Matchers-Listener bereits vorhanden"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -682,7 +697,7 @@ msgstr "CBC-Blöcke müssen ein Vielfaches von 16 Bytes sein"
msgid "CIRCUITPY drive could not be found or created."
msgstr "CIRCUITPY-Laufwerk konnte nicht gefunden oder erzeugt werden."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC oder Checksumme ungültig"
@ -821,6 +836,14 @@ msgstr ""
"Die Verbindung wurde getrennt und kann nicht mehr verwendet werden. Erstelle "
"eine neue Verbindung."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Beschädigte .mpy Datei"
@ -1079,7 +1102,7 @@ msgstr "Die Funktion erwartet, dass der 'lock'-Befehl zuvor ausgeführt wurde"
msgid "GNSS init"
msgstr "GNSS-Initialisierung"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr "Generischer Fehler"
@ -1242,9 +1265,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "Ungültiger %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Ungültiger %q Pin"
@ -1266,8 +1291,7 @@ msgstr "Ungültige BSSID"
msgid "Invalid MAC address"
msgstr "Ungültige MAC-Adresse"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Ungültiges Argument"
@ -1293,7 +1317,7 @@ msgstr "Ungültige format chunk size"
msgid "Invalid multicast MAC address"
msgstr "Ungültige Multicast-MAC-Adresse"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Ungültige Größe"
@ -1302,7 +1326,7 @@ msgstr "Ungültige Größe"
msgid "Invalid socket for TLS"
msgstr "Ungültiges Socket für TLS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "Ungültiger Zustand"
@ -1334,7 +1358,7 @@ msgstr "Ebene ist bereits in der Gruppe"
msgid "Layer must be a Group or TileGrid subclass"
msgstr "Ebene muss eine Gruppe oder eine TileGrid Subklasse sein"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "MAC Adresse war ungültig"
@ -1697,11 +1721,11 @@ msgstr "Nur eine Farbe kann transparent sein zu einer Zeit"
msgid "Operation not permitted"
msgstr "Operation nicht erlaubt"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr "Vorgang oder Funktion wird nicht unterstützt"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr "Zeit für Vorgang abgelaufen"
@ -1709,7 +1733,7 @@ msgstr "Zeit für Vorgang abgelaufen"
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr "Kein Speicher mehr verfügbar"
@ -1891,7 +1915,7 @@ msgstr "Nur lesen möglich, da Schreibgeschützt"
msgid "Read-only filesystem"
msgstr "Schreibgeschützte Dateisystem"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr "Erhaltene Antwort ist ungültig"
@ -1911,7 +1935,7 @@ msgstr "RemoteTransmissionRequests limitiert auf 8 Bytes"
msgid "Requested AES mode is unsupported"
msgstr "Der angeforderte AES-Modus wird nicht unterstützt"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr "Angefragte Ressource nicht gefunden"
@ -2024,10 +2048,6 @@ msgstr "Stereo rechts muss sich auf PWM-Kanal B befinden"
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Gib mindestens einen UART-Pin an"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr "Gib entweder monotonic_time oder epoch_time an"
@ -2213,6 +2233,11 @@ msgstr "Konnte keine Buffer für Vorzeichenumwandlung allozieren"
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr "Lock kann nicht erzeugt werden"
@ -2231,10 +2256,20 @@ msgstr "Konnte keinen freien GCLK finden"
msgid "Unable to init parser"
msgstr "Parser konnte nicht gestartet werden"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "Konnte Farbpalettendaten nicht lesen"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2361,7 +2396,7 @@ msgstr "Wert Länge != Erforderliche feste Länge"
msgid "Value length > max_length"
msgstr "Länge des Wertes > max_length"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr "Version ist ungültig"
@ -2449,6 +2484,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4207,8 +4250,6 @@ msgstr "twai_driver_install gab esp-idf-Fehler zurück #%d"
msgid "twai_start returned esp-idf error #%d"
msgstr "twai_start gab esp-idf-Fehler zurück #%d"
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx und rx können nicht beide None sein"
@ -4432,6 +4473,12 @@ msgstr "zi muss eine Gleitkommazahl sein"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi muss die Form (n_section, 2) haben"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Gib mindestens einen UART-Pin an"
#~ msgid "%q pin invalid"
#~ msgstr "%q Pin ungültig"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -144,7 +152,7 @@ msgstr "%q δείκτης εκτός εμβέλειας"
msgid "%q init failed"
msgstr "%q εκκίνηση απέτυχε"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -188,6 +196,10 @@ msgstr "%q πρέπει να είναι <= %d"
msgid "%q must be >= %d"
msgstr "%q πρέπει να είναι >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -222,10 +234,6 @@ msgstr "%q εκτός ορίων"
msgid "%q out of range"
msgstr "%q εκτός εμβέλειας"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "%q άκυρο pin"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -242,7 +250,7 @@ msgstr "%q, %q, και %q πρέπει να είναι όλα του ιδίου
msgid "%q=%q"
msgstr "%q=%q"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s σφάλμα 0x%x"
@ -511,6 +519,7 @@ msgstr "Ήδη διαφημίζουμε."
msgid "Already have all-matches listener"
msgstr "Ύπάρχει ήδη all-matches ακροατής"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -684,7 +693,7 @@ msgstr "CBC blocks πρέπει να είναι πολλαπλάσια του 16
msgid "CIRCUITPY drive could not be found or created."
msgstr "Ο CIRCUITPY δίσκος δεν μπόρεσε να βρεθεί ή να δημιουργηθεί."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC ή checksum ήταν άκυρο"
@ -826,6 +835,14 @@ msgstr ""
"Έχει γίνει αποσύνδεση και αυτή η συνδεση δεν μπορεί να χρησιμοποιηθεί. "
"Δημιουργήστε μια νέα σύνδεση."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Κατεστραμένο .mpy αρχείο"
@ -1077,7 +1094,7 @@ msgstr ""
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1234,9 +1251,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr ""
@ -1258,8 +1277,7 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr ""
@ -1285,7 +1303,7 @@ msgstr ""
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
@ -1294,7 +1312,7 @@ msgstr ""
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr ""
@ -1326,7 +1344,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1682,11 +1700,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1694,7 +1712,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1872,7 +1890,7 @@ msgstr ""
msgid "Read-only filesystem"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1892,7 +1910,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -2005,10 +2023,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2188,6 +2202,11 @@ msgstr ""
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2206,10 +2225,20 @@ msgstr ""
msgid "Unable to init parser"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2332,7 +2361,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2410,6 +2439,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4143,8 +4180,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr ""
@ -4366,6 +4401,9 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
#~ msgid "%q pin invalid"
#~ msgstr "%q άκυρο pin"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -143,7 +151,7 @@ msgstr "%q index out of range"
msgid "%q init failed"
msgstr ""
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -187,6 +195,10 @@ msgstr ""
msgid "%q must be >= %d"
msgstr "%q must be >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -221,10 +233,6 @@ msgstr ""
msgid "%q out of range"
msgstr "%q out of range"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "%q pin invalid"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -241,7 +249,7 @@ msgstr "%q, %q, and %q must all be the same length"
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s error 0x%x"
@ -509,6 +517,7 @@ msgstr "Already advertising."
msgid "Already have all-matches listener"
msgstr "Already have all-matches listener"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -682,7 +691,7 @@ msgstr "CBC blocks must be multiples of 16 bytes"
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC or checksum was invalid"
@ -816,6 +825,14 @@ msgstr ""
"Connection has been disconnected and can no longer be used. Create a new "
"connection."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Corrupt .mpy file"
@ -1067,7 +1084,7 @@ msgstr "Function requires lock"
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr "Generic Failure"
@ -1226,9 +1243,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "Invalid %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Invalid %q pin"
@ -1250,8 +1269,7 @@ msgstr "Invalid BSSID"
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Invalid argument"
@ -1277,7 +1295,7 @@ msgstr "Invalid format chunk size"
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Invalid size"
@ -1286,7 +1304,7 @@ msgstr "Invalid size"
msgid "Invalid socket for TLS"
msgstr "Invalid socket for TLS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "Invalid state"
@ -1318,7 +1336,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "MAC address was invalid"
@ -1678,11 +1696,11 @@ msgstr "Only one colour can be transparent at a time"
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr "Operation or feature not supported"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr "Operation timed out"
@ -1690,7 +1708,7 @@ msgstr "Operation timed out"
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr "Out of memory"
@ -1870,7 +1888,7 @@ msgstr "Read-only"
msgid "Read-only filesystem"
msgstr "Read-only filesystem"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr "Received response was invalid"
@ -1890,7 +1908,7 @@ msgstr "RemoteTransmissionRequests limited to 8 bytes"
msgid "Requested AES mode is unsupported"
msgstr "Requested AES mode is unsupported"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr "Requested resource not found"
@ -2003,10 +2021,6 @@ msgstr "Stereo right must be on PWM channel B"
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Supply at least one UART pin"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr "Supply one of monotonic_time or epoch_time"
@ -2186,6 +2200,11 @@ msgstr "Unable to allocate buffers for signed conversion"
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr "Unable to create lock"
@ -2204,10 +2223,20 @@ msgstr "Unable to find free GCLK"
msgid "Unable to init parser"
msgstr "Unable to init parser"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "Unable to read colour palette data"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2332,7 +2361,7 @@ msgstr "Value length != required fixed length"
msgid "Value length > max_length"
msgstr "Value length > max_length"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr "Version was invalid"
@ -2410,6 +2439,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4146,8 +4183,6 @@ msgstr "twai_driver_install returned esp-idf error #%d"
msgid "twai_start returned esp-idf error #%d"
msgstr "twai_start returned esp-idf error #%d"
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx and rx cannot both be None"
@ -4369,6 +4404,12 @@ msgstr "zi must be of float type"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi must be of shape (n_section, 2)"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Supply at least one UART pin"
#~ msgid "%q pin invalid"
#~ msgstr "%q pin invalid"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

View File

@ -8,7 +8,7 @@ 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-17 20:38+0000\n"
"PO-Revision-Date: 2023-03-09 10:38+0000\n"
"Last-Translator: Jose David M <jquintana202020@gmail.com>\n"
"Language-Team: \n"
"Language: es\n"
@ -16,7 +16,7 @@ msgstr ""
"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.16-dev\n"
"X-Generator: Weblate 4.16.2-dev\n"
#: main.c
msgid ""
@ -34,6 +34,18 @@ msgstr ""
"\n"
"Código detenido por la auto-recarga. Recargando pronto.\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"
@ -50,7 +62,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 +70,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,13 +157,13 @@ 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"
msgstr "%q inicializado fallido"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr "%q es %q"
@ -161,19 +173,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"
@ -195,9 +207,13 @@ msgstr "%q debe ser <= %d"
msgid "%q must be >= %d"
msgstr "%q debe ser >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr "%q debe ser un arreglo de tipo 'H'"
#: 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'"
@ -229,10 +245,6 @@ msgstr "%q fuera de limites"
msgid "%q out of range"
msgstr "%q fuera de rango"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "pin inválido %q"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr "%q paso no puede ser cero"
@ -243,13 +255,13 @@ 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"
msgstr "%q=%q"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s error 0x%x"
@ -349,7 +361,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 +435,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 +444,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 +458,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 +474,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
@ -519,6 +531,7 @@ msgstr "Ya se encuentra publicando."
msgid "Already have all-matches listener"
msgstr "Ya se tiene un escucha de todas las coincidencias"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.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
@ -593,7 +606,8 @@ msgstr "Por debajo de la tasa mínima de refrescamiento"
#: ports/raspberrypi/common-hal/audiobusio/I2SOut.c
msgid "Bit clock and word select must be sequential pins"
msgstr "Le reloj de bit y de selector de palabra deben ser pines secuenciales"
msgstr ""
"Los pines de reloj de bit y de selector de palabra deben ser secuenciales"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Bit clock and word select must share a clock unit"
@ -605,7 +619,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 +648,44 @@ 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
@ -693,7 +707,7 @@ msgstr "Los bloques CBC deben ser múltiplos de 16 bytes"
msgid "CIRCUITPY drive could not be found or created."
msgstr "El dispositivo CIRCUITPY no pudo ser encontrado o creado."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC o suma de comprobación inválida"
@ -758,7 +772,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"
@ -833,6 +847,14 @@ msgstr ""
"La conexión se ha desconectado y ya no se puede usar. Crea una nueva "
"conexión."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr "Las matrices de coordenadas tienen diferentes longitudes"
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr "Las matrices de coordenadas tienen diferentes tamaños"
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Archivo .mpy corrupto"
@ -1091,7 +1113,7 @@ msgstr "La función requiere lock"
msgid "GNSS init"
msgstr "Inicialización GNSS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr "Fallo Genérico"
@ -1258,9 +1280,11 @@ msgid "Interrupt error."
msgstr "Error de interrupción."
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "%q inválido"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Pin %q inválido"
@ -1282,8 +1306,7 @@ msgstr "BSSID inválido"
msgid "Invalid MAC address"
msgstr "Dirección MAC inválida"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Argumento inválido"
@ -1309,7 +1332,7 @@ msgstr "Formato de fragmento de formato no válido"
msgid "Invalid multicast MAC address"
msgstr "Dirección MAC de multidifusión inválida"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Tamaño incorrecto"
@ -1318,7 +1341,7 @@ msgstr "Tamaño incorrecto"
msgid "Invalid socket for TLS"
msgstr "socket invalido para TLS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "Estado invalido"
@ -1350,7 +1373,7 @@ msgstr "El Layer ya esta en un grupo"
msgid "Layer must be a Group or TileGrid subclass"
msgstr "El Layer debe ser un grupo o una subclase de TileGrid"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "La dirección MAC es incorrecta"
@ -1716,11 +1739,11 @@ msgstr "Solo un color puede ser transparente a la vez"
msgid "Operation not permitted"
msgstr "La operación no es permitida"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr "Operación no característica no soportada"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr "Tiempo de espera agotado"
@ -1728,7 +1751,7 @@ msgstr "Tiempo de espera agotado"
msgid "Out of MDNS service slots"
msgstr "No hay slots MDNS de servicio"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr "Memoria agotada"
@ -1844,7 +1867,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
@ -1912,7 +1935,7 @@ msgstr "Solo-lectura"
msgid "Read-only filesystem"
msgstr "Sistema de archivos de solo-Lectura"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr "La respuesta recibida es invalida"
@ -1932,7 +1955,7 @@ msgstr "RemoteTransmissionRequests limitado a 8 bytes"
msgid "Requested AES mode is unsupported"
msgstr "El modo AES solicitado no es compatible"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr "Recurso solicitado no encontrado"
@ -2046,10 +2069,6 @@ msgstr "Estéreo derecho debe estar en el canal PWM B"
msgid "Stopping AP is not supported."
msgstr "Parar el AP no esta soportado."
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Suministre al menos un pin UART"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr "Suministre monotonic_time o epoch_time"
@ -2182,7 +2201,7 @@ msgstr "Inicialización de UART"
#: ports/raspberrypi/common-hal/busio/UART.c
msgid "UART peripheral in use"
msgstr ""
msgstr "Periférico UART en uso"
#: ports/stm/common-hal/busio/UART.c
msgid "UART re-init"
@ -2235,6 +2254,11 @@ msgstr "No se pudieron asignar buffers para la conversión con signo"
msgid "Unable to allocate the heap."
msgstr "Imposible de asignar el heap."
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr "Imposible de configurar el controlador ADC DMA , código de error:%d"
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr "No se puede crear bloqueo"
@ -2253,10 +2277,21 @@ msgstr "No se pudo encontrar un GCLK libre"
msgid "Unable to init parser"
msgstr "Incapaz de inicializar el parser"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
"No es posible de inicializar el controlador ADC DMA, código de error:%d"
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "No se pudo leer los datos de la paleta de colores"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr "Imposible de iniciar el controlador ADC DMA, código de error:%d"
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2381,7 +2416,7 @@ msgstr "Tamaño del valor != del tamaño fijo requerido"
msgid "Value length > max_length"
msgstr "Tamaño de valor > max_length"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr "La versión era invalida"
@ -2461,34 +2496,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 "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 "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]"
@ -4217,8 +4260,6 @@ msgstr "twai_driver_install devolvió esp-idf error #%d"
msgid "twai_start returned esp-idf error #%d"
msgstr "twai_start devolvió esp-idf error #%d"
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "Ambos tx y rx no pueden ser None"
@ -4440,6 +4481,12 @@ msgstr "zi debe ser de tipo flotante"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi debe ser una forma (n_section,2)"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Suministre al menos un pin UART"
#~ msgid "%q pin invalid"
#~ msgstr "pin inválido %q"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -137,7 +145,7 @@ msgstr "%q indeks wala sa sakop"
msgid "%q init failed"
msgstr ""
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -181,6 +189,10 @@ msgstr ""
msgid "%q must be >= %d"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -215,10 +227,6 @@ msgstr ""
msgid "%q out of range"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr ""
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -236,7 +244,7 @@ msgstr ""
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr ""
@ -505,6 +513,7 @@ msgstr ""
msgid "Already have all-matches listener"
msgstr ""
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -679,7 +688,7 @@ msgstr ""
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr ""
@ -812,6 +821,14 @@ msgid ""
"connection."
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
@ -1066,7 +1083,7 @@ msgstr "Function nangangailangan ng lock"
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1225,9 +1242,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Mali ang %q pin"
@ -1249,8 +1268,7 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Maling argumento"
@ -1276,7 +1294,7 @@ msgstr "Mali ang format ng chunk size"
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
@ -1285,7 +1303,7 @@ msgstr ""
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr ""
@ -1317,7 +1335,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1676,11 +1694,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1688,7 +1706,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1865,7 +1883,7 @@ msgstr "Basahin-lamang"
msgid "Read-only filesystem"
msgstr "Basahin-lamang mode"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1885,7 +1903,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -1998,10 +2016,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2181,6 +2195,11 @@ msgstr "Hindi ma-allocate ang buffers para sa naka-sign na conversion"
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2199,10 +2218,20 @@ msgstr "Hindi mahanap ang libreng GCLK"
msgid "Unable to init parser"
msgstr "Hindi ma-init ang parser"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2327,7 +2356,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2405,6 +2434,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4156,8 +4193,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx at rx hindi pwedeng parehas na None"

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-26 06:37+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,18 @@ 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 ""
"\n"
"CIRCUITPY_PYSTACK_SIZE invalide\n"
"\n"
"\n"
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
@ -46,12 +58,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 +143,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
@ -144,13 +160,13 @@ msgstr "index %q hors de portée"
msgid "%q init failed"
msgstr "échec de l'initialisation %q"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
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"
@ -188,9 +204,13 @@ msgstr "%q doit être <= %d"
msgid "%q must be >= %d"
msgstr "%q doit être >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: 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 +219,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"
@ -222,13 +242,9 @@ msgstr "%q est hors limites"
msgid "%q out of range"
msgstr "%q est hors de porté"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
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"
@ -242,7 +258,7 @@ msgstr "%q, %q, et %q doivent tous être de la même longueur"
msgid "%q=%q"
msgstr "%q=%q"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s erreur 0x%x"
@ -429,7 +445,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"
@ -510,6 +526,7 @@ msgstr "S'annonce déjà."
msgid "Already have all-matches listener"
msgstr "Il y a déjà un auditeur all-matches"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -524,7 +541,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"
@ -685,7 +702,7 @@ msgstr "Les blocs CBC doivent être des multiples de 16 octets"
msgid "CIRCUITPY drive could not be found or created."
msgstr "L'appareil CIRCUITPY ne peut pas être trouvé ou créé."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC ou somme de contrôle invalide"
@ -831,6 +848,14 @@ msgstr ""
"La connexion a été déconnectée et ne peut plus être utilisée. Créez une "
"nouvelle connexion."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Fichier .mpy corrompu"
@ -921,7 +946,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 +975,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 +983,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 +1060,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
@ -1091,7 +1116,7 @@ msgstr "La fonction nécessite un verrou ('lock')"
msgid "GNSS init"
msgstr "Initialisation GNSS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr "Échec génerique"
@ -1123,12 +1148,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 +1166,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,12 +1283,14 @@ 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
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "%q invalide"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Broche invalide pour '%q'"
@ -1285,8 +1312,7 @@ msgstr "BSSID invalide"
msgid "Invalid MAC address"
msgstr "Adresse MAC invalide"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Paramètre invalide"
@ -1297,7 +1323,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
@ -1312,7 +1338,7 @@ msgstr "Taille de bloc de formatage invalide"
msgid "Invalid multicast MAC address"
msgstr "Adresse MAC multicast invalide"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Taille invalide"
@ -1321,13 +1347,13 @@ msgstr "Taille invalide"
msgid "Invalid socket for TLS"
msgstr "Socket non valide pour TLS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
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 +1361,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"
@ -1353,7 +1379,7 @@ msgstr "Ce calque est déjà dans un groupe"
msgid "Layer must be a Group or TileGrid subclass"
msgstr "Le calque doit être une sous-classe de Group ou TileGrid"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "Adresse physique (MAC) invalide"
@ -1448,7 +1474,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 +1719,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
@ -1719,19 +1745,19 @@ msgstr "Une seule couleur peut être transparente à la fois"
msgid "Operation not permitted"
msgstr "Cette opération n'est pas permise"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr "Opération ou fonction non supportée"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
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
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr "Mémoire insuffisante"
@ -1865,7 +1891,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."
@ -1916,7 +1942,7 @@ msgstr "Lecture seule"
msgid "Read-only filesystem"
msgstr "Système de fichier en lecture seule"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr "Réponse reçue invalide"
@ -1936,7 +1962,7 @@ msgstr "RemoteTransmissionRequests limité à 8 octets"
msgid "Requested AES mode is unsupported"
msgstr "Le mode AES demandé n'est pas supporté"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr "Resource demandée non trouvée"
@ -2047,11 +2073,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 ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Fournissez au moins une broche UART"
msgstr "Stopper n'est pas supporté."
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
@ -2067,11 +2089,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 +2101,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 +2122,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 +2204,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,6 +2259,11 @@ msgstr "Impossible d'allouer des tampons pour une conversion signée"
#: supervisor/shared/safe_mode.c
msgid "Unable to allocate the heap."
msgstr "Impossible d'allouer le tas."
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
@ -2257,10 +2284,20 @@ msgstr "Impossible de trouver un GCLK libre"
msgid "Unable to init parser"
msgstr "Impossible d'initialiser le parser"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "Impossible de lire les données de la palette de couleurs"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2268,7 +2305,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."
@ -2386,7 +2423,7 @@ msgstr "Longueur de valeur != Longueur fixe requise"
msgid "Value length > max_length"
msgstr "Longueur de la valeur > max_length"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr "Version est invalide"
@ -2437,15 +2474,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,44 +2498,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 "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"
@ -2571,7 +2616,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
@ -2798,7 +2843,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'"
@ -3064,6 +3109,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"
@ -3281,7 +3328,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
@ -3667,7 +3714,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"
@ -3839,7 +3886,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"
@ -3847,7 +3894,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
@ -4232,8 +4279,6 @@ msgstr "twai_driver_install a renvoyé l'erreur esp-idf #%d"
msgid "twai_start returned esp-idf error #%d"
msgstr "twai_start a renvoyé l'erreur esp-idf #%d"
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx et rx ne peuvent être 'None' tous les deux"
@ -4455,6 +4500,12 @@ msgstr "zi doit être de type float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi doit être de forme (n_section, 2)"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Fournissez au moins une broche UART"
#~ msgid "%q pin invalid"
#~ msgstr "broche %q invalide"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -136,7 +144,7 @@ msgstr ""
msgid "%q init failed"
msgstr ""
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -180,6 +188,10 @@ msgstr ""
msgid "%q must be >= %d"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -214,10 +226,6 @@ msgstr ""
msgid "%q out of range"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr ""
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -234,7 +242,7 @@ msgstr ""
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr ""
@ -502,6 +510,7 @@ msgstr ""
msgid "Already have all-matches listener"
msgstr ""
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -673,7 +682,7 @@ msgstr ""
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr ""
@ -805,6 +814,14 @@ msgid ""
"connection."
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
@ -1056,7 +1073,7 @@ msgstr ""
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1213,9 +1230,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr ""
@ -1237,8 +1256,7 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr ""
@ -1264,7 +1282,7 @@ msgstr ""
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
@ -1273,7 +1291,7 @@ msgstr ""
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr ""
@ -1305,7 +1323,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1661,11 +1679,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1673,7 +1691,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1849,7 +1867,7 @@ msgstr ""
msgid "Read-only filesystem"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1869,7 +1887,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -1982,10 +2000,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2165,6 +2179,11 @@ msgstr ""
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2183,10 +2202,20 @@ msgstr ""
msgid "Unable to init parser"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2309,7 +2338,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2387,6 +2416,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4120,8 +4157,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
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"
@ -140,7 +148,7 @@ msgstr "indice %q fuori intervallo"
msgid "%q init failed"
msgstr ""
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -184,6 +192,10 @@ msgstr ""
msgid "%q must be >= %d"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -218,10 +230,6 @@ msgstr ""
msgid "%q out of range"
msgstr "%q oltre il limite"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "%q pin non valido"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -238,7 +246,7 @@ msgstr ""
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s errore 0x%x"
@ -508,6 +516,7 @@ msgstr ""
msgid "Already have all-matches listener"
msgstr "Già in possesso di tutti i listener abbinati"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -682,7 +691,7 @@ msgstr "I blocchi CBC devono essere multipli di 16 bytes"
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC o controllo totale è risultato non valido"
@ -815,6 +824,14 @@ msgid ""
"connection."
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
@ -1068,7 +1085,7 @@ msgstr ""
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1227,9 +1244,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Pin %q non valido"
@ -1251,8 +1270,7 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Argomento non valido"
@ -1278,7 +1296,7 @@ msgstr ""
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
@ -1287,7 +1305,7 @@ msgstr ""
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr ""
@ -1319,7 +1337,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1680,11 +1698,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1692,7 +1710,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1872,7 +1890,7 @@ msgstr "Sola lettura"
msgid "Read-only filesystem"
msgstr "Filesystem in sola lettura"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1892,7 +1910,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -2005,10 +2023,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2188,6 +2202,11 @@ msgstr "Ipossibilitato ad allocare buffer per la conversione con segno"
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2206,10 +2225,20 @@ msgstr "Impossibile trovare un GCLK libero"
msgid "Unable to init parser"
msgstr "Inizilizzazione del parser non possibile"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2334,7 +2363,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2412,6 +2441,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4166,8 +4203,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx e rx non possono essere entrambi None"
@ -4391,6 +4426,9 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
#~ msgid "%q pin invalid"
#~ msgstr "%q pin non valido"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -143,7 +151,7 @@ msgstr "%q インデックスは範囲外"
msgid "%q init failed"
msgstr "%qは初期化には失敗"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr "%qは%q"
@ -187,6 +195,10 @@ msgstr ""
msgid "%q must be >= %d"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -221,10 +233,6 @@ msgstr ""
msgid "%q out of range"
msgstr "%q が範囲外"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "%q ピンは無効"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -241,7 +249,7 @@ msgstr ""
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr ""
@ -509,6 +517,7 @@ msgstr "すでにアドバータイズ中"
msgid "Already have all-matches listener"
msgstr ""
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -682,7 +691,7 @@ msgstr "CBCブロックは16バイトの整数倍でなければなりません"
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr ""
@ -816,6 +825,14 @@ msgid ""
"connection."
msgstr "接続は切断済みでもう使えません。新しい接続を作成してください"
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "破損した .mpy ファイル"
@ -1067,7 +1084,7 @@ msgstr ""
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1226,9 +1243,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "不正な %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "不正な%qピン"
@ -1250,8 +1269,7 @@ msgstr "不正なBSSID"
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "不正な引数"
@ -1277,7 +1295,7 @@ msgstr "フォーマットチャンクのサイズが不正"
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
@ -1286,7 +1304,7 @@ msgstr ""
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr ""
@ -1318,7 +1336,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1676,11 +1694,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1688,7 +1706,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1865,7 +1883,7 @@ msgstr "読み込み専用"
msgid "Read-only filesystem"
msgstr "読み込み専用のファイルシステム"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1885,7 +1903,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr "要求のAESモードは非対応"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -1998,10 +2016,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "少なくとも1つのUARTピンが必要"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2182,6 +2196,11 @@ msgstr ""
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2200,10 +2219,20 @@ msgstr ""
msgid "Unable to init parser"
msgstr "パーザを初期化できません"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "カラーパレットデータを読み込めません"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2326,7 +2355,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2404,6 +2433,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4144,8 +4181,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "txとrxを両方ともNoneにできません"
@ -4367,6 +4402,12 @@ msgstr "ziはfloat値でなければなりません"
msgid "zi must be of shape (n_section, 2)"
msgstr ""
#~ msgid "Supply at least one UART pin"
#~ msgstr "少なくとも1つのUARTピンが必要"
#~ msgid "%q pin invalid"
#~ msgstr "%q ピンは無効"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -137,7 +145,7 @@ msgstr "%q 인덱스 범위를 벗어났습니다"
msgid "%q init failed"
msgstr ""
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -181,6 +189,10 @@ msgstr ""
msgid "%q must be >= %d"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -215,10 +227,6 @@ msgstr ""
msgid "%q out of range"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr ""
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -235,7 +243,7 @@ msgstr ""
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr ""
@ -503,6 +511,7 @@ msgstr ""
msgid "Already have all-matches listener"
msgstr ""
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -676,7 +685,7 @@ msgstr ""
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr ""
@ -808,6 +817,14 @@ msgid ""
"connection."
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr ""
@ -1059,7 +1076,7 @@ msgstr ""
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1216,9 +1233,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr ""
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr ""
@ -1240,8 +1259,7 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr ""
@ -1267,7 +1285,7 @@ msgstr "형식 청크 크기가 잘못되었습니다"
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
@ -1276,7 +1294,7 @@ msgstr ""
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr ""
@ -1308,7 +1326,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1664,11 +1682,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1676,7 +1694,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1852,7 +1870,7 @@ msgstr ""
msgid "Read-only filesystem"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1872,7 +1890,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -1985,10 +2003,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2169,6 +2183,11 @@ msgstr ""
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2187,10 +2206,20 @@ msgstr ""
msgid "Unable to init parser"
msgstr "파서를 초기화(init) 할 수 없습니다"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2313,7 +2342,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2391,6 +2420,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4124,8 +4161,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
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"
@ -136,7 +144,7 @@ msgstr "%q index buiten bereik"
msgid "%q init failed"
msgstr ""
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -180,6 +188,10 @@ msgstr ""
msgid "%q must be >= %d"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -214,10 +226,6 @@ msgstr ""
msgid "%q out of range"
msgstr "%q buiten bereik"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "%q pin onjuist"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -234,7 +242,7 @@ msgstr ""
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr ""
@ -502,6 +510,7 @@ msgstr "Advertising is al bezig."
msgid "Already have all-matches listener"
msgstr "Heeft al een luisteraar voor 'all-matches'"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -675,7 +684,7 @@ msgstr "CBC blocks moeten meervouden van 16 bytes zijn"
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr ""
@ -810,6 +819,14 @@ msgstr ""
"Verbinding is verbroken en kan niet langer gebruikt worden. Creëer een "
"nieuwe verbinding."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Corrupt .mpy bestand"
@ -1062,7 +1079,7 @@ msgstr "Functie vereist lock"
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1221,9 +1238,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "Ongeldige %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Ongeldige %q pin"
@ -1245,8 +1264,7 @@ msgstr "Ongeldig BSSID"
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Ongeldig argument"
@ -1272,7 +1290,7 @@ msgstr "Ongeldig formaat stuk grootte"
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
@ -1281,7 +1299,7 @@ msgstr ""
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr ""
@ -1313,7 +1331,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1675,11 +1693,11 @@ msgstr "Er kan maar één kleur per keer transparant zijn"
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1687,7 +1705,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1870,7 +1888,7 @@ msgstr "Alleen-lezen"
msgid "Read-only filesystem"
msgstr "Alleen-lezen bestandssysteem"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1890,7 +1908,7 @@ msgstr "RemoteTransmissionRequests is beperkt tot 8 bytes"
msgid "Requested AES mode is unsupported"
msgstr "Gevraagde AES modus is niet ondersteund"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -2003,10 +2021,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Geef op zijn minst 1 UART pin op"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr "Geef monotonic_time of epoch_time"
@ -2186,6 +2200,11 @@ msgstr "Niet in staat buffers voor gesigneerde conversie te alloceren"
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr "Kan vergrendeling niet maken"
@ -2204,10 +2223,20 @@ msgstr "Niet in staat een vrije GCLK te vinden"
msgid "Unable to init parser"
msgstr "Niet in staat om de parser te initialiseren"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "Niet in staat kleurenpalet data te lezen"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2332,7 +2361,7 @@ msgstr "Waarde lengte != vereist vaste lengte"
msgid "Value length > max_length"
msgstr "Waarde length > max_length"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2414,6 +2443,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4154,8 +4191,6 @@ msgstr "twai_driver_install geeft esp-idf fout #%d"
msgid "twai_start returned esp-idf error #%d"
msgstr "twai_start geeft esp-idf error #%d"
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx en rx kunnen niet beiden None zijn"
@ -4377,6 +4412,12 @@ msgstr "zi moet van type float zijn"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi moet vorm (n_section, 2) hebben"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Geef op zijn minst 1 UART pin op"
#~ msgid "%q pin invalid"
#~ msgstr "%q pin onjuist"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -138,7 +146,7 @@ msgstr "%q poza zakresem"
msgid "%q init failed"
msgstr ""
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr ""
@ -182,6 +190,10 @@ msgstr ""
msgid "%q must be >= %d"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr ""
@ -216,10 +228,6 @@ msgstr ""
msgid "%q out of range"
msgstr "%q poza zakresem"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "nieprawidłowy pin %q"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr ""
@ -236,7 +244,7 @@ msgstr ""
msgid "%q=%q"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr ""
@ -504,6 +512,7 @@ msgstr ""
msgid "Already have all-matches listener"
msgstr ""
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -677,7 +686,7 @@ msgstr "Bloki CBC muszą być wielokrotnościami 16 bajtów"
msgid "CIRCUITPY drive could not be found or created."
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr ""
@ -811,6 +820,14 @@ msgstr ""
"Połączenie zostało rozłączone i nie można go już używać. Utwórz nowe "
"połączenie."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Uszkodzony plik .mpy"
@ -1062,7 +1079,7 @@ msgstr "Funkcja wymaga blokady"
msgid "GNSS init"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1221,9 +1238,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "Nieprawidłowe %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Zła nóżka %q"
@ -1245,8 +1264,7 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Zły argument"
@ -1272,7 +1290,7 @@ msgstr "Zła wielkość fragmentu formatu"
msgid "Invalid multicast MAC address"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Nieprawidłowy rozmiar"
@ -1281,7 +1299,7 @@ msgstr "Nieprawidłowy rozmiar"
msgid "Invalid socket for TLS"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "Nieprawidłowy stan"
@ -1313,7 +1331,7 @@ msgstr ""
msgid "Layer must be a Group or TileGrid subclass"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr ""
@ -1669,11 +1687,11 @@ msgstr "W danym momencie przezroczysty może być tylko jeden kolor"
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1681,7 +1699,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr "Brak pamięci"
@ -1857,7 +1875,7 @@ msgstr "Tylko do odczytu"
msgid "Read-only filesystem"
msgstr "System plików tylko do odczytu"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr "Otrzymana odpowiedź była nieprawidłowa"
@ -1877,7 +1895,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr "Żądany tryb AES nie jest obsługiwany"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr "Nie znaleziono żądanego zasobu"
@ -1990,10 +2008,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Podaj co najmniej jeden pin UART"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2173,6 +2187,11 @@ msgstr "Nie udała się alokacja buforów do konwersji ze znakiem"
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2191,10 +2210,20 @@ msgstr "Brak wolnego GCLK"
msgid "Unable to init parser"
msgstr "Błąd ustawienia parsera"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "Nie można odczytać danych palety"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2317,7 +2346,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2395,6 +2424,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4130,8 +4167,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx i rx nie mogą być oba None"
@ -4353,6 +4388,12 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
#~ msgid "Supply at least one UART pin"
#~ msgstr "Podaj co najmniej jeden pin UART"
#~ msgid "%q pin invalid"
#~ msgstr "nieprawidłowy pin %q"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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-17 20:38+0000\n"
"PO-Revision-Date: 2023-03-08 07:10+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: \n"
"Language: pt_BR\n"
@ -14,7 +14,7 @@ msgstr ""
"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.16-dev\n"
"X-Generator: Weblate 4.16.2-dev\n"
#: main.c
msgid ""
@ -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"
@ -149,7 +161,7 @@ msgstr "O índice %q está fora do intervalo"
msgid "%q init failed"
msgstr "a inicialização do %q falhou"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr "%q é %q"
@ -193,6 +205,10 @@ msgstr "%q deve ser <= %d"
msgid "%q must be >= %d"
msgstr "o %q deve ser >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr "%q deve ser uma matriz do tipo 'H'"
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr "%q deve ser um bytearray ou uma matriz do tipo 'H' ou 'B'"
@ -227,10 +243,6 @@ msgstr "%q fora dos limites"
msgid "%q out of range"
msgstr "%q fora do alcance"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "%q pino inválido"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr "A etapa %q não pode ser zero"
@ -247,7 +259,7 @@ msgstr "todos os %q, %q, e %q devem ter mesmo comprimento"
msgid "%q=%q"
msgstr "%q=%q"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s erro 0x%x"
@ -519,6 +531,7 @@ msgstr "Já está anunciando."
msgid "Already have all-matches listener"
msgstr "Já há um ouvinte com todas as correspondências"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -694,7 +707,7 @@ msgstr "Os blocos CBC devem ter múltiplos de 16 bytes"
msgid "CIRCUITPY drive could not be found or created."
msgstr "A unidade CIRCUITPY não pôde ser encontrada nem criada."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC ou checksum inválido"
@ -833,6 +846,14 @@ msgid ""
msgstr ""
"A conexão foi desconectada e não pode mais ser usada. Crie uma nova conexão."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr "As coordenadas das matrizes possuem comprimentos diferentes"
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr "Os tipos das coordenadas das matrizes possuem tamanhos diferentes"
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Arquivo .mpy corrompido"
@ -1088,7 +1109,7 @@ msgstr "A função requer bloqueio"
msgid "GNSS init"
msgstr "Inicialização do GNSS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr "Falha Genérica"
@ -1255,9 +1276,11 @@ msgid "Interrupt error."
msgstr "Erro de interrupção."
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "%q Inválido"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Pino do %q inválido"
@ -1279,8 +1302,7 @@ msgstr "BSSID Inválido"
msgid "Invalid MAC address"
msgstr "Endereço MAC inválido"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Argumento inválido"
@ -1306,7 +1328,7 @@ msgstr "Tamanho do pedaço de formato inválido"
msgid "Invalid multicast MAC address"
msgstr "Endereço MAC multicast inválido"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Tamanho inválido"
@ -1315,7 +1337,7 @@ msgstr "Tamanho inválido"
msgid "Invalid socket for TLS"
msgstr "Soquete inválido para o TLS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "Estado inválido"
@ -1347,7 +1369,7 @@ msgstr "Camada já está num grupo"
msgid "Layer must be a Group or TileGrid subclass"
msgstr "A camada deve ser uma subclasse Group ou TileGrid"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "Endereço MAC inválido"
@ -1710,11 +1732,11 @@ msgstr "Apenas uma cor pode ser transparente de cada vez"
msgid "Operation not permitted"
msgstr "A operação não é permitida"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr "A operação ou o recurso não é suportado"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr "A operação expirou"
@ -1722,7 +1744,7 @@ msgstr "A operação expirou"
msgid "Out of MDNS service slots"
msgstr "Sem slots do serviço MDNS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr "Sem memória"
@ -1908,7 +1930,7 @@ msgstr "Somente leitura"
msgid "Read-only filesystem"
msgstr "Sistema de arquivos somente leitura"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr "A resposta recebida foi inválida"
@ -1928,7 +1950,7 @@ msgstr "As requisições de transmissões remotas é limitada a 8 bytes"
msgid "Requested AES mode is unsupported"
msgstr "O modo AES solicitado não é compatível"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr "O recurso solicitado não foi encontrado"
@ -2041,10 +2063,6 @@ msgstr "O estéreo à direita deve estar no canal PWM B"
msgid "Stopping AP is not supported."
msgstr "Não há suporte para a interrupção do AP."
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Forneça pelo menos um pino UART"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr "Forneça um de monotonic_time ou de epoch_time"
@ -2177,7 +2195,7 @@ msgstr "inicialização do UART"
#: ports/raspberrypi/common-hal/busio/UART.c
msgid "UART peripheral in use"
msgstr ""
msgstr "Periférico UART em uso"
#: ports/stm/common-hal/busio/UART.c
msgid "UART re-init"
@ -2231,6 +2249,11 @@ msgstr "Não é possível alocar buffers para conversão assinada"
msgid "Unable to allocate the heap."
msgstr "Não é possível alocar a área de alocação dinâmica de variáveis."
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr "Não foi possível configurar o controlador ADC DMA, ErrorCode:%d"
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr "Não é possível criar um lock"
@ -2249,10 +2272,20 @@ msgstr "Não é possível encontrar GCLK livre"
msgid "Unable to init parser"
msgstr "Não foi possível iniciar o analisador"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr "Não foi possível inicializar o controlador ADC DMA, ErrorCode:%d"
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "Não foi possível ler os dados da paleta de cores"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr "Não foi possível iniciar o controlador ADC DMA, ErrorCode:%d"
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2377,7 +2410,7 @@ msgstr "Comprimento do valor != comprimento fixo necessário"
msgid "Value length > max_length"
msgstr "O comprimento do valor é > max_length"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr "A versão era inválida"
@ -2464,6 +2497,14 @@ msgstr "Você pressionou o botão A na inicialização."
msgid "You pressed the BOOT button at start up"
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 "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."
msgstr "Você pressionou o botão SW38 na inicialização."
@ -4219,8 +4260,6 @@ msgstr "o twai_driver_install retornou um erro esp-idf #%d"
msgid "twai_start returned esp-idf error #%d"
msgstr "o twai_start retornou um erro esp-idf #%d"
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "TX e RX não podem ser ambos"
@ -4442,6 +4481,12 @@ msgstr "zi deve ser de um tipo float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi deve estar na forma (n_section, 2)"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Forneça pelo menos um pino UART"
#~ msgid "%q pin invalid"
#~ msgstr "%q pino inválido"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -143,7 +151,7 @@ msgstr "Индекс %q вне диапазона"
msgid "%q init failed"
msgstr "Инициализация %q не удалась"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr "%q является %q"
@ -187,6 +195,10 @@ msgstr "%q должно быть <= %d"
msgid "%q must be >= %d"
msgstr "%q должно быть >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr "%q должно быть bytearray или array типа 'H' или 'B'"
@ -221,10 +233,6 @@ msgstr "%q за пределом"
msgid "%q out of range"
msgstr "%q вне диапазона"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "Пин %q не допустим"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr "Шаг %q не может быть нулём"
@ -241,7 +249,7 @@ msgstr "%q, %q, и %q должны быть одной длинны"
msgid "%q=%q"
msgstr "%q=%q"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s ошибка 0x%x"
@ -509,6 +517,7 @@ msgstr "Уже объявляемся (advertising)."
msgid "Already have all-matches listener"
msgstr "Уже есть универсальный слушатель"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -686,7 +695,7 @@ msgstr "Блоки CBC должны быть кратны 16 байтам"
msgid "CIRCUITPY drive could not be found or created."
msgstr "Не удалось найти или создать диск CIRCUITPY."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC или контрольная сумма неправильная"
@ -830,6 +839,14 @@ msgstr ""
"Соединение было отключено и больше не может использоваться. Создайте новое "
"соединение."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Файл .mpy поврежден"
@ -1093,7 +1110,7 @@ msgstr "Функция требует блокировки"
msgid "GNSS init"
msgstr "Инициализация GNSS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr "Общий сбой"
@ -1258,9 +1275,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "Недопустимый %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Недопустимый пин %q"
@ -1282,8 +1301,7 @@ msgstr "Неверный BSSID"
msgid "Invalid MAC address"
msgstr "Неверный MAC-адрес"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Недопустимый аргумент"
@ -1309,7 +1327,7 @@ msgstr "Неверный размер блока формата"
msgid "Invalid multicast MAC address"
msgstr "Неверный MAC-адрес multicast"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Неверный размер"
@ -1318,7 +1336,7 @@ msgstr "Неверный размер"
msgid "Invalid socket for TLS"
msgstr "Неверный сокет для TLS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "Неверное состояние"
@ -1352,7 +1370,7 @@ msgstr "Слой уже в группе (Group)"
msgid "Layer must be a Group or TileGrid subclass"
msgstr "Слой должен быть группой (Group) или субклассом TileGrid."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "MAC адрес был недействительным"
@ -1717,11 +1735,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1729,7 +1747,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1910,7 +1928,7 @@ msgstr ""
msgid "Read-only filesystem"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1930,7 +1948,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -2043,10 +2061,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Предоставьте хотяб один пин UART"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2228,6 +2242,11 @@ msgstr ""
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2246,10 +2265,20 @@ msgstr ""
msgid "Unable to init parser"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2372,7 +2401,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2450,6 +2479,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4183,8 +4220,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr ""
@ -4406,6 +4441,12 @@ msgstr "zi должно быть типа float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi должен иметь форму (n_section, 2)"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Предоставьте хотяб один пин UART"
#~ msgid "%q pin invalid"
#~ msgstr "Пин %q не допустим"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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-17 20:38+0000\n"
"PO-Revision-Date: 2023-03-08 07:10+0000\n"
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: sv\n"
@ -14,7 +14,7 @@ msgstr ""
"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.16-dev\n"
"X-Generator: Weblate 4.16.2-dev\n"
#: main.c
msgid ""
@ -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"
@ -148,7 +160,7 @@ msgstr "Index %q ligger utanför intervallet"
msgid "%q init failed"
msgstr "%q init misslyckades"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr "%q är %q"
@ -192,6 +204,10 @@ msgstr "%q måste vara <= %d"
msgid "%q must be >= %d"
msgstr "%q måste vara >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr "%q måste vara en array av typen 'H'"
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr "%q måste vara en bytearray eller array av typen 'H' eller 'B'"
@ -228,10 +244,6 @@ msgstr "%q är utanför gränserna"
msgid "%q out of range"
msgstr "%q utanför intervallet"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "Pinne %q ogiltig"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr "%q steg kan inte vara noll"
@ -248,7 +260,7 @@ msgstr "%q, %q och %q måste vara lika långa"
msgid "%q=%q"
msgstr "%q=%q"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s fel 0x%x"
@ -516,6 +528,7 @@ msgstr "Annonserar redan."
msgid "Already have all-matches listener"
msgstr "Har redan lyssnare för all-matchningar"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -689,7 +702,7 @@ msgstr "CBC-block måste vara multiplar om 16 byte"
msgid "CIRCUITPY drive could not be found or created."
msgstr "CIRCUITPY-enheten kunde inte hittas eller skapas."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC eller checksumma var ogiltig"
@ -825,6 +838,14 @@ msgstr ""
"Anslutningen har kopplats bort och kan inte längre användas. Skapa en ny "
"anslutning."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr "Arrayer för koordinater har olika längd"
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr "Arrayer för koordinater har olika storlek"
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Skadad .mpy-fil"
@ -1079,7 +1100,7 @@ msgstr "Funktionen kräver lås"
msgid "GNSS init"
msgstr "GNSS start"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr "Allmänt fel"
@ -1240,9 +1261,11 @@ msgid "Interrupt error."
msgstr "Interrupt-fel."
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "Ogiltig %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Ogiltig %q-pinne"
@ -1264,8 +1287,7 @@ msgstr "Ogiltig BSSID"
msgid "Invalid MAC address"
msgstr "Ogiltig MAC-adress"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Ogiltigt argument"
@ -1291,7 +1313,7 @@ msgstr "Ogiltig formatsegmentstorlek"
msgid "Invalid multicast MAC address"
msgstr "Ogiltig MAC-adress för multicast"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Ogiltig storlek"
@ -1300,7 +1322,7 @@ msgstr "Ogiltig storlek"
msgid "Invalid socket for TLS"
msgstr "Ogiltig socket för TLS"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "Ogiltigt tillstånd"
@ -1332,7 +1354,7 @@ msgstr "Layer är redan med i en grupp"
msgid "Layer must be a Group or TileGrid subclass"
msgstr "Layer måste vara en underklass av Group eller TileGrid"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "MAC-adressen var ogiltig"
@ -1694,11 +1716,11 @@ msgstr "Bara en färg kan vara genomskinlig i taget"
msgid "Operation not permitted"
msgstr "Åtgärden inte tillåten"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr "Operation eller funktion stöds inte"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr "Åtgärden orsakade timeout"
@ -1706,7 +1728,7 @@ msgstr "Åtgärden orsakade timeout"
msgid "Out of MDNS service slots"
msgstr "Slut på MDNS-serviceplatser"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr "Slut på minne"
@ -1889,7 +1911,7 @@ msgstr "Skrivskyddad"
msgid "Read-only filesystem"
msgstr "Skrivskyddat filsystem"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr "Mottaget svar var ogiltigt"
@ -1909,7 +1931,7 @@ msgstr "RemoteTransmissionRequests begränsad till 8 byte"
msgid "Requested AES mode is unsupported"
msgstr "Det begärda AES-läget stöds inte"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr "Begärd resurs hittades inte"
@ -2022,10 +2044,6 @@ msgstr "Höger stereokanal måste använda PWM kanal B"
msgid "Stopping AP is not supported."
msgstr "Stoppa AP stöds inte."
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Ange minst en UART-pinne"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr "Ange en av monotonic_time eller epoch_time"
@ -2154,7 +2172,7 @@ msgstr "UART start"
#: ports/raspberrypi/common-hal/busio/UART.c
msgid "UART peripheral in use"
msgstr ""
msgstr "UART-enhet används redan"
#: ports/stm/common-hal/busio/UART.c
msgid "UART re-init"
@ -2207,6 +2225,11 @@ msgstr "Det går inte att allokera buffert för signerad konvertering"
msgid "Unable to allocate the heap."
msgstr "Kan inte allokera heap."
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr "Kan inte konfigurera ADC DMA controller, Felkod:%d"
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr "Kan inte skapa lås"
@ -2225,10 +2248,20 @@ msgstr "Det gick inte att hitta ledig GCLK"
msgid "Unable to init parser"
msgstr "Kan inte initiera tolken"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr "Kan inte konfigurera ADC DMA controller, Felkod:%d"
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "Det går inte att läsa färgpalettdata"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr "Kan inte starta ADC DMA controller, Felkod:%d"
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2353,7 +2386,7 @@ msgstr "Värdets längde ! = krävd fast längd"
msgid "Value length > max_length"
msgstr "Värdets längd > max_length"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr "Versionen var ogiltig"
@ -2437,6 +2470,14 @@ msgstr "Du tryckte ner knapp A vid start."
msgid "You pressed the BOOT button at start up"
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 "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."
msgstr "Du tryckte ned SW38-knappen vid start."
@ -4181,8 +4222,6 @@ msgstr "twai_driver_install returnerade esp-idf-fel #%d"
msgid "twai_start returned esp-idf error #%d"
msgstr "twai_start returnerade esp-idf-fel #%d"
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx och rx kan inte båda vara None"
@ -4404,6 +4443,12 @@ msgstr "zi måste vara av typ float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi måste vara i formen (n_section, 2)"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Ange minst en UART-pinne"
#~ msgid "%q pin invalid"
#~ msgstr "Pinne %q ogiltig"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

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"
@ -144,7 +152,7 @@ msgstr "%q indeksi aralık dışında"
msgid "%q init failed"
msgstr "%q init başarısız oldu"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr "%q %q dir"
@ -188,6 +196,10 @@ msgstr "%q <= %d olmalıdır"
msgid "%q must be >= %d"
msgstr "%q >= %d olmalıdır"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr ""
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr "%q 'H' ya da 'B' tipi bir bytearray ya da array olmalıdır"
@ -222,10 +234,6 @@ msgstr "%q sınırların dışında"
msgid "%q out of range"
msgstr "%q aralık dışında"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "%q pini geçersiz"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr "%q sıfır olamaz"
@ -242,7 +250,7 @@ msgstr "%q, %q ve %q aynı uzunlukta olmalıdır"
msgid "%q=%q"
msgstr "%q=%q"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s hatası 0x%x"
@ -511,6 +519,7 @@ msgstr "Halihazırda duyuruluyor."
msgid "Already have all-matches listener"
msgstr "Tüm eşleşmelerle eşleşen dinleyiciniz var"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -684,7 +693,7 @@ msgstr "CBC blokları 16 baytın katları şeklinde olmalı"
msgid "CIRCUITPY drive could not be found or created."
msgstr "CIRCUITPY sürücüsü bulunamadı veya oluşturulamadı."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC yada checksum geçersiz"
@ -817,6 +826,14 @@ msgid ""
"connection."
msgstr "Bağlantı koparıldı ve tekrar kullanılamaz. Yeni bir bağlantı kurun."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "Bozuk .mpy dosyası"
@ -1072,7 +1089,7 @@ msgstr "Fonksiyon kilit gerektirir"
msgid "GNSS init"
msgstr "GNSS init"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
@ -1231,9 +1248,11 @@ msgid "Interrupt error."
msgstr ""
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "Geçersiz %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Geersi %q pin"
@ -1255,8 +1274,7 @@ msgstr "Geçersiz BSSID"
msgid "Invalid MAC address"
msgstr "Geçersiz MAC adresi"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Geçersiz argüman"
@ -1283,7 +1301,7 @@ msgstr "Geçersiz biçim yığın boyutu"
msgid "Invalid multicast MAC address"
msgstr "Geçersiz multicast MAC adresi"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "Geçersiz boyut"
@ -1292,7 +1310,7 @@ msgstr "Geçersiz boyut"
msgid "Invalid socket for TLS"
msgstr "TLS için geçersiz soket"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "Geçersiz durum"
@ -1324,7 +1342,7 @@ msgstr "Katman zaten bir grupta"
msgid "Layer must be a Group or TileGrid subclass"
msgstr "Katman, bir Grup ya da TileGrid alt sınıfı olmalıdır"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "MAC adresi geçersiz"
@ -1680,11 +1698,11 @@ msgstr ""
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr ""
@ -1692,7 +1710,7 @@ msgstr ""
msgid "Out of MDNS service slots"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr ""
@ -1871,7 +1889,7 @@ msgstr ""
msgid "Read-only filesystem"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr ""
@ -1891,7 +1909,7 @@ msgstr ""
msgid "Requested AES mode is unsupported"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr ""
@ -2004,10 +2022,6 @@ msgstr ""
msgid "Stopping AP is not supported."
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr ""
@ -2187,6 +2201,11 @@ msgstr ""
msgid "Unable to allocate the heap."
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
msgstr ""
@ -2205,10 +2224,20 @@ msgstr ""
msgid "Unable to init parser"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr ""
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr ""
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr ""
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2331,7 +2360,7 @@ msgstr ""
msgid "Value length > max_length"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr ""
@ -2409,6 +2438,14 @@ msgstr ""
msgid "You pressed the BOOT button at start up"
msgstr ""
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
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 ""
@ -4142,8 +4179,6 @@ msgstr ""
msgid "twai_start returned esp-idf error #%d"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr ""
@ -4365,6 +4400,9 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
#~ msgid "%q pin invalid"
#~ msgstr "%q pini geçersiz"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

View File

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2023-01-25 03:47+0000\n"
"PO-Revision-Date: 2023-03-01 17:39+0000\n"
"Last-Translator: hexthat <hexthat@gmail.com>\n"
"Language-Team: Chinese Hanyu Pinyin\n"
"Language: zh_Latn_pinyin\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.16-dev\n"
"X-Generator: Weblate 4.16\n"
#: main.c
msgid ""
@ -34,24 +34,43 @@ 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 ""
"\n"
"wú xiào CIRCUITPY_PYSTACK_SIZE\n"
"\n"
"\n"
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
"Please file an issue with your program at https://github.com/adafruit/"
"circuitpython/issues."
msgstr ""
"\n"
"qǐng zài https://github.com/adafruit/circuitpython/issues tí jiāo nín de "
"chéng xù wèn tí."
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
"Press reset to exit safe mode.\n"
msgstr ""
"\n"
"àn chóng zhì tuì chū ān quán mó shì.\n"
#: supervisor/shared/safe_mode.c
msgid ""
"\n"
"You are in safe mode because:\n"
msgstr ""
"\n"
"nín chǔ yú ān quán mó shì, yīn wéi:\n"
#: py/obj.c
msgid " File \"%q\""
@ -144,7 +163,7 @@ msgstr "%q suǒyǐn chāochū fànwéi"
msgid "%q init failed"
msgstr "%q chūshǐhuà shībài"
#: shared-bindings/dualbank/__init__.c
#: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c
msgid "%q is %q"
msgstr "%q shì %q"
@ -188,6 +207,10 @@ msgstr "%q bìxū <= %d"
msgid "%q must be >= %d"
msgstr "%q bìxū >= %d"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
msgid "%q must be array of type 'H'"
msgstr "%q bì xū shì lèi xíng wéi 'H' de shù zǔ"
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
msgstr "%q bì xū shì zì jié shù zǔ huò lèi xíng wéi 'H' huò 'B' de shù zǔ"
@ -223,10 +246,6 @@ msgstr "%q chāo chū jiè xiàn"
msgid "%q out of range"
msgstr "%q chāochū fànwéi"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
msgid "%q pin invalid"
msgstr "%q yǐn jiǎo wúxiào"
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
msgid "%q step cannot be zero"
msgstr "%q bù cháng bù néng wéi líng"
@ -243,7 +262,7 @@ msgstr "%q, %q, hé %q bì xū cháng dù xiāng tóng"
msgid "%q=%q"
msgstr "%q=%q"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
#, c-format
msgid "%s error 0x%x"
msgstr "%s cuò wù 0x%x"
@ -511,6 +530,7 @@ msgstr "Mùqián zhèngzài guǎngbō."
msgid "Already have all-matches listener"
msgstr "yǐjīng yǒu all-matches jiāntīng qì"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
@ -601,7 +621,7 @@ msgstr "wèi tú dàxiǎo hé měi gè zhí de wèi shù bìxū pǐpèi"
#: supervisor/shared/safe_mode.c
msgid "Boot device must be first (interface #0)."
msgstr ""
msgstr "yǐn dǎo shè bèi bì xū shì dì yī gè (jiē kǒu #0)."
#: ports/mimxrt10xx/common-hal/busio/UART.c
msgid "Both RX and TX required for flow control"
@ -684,7 +704,7 @@ msgstr "CBC kuài bìxū shì 16 zìjié de bèishù"
msgid "CIRCUITPY drive could not be found or created."
msgstr "zhǎo bú dào huò chuàng jiàn CIRCUITPY qū dòng qì."
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "CRC or checksum was invalid"
msgstr "CRC huò jiàoyàn hé wúxiào"
@ -819,6 +839,14 @@ msgid ""
"connection."
msgstr "Liánjiē yǐ duàn kāi, wúfǎ zài shǐyòng. Chuàngjiàn yīgè xīn de liánjiē."
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays have different lengths"
msgstr ""
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: py/persistentcode.c
msgid "Corrupt .mpy file"
msgstr "sǔnhuài de .mpy wénjiàn"
@ -938,7 +966,7 @@ msgstr "Zhèngzé biǎodá shì cuòwù"
#: supervisor/shared/safe_mode.c
msgid "Error in safemode.py."
msgstr ""
msgstr "safemode.py cuò wù."
#: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c
msgid "Error: Failure to bind"
@ -1014,7 +1042,7 @@ msgstr "Wúfǎ xiě rù nèibù shǎncún."
#: supervisor/shared/safe_mode.c
msgid "Fault detected by hardware."
msgstr ""
msgstr "yìng jiàn jiǎn cè dào gù zhàng."
#: py/moduerrno.c
msgid "File exists"
@ -1076,7 +1104,7 @@ msgstr "Hánshù xūyào suǒdìng"
msgid "GNSS init"
msgstr "GNSS chūshǐhuà"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr "tōng yòng gù zhàng"
@ -1107,12 +1135,12 @@ msgstr "Shǐyòng de yìngjiàn, qǐng chángshì qítā yǐn jiǎo"
#: supervisor/shared/safe_mode.c
msgid "Heap allocation when VM not running."
msgstr ""
msgstr "VM wèi yùn xíng shí de duī fēn pèi."
#: supervisor/shared/safe_mode.c
msgid ""
"Heap was corrupted because the stack was too small. Increase stack size."
msgstr ""
msgstr "duī yǐ sǔn huài, yīn wéi duī zhàn tài xiǎo. zēng jiā duī zhàn dà xiǎo."
#: extmod/vfs_posix_file.c py/objstringio.c
msgid "I/O operation on closed file"
@ -1237,12 +1265,14 @@ msgstr "Nèibù kān mén gǒu dìngshí qì chāoshí."
#: supervisor/shared/safe_mode.c
msgid "Interrupt error."
msgstr ""
msgstr "zhōng duàn cuò wù."
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
#: shared-bindings/displayio/EPaperDisplay.c
msgid "Invalid %q"
msgstr "wú xiào %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: shared-bindings/microcontroller/Pin.c
msgid "Invalid %q pin"
msgstr "Wúxiào de %q yǐn jiǎo"
@ -1264,8 +1294,7 @@ msgstr "Wúxiào de BSSID"
msgid "Invalid MAC address"
msgstr "wú xiào de MAC dì zhǐ"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: py/moduerrno.c
#: ports/espressif/common-hal/espidf/__init__.c py/moduerrno.c
msgid "Invalid argument"
msgstr "Wúxiào de cānshù"
@ -1291,7 +1320,7 @@ msgstr "Géshì kuài dàxiǎo wúxiào"
msgid "Invalid multicast MAC address"
msgstr "wú xiào de duō bō MAC dì zhǐ"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr "dà xiǎo wú xiào"
@ -1300,7 +1329,7 @@ msgstr "dà xiǎo wú xiào"
msgid "Invalid socket for TLS"
msgstr "TLS de chā zuò wú xiào"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid state"
msgstr "wú xiào zhuàng tài"
@ -1332,7 +1361,7 @@ msgstr "tú céng yǐ zài zǔ zhōng"
msgid "Layer must be a Group or TileGrid subclass"
msgstr "tú céng bìxū shì zǔ huò píng pū wǎng gé zi lèi"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
msgstr "MAC dì zhǐ wú xiào"
@ -1694,11 +1723,11 @@ msgstr "Yīcì zhǐ néng yǒuyī zhǒng yánsè shì tòumíng de"
msgid "Operation not permitted"
msgstr "bù yǔnxǔ cāozuò"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation or feature not supported"
msgstr "bù zhī chí cāo zuò huò gōng néng"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Operation timed out"
msgstr "cāo zuò yǐ fēn shí"
@ -1706,7 +1735,7 @@ msgstr "cāo zuò yǐ fēn shí"
msgid "Out of MDNS service slots"
msgstr "chāo chū MDNS fú wù chā cáo"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Out of memory"
msgstr "nèi cún bù zú"
@ -1887,7 +1916,7 @@ msgstr "Zhǐ dú"
msgid "Read-only filesystem"
msgstr "Zhǐ dú wénjiàn xìtǒng"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Received response was invalid"
msgstr "shōu dào de xiǎng yìng wú xiào"
@ -1907,7 +1936,7 @@ msgstr "RemoteTransmissionRequests xiànzhì wèi 8 gè zì jié"
msgid "Requested AES mode is unsupported"
msgstr "Qǐngqiú de AES móshì bù shòu zhīchí"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Requested resource not found"
msgstr "wèi zhǎo dào qǐng qiú de zī yuán"
@ -2020,10 +2049,6 @@ msgstr "lì tǐ shēng yòu cè bì xū zài PWM tōng dào B shàng"
msgid "Stopping AP is not supported."
msgstr "bù zhī chí tíng zhǐ AP."
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "Supply at least one UART pin"
msgstr "Dìngyì zhìshǎo yīgè UART yǐn jiǎo"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
msgstr "tí gòng qí zhōng yī monotonic_time huò epoch_time"
@ -2038,7 +2063,7 @@ msgstr "Wēndù dòu qǔ chāoshí"
#: supervisor/shared/safe_mode.c
msgid "The `microcontroller` module was used to boot into safe mode."
msgstr ""
msgstr "`microcontroller` mó kuài yòng yú qǐ dòng dào ān quán mó shì."
#: py/obj.c
msgid "The above exception was the direct cause of the following exception:"
@ -2050,7 +2075,7 @@ msgstr "Rgb_pins de chángdù bìxū wèi 6,12,18,24 huò 30"
#: supervisor/shared/safe_mode.c
msgid "The power dipped. Make sure you are providing enough power."
msgstr ""
msgstr "lì liàng xià jiàng le. què bǎo nín tí gòng zú gòu de diàn lì."
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's bits_per_sample does not match the mixer's"
@ -2070,7 +2095,7 @@ msgstr "Yàngběn de qiānmíng yǔ hǔn yīn qì de qiānmíng bù pǐpèi"
#: supervisor/shared/safe_mode.c
msgid "Third-party firmware fatal error."
msgstr ""
msgstr "dì sān fāng gù jiàn zhì mìng cuò wù."
#: shared-module/imagecapture/ParallelImageCapture.c
msgid "This microcontroller does not support continuous capture."
@ -2152,7 +2177,7 @@ msgstr "UART chūshǐhuà"
#: ports/raspberrypi/common-hal/busio/UART.c
msgid "UART peripheral in use"
msgstr ""
msgstr "UART wài shè shǐ yòng zhōng"
#: ports/stm/common-hal/busio/UART.c
msgid "UART re-init"
@ -2203,7 +2228,12 @@ msgstr "Wúfǎ fēnpèi huǎnchōng qū yòng yú qiānmíng zhuǎnhuàn"
#: supervisor/shared/safe_mode.c
msgid "Unable to allocate the heap."
msgstr ""
msgstr "wú fǎ fēn pèi duī."
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to configure ADC DMA controller, ErrorCode:%d"
msgstr "wú fǎ pèi zhì ADC DMA kòng zhì qì, cuò wù dài mǎ:%d"
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
@ -2223,10 +2253,20 @@ msgstr "Wúfǎ zhǎodào miǎnfèi de GCLK"
msgid "Unable to init parser"
msgstr "Wúfǎ chūshǐhuà jiěxī qì"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to initialize ADC DMA controller, ErrorCode:%d"
msgstr "wú fǎ chū shǐ huà ADC DMA kòng zhì qì, cuò wù dài mǎ:%d"
#: shared-module/displayio/OnDiskBitmap.c
msgid "Unable to read color palette data"
msgstr "Wúfǎ dúqǔ tiáosèbǎn shùjù"
#: ports/espressif/common-hal/analogbufio/BufferedIn.c
#, c-format
msgid "Unable to start ADC DMA controller, ErrorCode:%d"
msgstr "wú fǎ qǐ dòng ADC DMA kòng zhì qì, cuò wù dài mǎ:%d"
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Unable to start mDNS query"
@ -2351,7 +2391,7 @@ msgstr "Zhí chángdù != Suǒ xū de gùdìng chángdù"
msgid "Value length > max_length"
msgstr "Zhí chángdù > zuìdà chángdù"
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Version was invalid"
msgstr "bǎn běn wú xiào"
@ -2423,44 +2463,52 @@ msgstr "Tèzhēng bù zhīchí xiě rù"
#: 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 "nín zài qǐ dòng shí àn xià le liǎng gè àn niǔ."
#: 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 "nín zài qǐ dòng shí àn xià le àn niǔ A."
#: supervisor/shared/safe_mode.c
msgid "You pressed the BOOT button at start up"
msgstr ""
msgstr "nín zài qǐ dòng shí àn xià le qǐ dòng àn niǔ"
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
msgid "You pressed the GPIO0 button at start up."
msgstr "nín zài qǐ dòng shí àn xià le GPIO0 àn niǔ."
#: ports/espressif/boards/espressif_esp32_lyrat/mpconfigboard.h
msgid "You pressed the Rec button at start up."
msgstr "nín zài qǐ dòng shí àn xià le lù zhì àn niǔ."
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
msgid "You pressed the SW38 button at start up."
msgstr ""
msgstr "nín zài qǐ dòng shí àn xià le SW38 àn niǔ."
#: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h
msgid "You pressed the VOLUME button at start up."
msgstr ""
msgstr "nín zài qǐ dòng shí àn xià le yīn liàng àn niǔ."
#: 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 "nín zài qǐ dòng shí àn xià le zhōng yāng àn niǔ."
#: ports/nrf/boards/aramcon2_badge/mpconfigboard.h
msgid "You pressed the left button at start up."
msgstr ""
msgstr "nín zài qǐ dòng shí àn xià le zuǒ àn niǔ."
#: supervisor/shared/safe_mode.c
msgid "You pressed the reset button during boot."
msgstr ""
msgstr "nín zài qǐ dòng guò chéng zhōng àn xià le chóng zhì àn niǔ."
#: supervisor/shared/micropython.c
msgid "[truncated due to length]"
msgstr ""
msgstr "[yīn cháng dù ér jié duàn]"
#: py/objtype.c
msgid "__init__() should return None"
@ -2533,7 +2581,7 @@ msgstr "shùzǔ yǒu tài duō wéidù"
#: extmod/ulab/code/ndarray.c
msgid "array is too big"
msgstr ""
msgstr "zhèn liè tài dà"
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/memorymap/AddressRange.c shared-bindings/nvm/ByteArray.c
@ -3019,6 +3067,8 @@ msgid ""
"espcamera.Camera requires reserved PSRAM to be configured. See the "
"documentation for instructions."
msgstr ""
"espcamera.Camera xū yào pèi zhì bǎo liú de PSRAM. yǒu guān shuō míng, qǐng "
"cān yuè wén dàng."
#: py/runtime.c
msgid "exceptions must derive from BaseException"
@ -3789,7 +3839,7 @@ msgstr "jǐn zhī chí dān shēng dào"
#: extmod/ulab/code/numpy/create.c
msgid "only ndarrays can be concatenated"
msgstr ""
msgstr "zhǐ néng lián jiē ndarray (shù zì)"
#: ports/stm/common-hal/audiobusio/PDMIn.c
msgid "only oversample=64 is supported"
@ -4178,8 +4228,6 @@ msgstr "twai_driver_install fǎn huí esp-idf cuò wù #%d"
msgid "twai_start returned esp-idf error #%d"
msgstr "twai_start fǎn huí esp -idf cuò wù #%d"
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: shared-bindings/busio/UART.c shared-bindings/canio/CAN.c
msgid "tx and rx cannot both be None"
msgstr "tx hé rx bùnéng dōu shì wú"
@ -4401,6 +4449,12 @@ msgstr "zi bìxū wèi fú diǎn xíng"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)"
#~ msgid "Supply at least one UART pin"
#~ msgstr "Dìngyì zhìshǎo yīgè UART yǐn jiǎo"
#~ msgid "%q pin invalid"
#~ msgstr "%q yǐn jiǎo wúxiào"
#~ msgid ""
#~ "\n"
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"

79
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,13 +1080,14 @@ 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) {
if (!simulate_reset) {
serial_write_compressed(translate("soft reboot\n"));
}
simulate_reset = false;
if (pyexec_mode_kind == PYEXEC_MODE_FRIENDLY_REPL) {
// If code.py did a fake deep sleep, pretend that we
// are running code.py for the first time after a hard

View File

@ -367,7 +367,7 @@ $(BUILD)/firmware.elf: $(OBJ) $(GENERATED_LD_FILE)
$(STEPECHO) "LINK $@"
$(Q)echo $(OBJ) > $(BUILD)/firmware.objs
$(Q)$(CC) -o $@ $(LDFLAGS) @$(BUILD)/firmware.objs -Wl,--start-group $(LIBS) -Wl,--end-group
$(Q)$(SIZE) $@ | $(PYTHON) $(TOP)/tools/build_memory_info.py $(GENERATED_LD_FILE)
$(Q)$(SIZE) $@ | $(PYTHON) $(TOP)/tools/build_memory_info.py $(GENERATED_LD_FILE) $(BUILD)
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
$(STEPECHO) "Create $@"

View File

@ -57,5 +57,8 @@ void port_finish_background_task(void) {
}
#endif
void port_background_tick(void) {
}
void port_background_task(void) {
}

View File

@ -12,6 +12,7 @@ LONGINT_IMPL = NONE
# To keep the build small
CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_BUSDEVICE = 1 # lis3dh needs it
CIRCUITPY_KEYPAD = 0
# Include these Python libraries in firmware.

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

@ -52,6 +52,10 @@ uint8_t stop_sequence[] = {
0x02, 0x80, 0xf0 // Power off
};
uint8_t refresh_sequence[] = {
0x12, 0x00
};
void board_init(void) {
busio_spi_obj_t *spi = &displays[0].fourwire_bus.inline_bus;
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, NULL, false);
@ -74,6 +78,7 @@ void board_init(void) {
bus,
start_sequence,
sizeof(start_sequence),
0, // start up time
stop_sequence,
sizeof(stop_sequence),
300, // width
@ -92,13 +97,15 @@ void board_init(void) {
NO_COMMAND, // write_color_ram_command (can add this for grayscale eventually)
false, // color_bits_inverted
0x000000, // highlight_color
0x12, // refresh_display_command
refresh_sequence, // refresh_display_sequence
sizeof(refresh_sequence),
40, // refresh_time
&pin_PA01, // busy_pin
false, // busy_state
5, // seconds_per_frame
false, // chip_select (don't always toggle chip select)
false, // grayscale
false, // acep
false); // two_byte_sequence_length
}

View File

@ -37,6 +37,7 @@ CIRCUITPY_USB_MIDI = 0
CIRCUITPY_VECTORIO = 0
CIRCUITPY_BUSDEVICE = 0
CIRCUITPY_BITMAPTOOLS = 0
CIRCUITPY_GIFIO = 0
CIRCUITPY_WATCHDOG = 0
CIRCUITPY_AUDIOIO = 1

View File

@ -268,7 +268,21 @@ bool common_hal_busio_spi_write(busio_spi_obj_t *self,
}
int32_t status;
if (len >= 16) {
status = sercom_dma_write(self->spi_desc.dev.prvt, data, len);
size_t bytes_remaining = len;
// Maximum DMA transfer is 65535
while (1) {
size_t to_send = (bytes_remaining > 65535) ? 65535 : bytes_remaining;
status = sercom_dma_write(self->spi_desc.dev.prvt, data + (len - bytes_remaining), to_send);
bytes_remaining -= to_send;
if (bytes_remaining > 0) {
// Multi-part transfer; let other things run before doing the next chunk.
RUN_BACKGROUND_TASKS;
} else {
// All done.
break;
}
}
} else {
struct io_descriptor *spi_io;
spi_m_sync_get_io_descriptor(&self->spi_desc, &spi_io);

View File

@ -58,6 +58,8 @@ static void usart_async_rxc_callback(const struct usart_async_descriptor *const
// Nothing needs to be done by us.
}
// shared-bindings validates that the tx and rx are not both missing,
// and that the pins are distinct.
void common_hal_busio_uart_construct(busio_uart_obj_t *self,
const mcu_pin_obj_t *tx, const mcu_pin_obj_t *rx,
const mcu_pin_obj_t *rts, const mcu_pin_obj_t *cts,
@ -92,10 +94,6 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
bool have_rts = rts != NULL;
bool have_cts = cts != NULL;
if (!have_tx && !have_rx) {
mp_raise_ValueError(translate("tx and rx cannot both be None"));
}
if (have_rx && receiver_buffer_size > 0 && (receiver_buffer_size & (receiver_buffer_size - 1)) != 0) {
mp_raise_ValueError_varg(translate("%q must be power of 2"), MP_QSTR_receiver_buffer_size);
}
@ -107,6 +105,20 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
// This assignment is only here because the usart_async routines take a *const argument.
struct usart_async_descriptor *const usart_desc_p = (struct usart_async_descriptor *const)&self->usart_desc;
// Allowed pads for USART. See the SAMD21 and SAMx5x datasheets.
// TXPO:
// (both) 0x0: TX pad 0; no RTS/CTS
// (SAMD21) 0x1: TX pad 2; no RTS/CTS
// (SAMx5x) 0x1: reserved
// (both) 0x2: TX pad 0; RTS: pad 2, CTS: pad 3
// (SAMD21) 0x3: reserved
// (SAMx5x) 0x3: TX pad 0; RTS: pad 2; no CTS
// RXPO:
// 0x0: RX pad 0
// 0x1: RX pad 1
// 0x2: RX pad 2
// 0x3: RX pad 3
for (int i = 0; i < NUM_SERCOMS_PER_PIN; i++) {
Sercom *potential_sercom = NULL;
if (have_tx) {
@ -115,29 +127,71 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
continue;
}
potential_sercom = sercom_insts[sercom_index];
// SAMD21 and SAMx5x have different requirements.
#ifdef SAMD21
if (potential_sercom->USART.CTRLA.bit.ENABLE != 0 ||
!(tx->sercom[i].pad == 0 ||
tx->sercom[i].pad == 2)) {
if (potential_sercom->USART.CTRLA.bit.ENABLE != 0) {
// In use.
continue;
}
if (tx->sercom[i].pad != 0 &&
tx->sercom[i].pad != 2) {
// TX must be on pad 0 or 2.
continue;
}
if (have_rts) {
if (rts->sercom[i].pad != 2 ||
tx->sercom[i].pad == 2) {
// RTS pin must be on pad 2, so if TX is also on pad 2, not possible
continue;
}
}
if (have_cts) {
if (cts->sercom[i].pad != 3 ||
(have_rx && rx->sercom[i].pad == 3)) {
// CTS pin must be on pad 3, so if RX is also on pad 3, not possible
continue;
}
}
#endif
#ifdef SAM_D5X_E5X
if (potential_sercom->USART.CTRLA.bit.ENABLE != 0 ||
!(tx->sercom[i].pad == 0)) {
if (potential_sercom->USART.CTRLA.bit.ENABLE != 0) {
// In use.
continue;
}
if (tx->sercom[i].pad != 0) {
// TX must be on pad 0
continue;
}
if (have_rts && rts->sercom[i].pad != 2) {
// RTS pin must be on pad 2
continue;
}
if (have_cts) {
if (cts->sercom[i].pad != 3 ||
(have_rx && rx->sercom[i].pad == 3)) {
// CTS pin must be on pad 3, so if RX is also on pad 3, not possible
continue;
}
}
#endif
tx_pinmux = PINMUX(tx->number, (i == 0) ? MUX_C : MUX_D);
tx_pad = tx->sercom[i].pad;
if (have_rts) {
rts_pinmux = PINMUX(rts->number, (i == 0) ? MUX_C : MUX_D);
}
if (rx == NULL) {
if (!have_rx) {
// TX only, so don't need to look further.
sercom = potential_sercom;
break;
}
}
// Have TX, now look for RX match. We know have_rx is true at this point.
for (int j = 0; j < NUM_SERCOMS_PER_PIN; j++) {
if (((!have_tx && rx->sercom[j].index < SERCOM_INST_NUM &&
sercom_insts[rx->sercom[j].index]->USART.CTRLA.bit.ENABLE == 0) ||
@ -160,20 +214,10 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
if (sercom == NULL) {
raise_ValueError_invalid_pins();
}
if (!have_tx) {
tx_pad = 0;
if (rx_pad == 0) {
tx_pad = 2;
}
}
if (!have_rx) {
rx_pad = (tx_pad + 1) % 4;
}
// Set up clocks on SERCOM.
samd_peripherals_sercom_clock_init(sercom, sercom_index);
if (rx && receiver_buffer_size > 0) {
if (have_rx && receiver_buffer_size > 0) {
self->buffer_length = receiver_buffer_size;
if (NULL != receiver_buffer) {
self->buffer = receiver_buffer;
@ -204,36 +248,41 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
// which don't necessarily match what we need. After calling it, set the values
// specific to this instantiation of UART.
// Set pads computed for this SERCOM. Refer to the datasheet for details on pads.
// TXPO:
// 0x0: TX pad 0; no RTS/CTS
// 0x1: reserved
// 0x2: TX pad 0; RTS: pad 2, CTS: pad 3
// 0x3: TX pad 0; RTS: pad 2; no CTS
// RXPO:
// 0x0: RX pad 0
// 0x1: RX pad 1
// 0x2: RX pad 2
// 0x3: RX pad 3
// See the TXPO/RXPO table above for how RXPO and TXPO are chosen below.
// Default to TXPO with no RTS/CTS
uint8_t computed_txpo = 0;
// If we have both CTS (with or without RTS), use second pinout
if (have_cts) {
computed_txpo = 2;
}
// If we have RTS only, use the third pinout
if (have_rts && !have_cts) {
computed_txpo = 3;
// rxpo maps directly to rx_pad.
// Set to 0x0 if no RX, but it doesn't matter because RX will not be enabled.
const uint8_t rxpo = have_rx ? rx_pad : 0x0;
#ifdef SAMD21
// SAMD21 has only one txpo value when using either CTS or RTS or both.
// TX is on pad 0 or 2, or there is no TX.
// 0x0 for pad 0, 0x1 for pad 2.
uint8_t txpo;
if (tx_pad == 2) {
txpo = 0x1;
} else {
txpo = (have_cts || have_rts) ? 0x2 : 0x0;
}
#endif
#ifdef SAM_D5X_E5X
// SAMx5x has two different possibilities, per the chart above.
// We already know TX is on pad 0, or there is no TX.
// Without RTS or CTS, txpo can be 0x0.
// It's not clear if 0x2 would cover all our cases, but this is known to be safe.
uint8_t txpo = (have_rts || have_cts) ? 0x2: 0x0;
#endif
// Doing a group mask and set of the registers saves 60 bytes over setting the bitfields individually.
sercom->USART.CTRLA.reg &= ~(SERCOM_USART_CTRLA_TXPO_Msk |
SERCOM_USART_CTRLA_RXPO_Msk |
SERCOM_USART_CTRLA_FORM_Msk);
sercom->USART.CTRLA.reg |= SERCOM_USART_CTRLA_TXPO(computed_txpo) |
SERCOM_USART_CTRLA_RXPO(rx_pad) |
// See chart above for TXPO values and RXPO values.
sercom->USART.CTRLA.reg |= SERCOM_USART_CTRLA_TXPO(txpo) |
SERCOM_USART_CTRLA_RXPO(rxpo) |
(parity == BUSIO_UART_PARITY_NONE ? 0 : SERCOM_USART_CTRLA_FORM(1));
// Enable tx and/or rx based on whether the pins were specified.

View File

@ -211,5 +211,5 @@ mcu_pin_function_t *mcu_find_pin_function(mcu_pin_function_t *table, const mcu_p
return table;
}
}
mp_raise_ValueError_varg(translate("%q pin invalid"), name);
mp_raise_ValueError_varg(translate("Invalid %q pin"), name);
}

View File

@ -67,10 +67,6 @@ void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) {
never_reset_pin_number(self->pin->number);
}
void common_hal_pwmio_pwmout_reset_ok(pwmio_pwmout_obj_t *self) {
timer_reset_ok(self->timer->index, self->timer->is_tc);
}
void pwmout_reset(void) {
// Reset all timers
for (int i = 0; i < TCC_INST_NUM; i++) {
@ -267,6 +263,7 @@ void common_hal_pwmio_pwmout_deinit(pwmio_pwmout_obj_t *self) {
if (common_hal_pwmio_pwmout_deinited(self)) {
return;
}
timer_reset_ok(self->timer->index, self->timer->is_tc);
const pin_timer_t *t = self->timer;
if (t->is_tc) {
Tc *tc = tc_insts[t->index];

View File

@ -33,5 +33,8 @@ void port_start_background_task(void) {
void port_finish_background_task(void) {
}
void port_background_tick(void) {
}
void port_background_task(void) {
}

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

@ -30,6 +30,8 @@
#include "supervisor/filesystem.h"
#include "supervisor/shared/stack.h"
void port_background_tick(void) {
}
void port_background_task(void) {
}
void port_start_background_task(void) {

View File

@ -90,6 +90,8 @@ void common_hal_pwmio_pwmout_deinit(pwmio_pwmout_obj_t *self) {
return;
}
pwmout_dev[self->number].reset = true;
ioctl(pwmout_dev[self->number].fd, PWMIOC_STOP, 0);
close(pwmout_dev[self->number].fd);
pwmout_dev[self->number].fd = -1;
@ -134,10 +136,6 @@ void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) {
pwmout_dev[self->number].reset = false;
}
void common_hal_pwmio_pwmout_reset_ok(pwmio_pwmout_obj_t *self) {
pwmout_dev[self->number].reset = true;
}
void pwmout_reset(void) {
for (int i = 0; i < MP_ARRAY_SIZE(pwmout_dev); i++) {
if (pwmout_dev[i].fd >= 0 && pwmout_dev[i].reset) {

View File

@ -126,9 +126,13 @@ ifeq ($(DEBUG), 1)
# CFLAGS += -fno-inline -fno-ipa-sra
else
CFLAGS += -DNDEBUG -ggdb3
OPTIMIZATION_FLAGS ?= -O2
# RISC-V is larger than xtensa
# Use -Os for RISC-V when it overflows
ifeq ($(IDF_TARGET_ARCH),riscv)
OPTIMIZATION_FLAGS ?= -Os
else
OPTIMIZATION_FLAGS ?= -O2
endif
endif
# option to override compiler optimization level, set in boards/$(BOARD)/mpconfigboard.mk
@ -214,7 +218,6 @@ endif
SRC_C += \
background.c \
mphalport.c \
bindings/espidf/__init__.c \
boards/$(BOARD)/board.c \
boards/$(BOARD)/pins.c \
shared/netutils/netutils.c \
@ -248,8 +251,6 @@ ifneq ($(CIRCUITPY_BLEIO),0)
SRC_C += common-hal/_bleio/ble_events.c
endif
SRC_C += $(wildcard common-hal/espidf/*.c)
ifneq ($(CIRCUITPY_ESPCAMERA),0)
SRC_CAMERA := \
$(wildcard common-hal/espcamera/*.c) \
@ -259,6 +260,20 @@ CFLAGS += -isystem esp32-camera/driver/include
CFLAGS += -isystem esp32-camera/conversions/include
endif
ifneq ($(CIRCUITPY_ESPIDF),0)
SRC_ESPIDF := \
$(wildcard common-hal/espidf/*.c) \
$(wildcard bindings/espidf/*.c)
SRC_C += $(SRC_ESPIDF)
endif
ifneq ($(CIRCUITPY_ESPNOW),0)
SRC_ESPNOW := \
$(wildcard common-hal/espnow/*.c) \
$(wildcard bindings/espnow/*.c)
SRC_C += $(SRC_ESPNOW)
endif
ifneq ($(CIRCUITPY_ESPULP),0)
SRC_ULP := \
$(wildcard common-hal/espulp/*.c) \
@ -434,7 +449,7 @@ $(BUILD)/firmware.elf: $(OBJ) | esp-idf-stamp
$(BUILD)/circuitpython-firmware.bin: $(BUILD)/firmware.elf | tools/build_memory_info.py
$(STEPECHO) "Create $@"
$(Q)esptool.py --chip $(IDF_TARGET) elf2image $(FLASH_FLAGS) --elf-sha256-offset 0xb0 -o $@ $^
$(Q)$(PYTHON) tools/build_memory_info.py $< $(BUILD)/esp-idf/sdkconfig $@
$(Q)$(PYTHON) tools/build_memory_info.py $< $(BUILD)/esp-idf/sdkconfig $@ $(BUILD)
$(BUILD)/firmware.bin: $(BUILD)/circuitpython-firmware.bin | esp-idf-stamp
$(Q)$(PYTHON) ../../tools/join_bins.py $@ $(BOOTLOADER_OFFSET) $(BUILD)/esp-idf/bootloader/bootloader.bin $(PARTITION_TABLE_OFFSET) $(BUILD)/esp-idf/partition_table/partition-table.bin $(FIRMWARE_OFFSET) $(BUILD)/circuitpython-firmware.bin

View File

@ -40,7 +40,7 @@
#include "common-hal/pulseio/PulseIn.h"
#endif
void port_background_task(void) {
void port_background_tick(void) {
// Zero delay in case FreeRTOS wants to switch to something else.
vTaskDelay(0);
#if CIRCUITPY_PULSEIO
@ -48,6 +48,9 @@ void port_background_task(void) {
#endif
}
void port_background_task(void) {
}
void port_start_background_task(void) {
}

View File

@ -0,0 +1,369 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017-2020 Nick Moore
* Copyright (c) 2018 shawwwn <shawwwn1@gmail.com>
* Copyright (c) 2020-2021 Glenn Moloney @glenn20
* Copyright (c) 2023 MicroDev
*
* 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 "py/objproperty.h"
#include "py/runtime.h"
#include "py/stream.h"
#include "shared-bindings/util.h"
#include "bindings/espnow/ESPNow.h"
#include "bindings/espnow/Peer.h"
#include "common-hal/espnow/__init__.h"
#include "common-hal/espnow/ESPNow.h"
#include "esp_now.h"
// Raise ValueError if the ESPNow object is deinited
static void espnow_check_for_deinit(espnow_obj_t *self) {
if (common_hal_espnow_deinited(self)) {
raise_deinited_error();
}
}
// --- Initialisation and Config functions ---
//| class ESPNow:
//| """Provides access to the ESP-NOW protocol."""
//|
//| def __init__(self, buffer_size: Optional[int], phy_rate: Optional[int]) -> None:
//| """Allocate and initialize `ESPNow` instance as a singleton.
//|
//| :param int buffer_size: The size of the internal ring buffer. Default: 526 bytes.
//| :param int phy_rate: The ESP-NOW physical layer rate. Default: 1 Mbps."""
//| ...
STATIC mp_obj_t espnow_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
enum { ARG_buffer_size, ARG_phy_rate };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_buffer_size, MP_ARG_INT, { .u_int = 526 } },
{ MP_QSTR_phy_rate, MP_ARG_INT, { .u_int = WIFI_PHY_RATE_1M_L } },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
espnow_obj_t *self = MP_STATE_PORT(espnow_singleton);
if (self != NULL) {
mp_raise_RuntimeError(translate("Already running"));
}
// Allocate a new object
self = m_new_obj(espnow_obj_t);
self->base.type = &espnow_type;
// Construct the object
common_hal_espnow_construct(self, args[ARG_buffer_size].u_int, args[ARG_phy_rate].u_int);
// Set the global singleton pointer for the espnow protocol.
MP_STATE_PORT(espnow_singleton) = self;
return MP_OBJ_FROM_PTR(self);
}
//| def deinit(self) -> None:
//| """Deinitializes ESP-NOW and releases it for another program."""
//| ...
STATIC mp_obj_t espnow_deinit(mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
espnow_check_for_deinit(self);
common_hal_espnow_deinit(self);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(espnow_deinit_obj, espnow_deinit);
//| def __enter__(self) -> ESPNow:
//| """No-op used by Context Managers."""
//| ...
// Provided by context manager helper.
//| def __exit__(self) -> None:
//| """Automatically deinitializes the hardware when exiting a context. See
//| :ref:`lifetime-and-contextmanagers` for more info."""
//| ...
STATIC mp_obj_t espnow_obj___exit__(size_t n_args, const mp_obj_t *args) {
(void)n_args;
return espnow_deinit(args[0]);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(espnow___exit___obj, 4, 4, espnow_obj___exit__);
// --- Send and Read messages ---
//| def send(
//| self,
//| message: ReadableBuffer,
//| peer: Optional[Peer] = None,
//| ) -> None:
//| """Send a message to the peer's mac address.
//|
//| This blocks until a timeout of ``2`` seconds if the ESP-NOW internal buffers are full.
//|
//| :param ReadableBuffer message: The message to send (length <= 250 bytes).
//| :param Peer peer: Send message to this peer. If `None`, send to all registered peers.
//| """
//| ...
STATIC mp_obj_t espnow_send(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_message, ARG_peer };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_message, MP_ARG_OBJ | MP_ARG_REQUIRED },
{ MP_QSTR_peer, MP_ARG_OBJ, { .u_obj = mp_const_none } },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
espnow_obj_t *self = pos_args[0];
espnow_check_for_deinit(self);
// Get a pointer to the data buffer of the message
mp_buffer_info_t message;
mp_get_buffer_raise(args[ARG_message].u_obj, &message, MP_BUFFER_READ);
const uint8_t *mac = NULL;
if (args[ARG_peer].u_obj != mp_const_none) {
const espnow_peer_obj_t *peer = MP_OBJ_FROM_PTR(mp_arg_validate_type_or_none(args[ARG_peer].u_obj, &espnow_peer_type, MP_QSTR_peer));
mac = peer->peer_info.peer_addr;
}
return common_hal_espnow_send(self, &message, mac);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(espnow_send_obj, 2, espnow_send);
//| def read(self) -> Optional[ESPNowPacket]:
//| """Read a packet from the receive buffer.
//|
//| This is non-blocking, the packet is received asynchronously from the peer(s).
//|
//| :returns: An `ESPNowPacket` if available in the buffer, otherwise `None`."""
//| ...
STATIC mp_obj_t espnow_read(mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
espnow_check_for_deinit(self);
return common_hal_espnow_read(self);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(espnow_read_obj, espnow_read);
//| send_success: int
//| """The number of tx packets received by the peer(s) ``ESP_NOW_SEND_SUCCESS``. (read-only)"""
//|
STATIC mp_obj_t espnow_get_send_success(const mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_int_from_uint(self->send_success);
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_get_send_success_obj, espnow_get_send_success);
MP_PROPERTY_GETTER(espnow_send_success_obj,
(mp_obj_t)&espnow_get_send_success_obj);
//| send_failure: int
//| """The number of failed tx packets ``ESP_NOW_SEND_FAIL``. (read-only)"""
//|
STATIC mp_obj_t espnow_send_get_failure(const mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_int_from_uint(self->send_failure);
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_send_get_failure_obj, espnow_send_get_failure);
MP_PROPERTY_GETTER(espnow_send_failure_obj,
(mp_obj_t)&espnow_send_get_failure_obj);
//| read_success: int
//| """The number of rx packets captured in the buffer. (read-only)"""
//|
STATIC mp_obj_t espnow_get_read_success(const mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_int_from_uint(self->read_success);
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_get_read_success_obj, espnow_get_read_success);
MP_PROPERTY_GETTER(espnow_read_success_obj,
(mp_obj_t)&espnow_get_read_success_obj);
//| read_failure: int
//| """The number of dropped rx packets due to buffer overflow. (read-only)"""
//|
STATIC mp_obj_t espnow_read_get_failure(const mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_int_from_uint(self->read_failure);
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_read_get_failure_obj, espnow_read_get_failure);
MP_PROPERTY_GETTER(espnow_read_failure_obj,
(mp_obj_t)&espnow_read_get_failure_obj);
//| def set_pmk(self, pmk: ReadableBuffer) -> None:
//| """Set the ESP-NOW Primary Master Key (pmk) for encrypted communications.
//|
//| :param ReadableBuffer pmk: The ESP-NOW Primary Master Key (length = 16 bytes)."""
//| ...
STATIC mp_obj_t espnow_set_pmk(mp_obj_t self_in, mp_obj_t key) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
espnow_check_for_deinit(self);
common_hal_espnow_set_pmk(self, common_hal_espnow_get_bytes_len(key, ESP_NOW_KEY_LEN));
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(espnow_set_pmk_obj, espnow_set_pmk);
//| buffer_size: int
//| """The size of the internal ring buffer. (read-only)"""
//|
STATIC mp_obj_t espnow_get_buffer_size(const mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_int_from_uint(self->recv_buffer_size);
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_get_buffer_size_obj, espnow_get_buffer_size);
MP_PROPERTY_GETTER(espnow_buffer_size_obj,
(mp_obj_t)&espnow_get_buffer_size_obj);
//| phy_rate: int
//| """The ESP-NOW physical layer rate."""
//|
STATIC mp_obj_t espnow_get_phy_rate(const mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
return MP_OBJ_NEW_SMALL_INT(self->phy_rate);
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_get_phy_rate_obj, espnow_get_phy_rate);
STATIC mp_obj_t espnow_set_phy_rate(const mp_obj_t self_in, const mp_obj_t value) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
espnow_check_for_deinit(self);
common_hal_espnow_set_phy_rate(self, mp_obj_get_int(value));
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(espnow_set_phy_rate_obj, espnow_set_phy_rate);
MP_PROPERTY_GETSET(espnow_phy_rate_obj,
(mp_obj_t)&espnow_get_phy_rate_obj,
(mp_obj_t)&espnow_set_phy_rate_obj);
// --- Peer Related Properties ---
//| peers: Peers
//| """The peer info records for all registered `ESPNow` peers. (read-only)"""
//|
STATIC mp_obj_t espnow_get_peers(mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
return MP_OBJ_FROM_PTR(self->peers);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(espnow_get_peers_obj, espnow_get_peers);
MP_PROPERTY_GETTER(espnow_peers_obj,
(mp_obj_t)&espnow_get_peers_obj);
STATIC const mp_rom_map_elem_t espnow_locals_dict_table[] = {
// Context managers
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&mp_identity_obj) },
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&espnow___exit___obj) },
// Deinit the object
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&espnow_deinit_obj) },
// Send messages
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&espnow_send_obj) },
{ MP_ROM_QSTR(MP_QSTR_send_success),MP_ROM_PTR(&espnow_send_success_obj)},
{ MP_ROM_QSTR(MP_QSTR_send_failure),MP_ROM_PTR(&espnow_send_failure_obj)},
// Read messages
{ MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&espnow_read_obj) },
{ MP_ROM_QSTR(MP_QSTR_read_success),MP_ROM_PTR(&espnow_read_success_obj)},
{ MP_ROM_QSTR(MP_QSTR_read_failure),MP_ROM_PTR(&espnow_read_failure_obj)},
// Config parameters
{ MP_ROM_QSTR(MP_QSTR_set_pmk), MP_ROM_PTR(&espnow_set_pmk_obj) },
{ MP_ROM_QSTR(MP_QSTR_buffer_size), MP_ROM_PTR(&espnow_buffer_size_obj) },
{ MP_ROM_QSTR(MP_QSTR_phy_rate), MP_ROM_PTR(&espnow_phy_rate_obj) },
// Peer related properties
{ MP_ROM_QSTR(MP_QSTR_peers), MP_ROM_PTR(&espnow_peers_obj) },
};
STATIC MP_DEFINE_CONST_DICT(espnow_locals_dict, espnow_locals_dict_table);
// --- Dummy Buffer Protocol support ---
// ...so asyncio can poll.ipoll() on this device
// Support ioctl(MP_STREAM_POLL, ) for asyncio
STATIC mp_uint_t espnow_stream_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *errcode) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
espnow_check_for_deinit(self);
switch (request) {
case MP_STREAM_POLL: {
mp_uint_t flags = arg;
mp_uint_t ret = 0;
if ((flags & MP_STREAM_POLL_RD) && ringbuf_num_filled(self->recv_buffer) > 0) {
ret |= MP_STREAM_POLL_RD;
}
return ret;
}
default:
*errcode = MP_EINVAL;
return MP_STREAM_ERROR;
}
}
STATIC const mp_stream_p_t espnow_stream_p = {
MP_PROTO_IMPLEMENT(MP_QSTR_protocol_stream)
.ioctl = espnow_stream_ioctl,
};
//| def __bool__(self) -> bool:
//| """``True`` if `len()` is greater than zero.
//| This is an easy way to check if the buffer is empty.
//| """
//| ...
//| def __len__(self) -> int:
//| """Return the number of `bytes` available to read. Used to implement ``len()``."""
//| ...
//|
STATIC mp_obj_t espnow_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
espnow_check_for_deinit(self);
size_t len = ringbuf_num_filled(self->recv_buffer);
switch (op) {
case MP_UNARY_OP_BOOL:
return mp_obj_new_bool(len != 0);
case MP_UNARY_OP_LEN:
return mp_obj_new_int_from_uint(len);
default:
return MP_OBJ_NULL; // op not supported
}
}
const mp_obj_type_t espnow_type = {
{ &mp_type_type },
.name = MP_QSTR_ESPNow,
.make_new = espnow_make_new,
.locals_dict = (mp_obj_t)&espnow_locals_dict,
.flags = MP_TYPE_FLAG_EXTENDED,
MP_TYPE_EXTENDED_FIELDS(
.protocol = &espnow_stream_p,
.unary_op = &espnow_unary_op
),
};

View File

@ -0,0 +1,31 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2021 Glenn Moloney @glenn20
* Copyright (c) 2023 MicroDev
*
* 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.
*/
#pragma once
#include "py/obj.h"
extern const mp_obj_type_t espnow_type;

View File

@ -0,0 +1,70 @@
/*
* This file is part of the CircuitPython project, https://github.com/adafruit/circuitpython
*
* The MIT License (MIT)
*
* Copyright (c) 2023 MicroDev
*
* 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 "bindings/espnow/ESPNowPacket.h"
//| class ESPNowPacket:
//| """A packet retrieved from ESP-NOW communication protocol. A namedtuple."""
//|
//| mac: ReadableBuffer
//| """The sender's mac address (length = 6 bytes)."""
//|
//| msg: ReadableBuffer
//| """The message sent by the peer (length <= 250 bytes)."""
//|
//| rssi: int
//| """The received signal strength indication (in dBm from -127 to 0)."""
//|
//| time: int
//| """The time in milliseconds since the device last booted when the packet was received."""
//|
const mp_obj_namedtuple_type_t espnow_packet_type_obj = {
.base = {
.base = {
.type = &mp_type_type
},
.flags = MP_TYPE_FLAG_EXTENDED,
.name = MP_QSTR_ESPNowPacket,
.print = namedtuple_print,
.parent = &mp_type_tuple,
.make_new = namedtuple_make_new,
.attr = namedtuple_attr,
MP_TYPE_EXTENDED_FIELDS(
.unary_op = mp_obj_tuple_unary_op,
.binary_op = mp_obj_tuple_binary_op,
.subscr = mp_obj_tuple_subscr,
.getiter = mp_obj_tuple_getiter,
),
},
.n_fields = 4,
.fields = {
MP_QSTR_mac,
MP_QSTR_msg,
MP_QSTR_rssi,
MP_QSTR_time,
},
};

View File

@ -0,0 +1,30 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2023 MicroDev
*
* 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.
*/
#pragma once
#include "py/objnamedtuple.h"
extern const mp_obj_namedtuple_type_t espnow_packet_type_obj;

View File

@ -0,0 +1,240 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2023 MicroDev
*
* 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 "py/obj.h"
#include "py/objproperty.h"
#include "py/runtime.h"
#include "bindings/espnow/Peer.h"
#include "common-hal/espnow/__init__.h"
// TODO: check peer already exist
// TODO: check peer dosen't exist
//| class Peer:
//| """A data class to store parameters specific to a peer."""
//|
//| def __init__(
//| self,
//| mac: bytes,
//| lmk: Optional[bytes],
//| channel: int = 0,
//| interface: int = 0,
//| encrypt: bool = False,
//| ) -> None:
//| """Construct a new peer object.
//|
//| :param bytes mac: The mac address of the peer.
//| :param bytes lmk: The Local Master Key (lmk) of the peer.
//| :param int channel: The peer's channel. Default: 0 ie. use the current channel.
//| :param int interface: The WiFi interface to use. Default: 0 ie. STA.
//| :param bool encrypt: Whether or not to use encryption.
//| """
//| ...
STATIC mp_obj_t espnow_peer_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
enum { ARG_mac, ARG_lmk, ARG_channel, ARG_interface, ARG_encrypt };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_mac, MP_ARG_OBJ | MP_ARG_REQUIRED },
{ MP_QSTR_lmk, MP_ARG_OBJ, { .u_obj = mp_const_none } },
{ MP_QSTR_channel, MP_ARG_INT, { .u_obj = mp_const_none } },
{ MP_QSTR_interface,MP_ARG_INT, { .u_obj = mp_const_none } },
{ MP_QSTR_encrypt, MP_ARG_BOOL,{ .u_obj = mp_const_none } },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
espnow_peer_obj_t *self = m_new_obj(espnow_peer_obj_t);
self->base.type = &espnow_peer_type;
self->peer_info = (esp_now_peer_info_t) {
.channel = 0,
.ifidx = WIFI_IF_STA,
.encrypt = false
};
memcpy(self->peer_info.peer_addr, common_hal_espnow_get_bytes_len(args[ARG_mac].u_obj, ESP_NOW_ETH_ALEN), ESP_NOW_ETH_ALEN);
const mp_obj_t channel = args[ARG_channel].u_obj;
if (channel != mp_const_none) {
self->peer_info.channel = mp_arg_validate_int_range(mp_obj_get_int(channel), 0, 14, MP_QSTR_channel);
}
const mp_obj_t interface = args[ARG_interface].u_obj;
if (interface != mp_const_none) {
self->peer_info.ifidx = (wifi_interface_t)mp_arg_validate_int_range(mp_obj_get_int(interface), 0, 1, MP_QSTR_interface);
}
const mp_obj_t encrypt = args[ARG_encrypt].u_obj;
if (encrypt != mp_const_none) {
self->peer_info.encrypt = mp_obj_is_true(encrypt);
}
const mp_obj_t lmk = args[ARG_lmk].u_obj;
if (lmk != mp_const_none) {
memcpy(self->peer_info.lmk, common_hal_espnow_get_bytes_len(lmk, ESP_NOW_KEY_LEN), ESP_NOW_KEY_LEN);
} else if (self->peer_info.encrypt && !self->peer_info.lmk) {
mp_raise_ValueError_varg(translate("%q is %q"), MP_QSTR_lmk, MP_QSTR_None);
}
return self;
}
//| mac: ReadableBuffer
//| """The WiFi mac to use."""
//|
STATIC mp_obj_t espnow_peer_get_mac(const mp_obj_t self_in) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_bytes(self->peer_info.peer_addr, MP_ARRAY_SIZE(self->peer_info.peer_addr));
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_peer_get_mac_obj, espnow_peer_get_mac);
STATIC mp_obj_t espnow_peer_set_mac(const mp_obj_t self_in, const mp_obj_t value) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
memcpy(self->peer_info.peer_addr, common_hal_espnow_get_bytes_len(value, ESP_NOW_ETH_ALEN), ESP_NOW_ETH_ALEN);
esp_now_mod_peer(&self->peer_info);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(espnow_peer_set_mac_obj, espnow_peer_set_mac);
MP_PROPERTY_GETSET(espnow_peer_mac_obj,
(mp_obj_t)&espnow_peer_get_mac_obj,
(mp_obj_t)&espnow_peer_set_mac_obj);
//| lmk: ReadableBuffer
//| """The WiFi lmk to use."""
//|
STATIC mp_obj_t espnow_peer_get_lmk(const mp_obj_t self_in) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_bytes(self->peer_info.lmk, MP_ARRAY_SIZE(self->peer_info.lmk));
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_peer_get_lmk_obj, espnow_peer_get_lmk);
STATIC mp_obj_t espnow_peer_set_lmk(const mp_obj_t self_in, const mp_obj_t value) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
memcpy(self->peer_info.lmk, common_hal_espnow_get_bytes_len(value, ESP_NOW_KEY_LEN), ESP_NOW_KEY_LEN);
esp_now_mod_peer(&self->peer_info);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(espnow_peer_set_lmk_obj, espnow_peer_set_lmk);
MP_PROPERTY_GETSET(espnow_peer_lmk_obj,
(mp_obj_t)&espnow_peer_get_lmk_obj,
(mp_obj_t)&espnow_peer_set_lmk_obj);
//| channel: int
//| """The WiFi channel to use."""
//|
STATIC mp_obj_t espnow_peer_get_channel(const mp_obj_t self_in) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
return MP_OBJ_NEW_SMALL_INT(self->peer_info.channel);
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_peer_get_channel_obj, espnow_peer_get_channel);
STATIC mp_obj_t espnow_peer_set_channel(const mp_obj_t self_in, const mp_obj_t value) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
self->peer_info.channel = mp_arg_validate_int_range(mp_obj_get_int(value), 0, 14, MP_QSTR_channel);
esp_now_mod_peer(&self->peer_info);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(espnow_peer_set_channel_obj, espnow_peer_set_channel);
MP_PROPERTY_GETSET(espnow_peer_channel_obj,
(mp_obj_t)&espnow_peer_get_channel_obj,
(mp_obj_t)&espnow_peer_set_channel_obj);
//| interface: int
//| """The WiFi interface to use."""
//|
STATIC mp_obj_t espnow_peer_get_interface(const mp_obj_t self_in) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
return MP_OBJ_NEW_SMALL_INT(self->peer_info.ifidx);
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_peer_get_interface_obj, espnow_peer_get_interface);
STATIC mp_obj_t espnow_peer_set_interface(const mp_obj_t self_in, const mp_obj_t value) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
self->peer_info.ifidx = (wifi_interface_t)mp_arg_validate_int_range(mp_obj_get_int(value), 0, 1, MP_QSTR_interface);
esp_now_mod_peer(&self->peer_info);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(espnow_peer_set_interface_obj, espnow_peer_set_interface);
MP_PROPERTY_GETSET(espnow_peer_interface_obj,
(mp_obj_t)&espnow_peer_get_interface_obj,
(mp_obj_t)&espnow_peer_set_interface_obj);
//| encrypted: bool
//| """Whether or not to use encryption."""
//|
STATIC mp_obj_t espnow_peer_get_encrypted(const mp_obj_t self_in) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_bool(self->peer_info.encrypt);
}
MP_DEFINE_CONST_FUN_OBJ_1(espnow_peer_get_encrypted_obj, espnow_peer_get_encrypted);
STATIC mp_obj_t espnow_peer_set_encrypted(const mp_obj_t self_in, const mp_obj_t value) {
espnow_peer_obj_t *self = MP_OBJ_TO_PTR(self_in);
self->peer_info.encrypt = mp_obj_is_true(value);
if (!self->peer_info.lmk) {
mp_raise_ValueError_varg(translate("%q is %q"), MP_QSTR_lmk, MP_QSTR_None);
}
esp_now_mod_peer(&self->peer_info);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(espnow_peer_set_encrypted_obj, espnow_peer_set_encrypted);
MP_PROPERTY_GETSET(espnow_peer_encrypted_obj,
(mp_obj_t)&espnow_peer_get_encrypted_obj,
(mp_obj_t)&espnow_peer_set_encrypted_obj);
STATIC const mp_rom_map_elem_t espnow_peer_locals_dict_table[] = {
// Peer parameters
{ MP_ROM_QSTR(MP_QSTR_mac), MP_ROM_PTR(&espnow_peer_mac_obj) },
{ MP_ROM_QSTR(MP_QSTR_lmk), MP_ROM_PTR(&espnow_peer_lmk_obj) },
{ MP_ROM_QSTR(MP_QSTR_channel), MP_ROM_PTR(&espnow_peer_channel_obj) },
{ MP_ROM_QSTR(MP_QSTR_interface), MP_ROM_PTR(&espnow_peer_interface_obj) },
{ MP_ROM_QSTR(MP_QSTR_encrypted), MP_ROM_PTR(&espnow_peer_encrypted_obj) },
};
STATIC MP_DEFINE_CONST_DICT(espnow_peer_locals_dict, espnow_peer_locals_dict_table);
const mp_obj_type_t espnow_peer_type = {
{ &mp_type_type },
.name = MP_QSTR_Peer,
.make_new = espnow_peer_make_new,
.locals_dict = (mp_obj_t)&espnow_peer_locals_dict,
};

View File

@ -0,0 +1,37 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2023 MicroDev
*
* 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.
*/
#pragma once
#include "py/obj.h"
#include "esp_now.h"
typedef struct {
mp_obj_base_t base;
esp_now_peer_info_t peer_info;
} espnow_peer_obj_t;
const mp_obj_type_t espnow_peer_type;

View File

@ -0,0 +1,140 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2023 MicroDev
*
* 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 "py/obj.h"
#include "py/objlist.h"
#include "py/runtime.h"
#include "bindings/espidf/__init__.h"
#include "bindings/espnow/Peer.h"
#include "bindings/espnow/Peers.h"
#include "esp_now.h"
// TODO: Check for deinit
//| class Peers:
//| """Maintains a `list` of `Peer` internally and only exposes a subset of `list` methods."""
//|
//| def __init__(self) -> None:
//| """You cannot create an instance of `Peers`."""
//| ...
//| def append(self, peer: Peer) -> None:
//| """Append peer.
//|
//| :param Peer peer: The peer object to append.
//| """
//| ...
STATIC mp_obj_t espnow_peers_append(mp_obj_t self_in, mp_obj_t arg) {
espnow_peer_obj_t *peer = MP_OBJ_TO_PTR(mp_arg_validate_type(arg, &espnow_peer_type, MP_QSTR_Peer));
CHECK_ESP_RESULT(esp_now_add_peer(&peer->peer_info));
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_list_append(self->list, arg);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(espnow_peers_append_obj, espnow_peers_append);
//| def remove(self, peer: Peer) -> None:
//| """Remove peer.
//|
//| :param Peer peer: The peer object to remove.
//| """
//| ...
//|
STATIC mp_obj_t espnow_peers_remove(mp_obj_t self_in, mp_obj_t arg) {
espnow_peer_obj_t *peer = MP_OBJ_TO_PTR(mp_arg_validate_type(arg, &espnow_peer_type, MP_QSTR_Peer));
CHECK_ESP_RESULT(esp_now_del_peer(peer->peer_info.peer_addr));
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_list_remove(self->list, arg);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(espnow_peers_remove_obj, espnow_peers_remove);
STATIC const mp_rom_map_elem_t espnow_peers_locals_dict_table[] = {
// Peer management functions
{ MP_ROM_QSTR(MP_QSTR_append), MP_ROM_PTR(&espnow_peers_append_obj) },
{ MP_ROM_QSTR(MP_QSTR_remove), MP_ROM_PTR(&espnow_peers_remove_obj) },
};
STATIC MP_DEFINE_CONST_DICT(espnow_peers_locals_dict, espnow_peers_locals_dict_table);
/******************************************************************************/
/* peers print */
STATIC void espnow_peers_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
mp_obj_list_t *list = MP_OBJ_TO_PTR(self->list);
return list->base.type->print(print, self->list, kind);
}
/******************************************************************************/
/* peers unary_op */
STATIC mp_obj_t espnow_peers_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
mp_obj_list_t *list = MP_OBJ_TO_PTR(self->list);
return list->base.type->ext->unary_op(op, self->list);
}
/******************************************************************************/
/* peers subscript */
STATIC mp_obj_t espnow_peers_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
if (value != MP_OBJ_SENTINEL) {
return MP_OBJ_NULL; // op not supported
}
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
mp_obj_list_t *list = MP_OBJ_TO_PTR(self->list);
return list->base.type->ext->subscr(self->list, index, value);
}
/******************************************************************************/
/* peers iterator */
STATIC mp_obj_t espnow_peers_getiter(mp_obj_t self_in, mp_obj_iter_buf_t *iter_buf) {
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
mp_obj_list_t *list = MP_OBJ_TO_PTR(self->list);
return list->base.type->ext->getiter(self->list, iter_buf);
}
espnow_peers_obj_t *espnow_peers_new(void) {
espnow_peers_obj_t *self = m_new_obj(espnow_peers_obj_t);
self->base.type = &espnow_peers_type;
self->list = mp_obj_new_list(0, NULL);
return self;
}
const mp_obj_type_t espnow_peers_type = {
{ &mp_type_type },
.name = MP_QSTR_Peers,
.print = espnow_peers_print,
.locals_dict = (mp_obj_t)&espnow_peers_locals_dict,
.flags = MP_TYPE_FLAG_EXTENDED,
MP_TYPE_EXTENDED_FIELDS(
.unary_op = espnow_peers_unary_op,
.subscr = espnow_peers_subscr,
.getiter = espnow_peers_getiter,
),
};

View File

@ -0,0 +1,37 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2023 MicroDev
*
* 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.
*/
#pragma once
#include "py/obj.h"
typedef struct {
mp_obj_base_t base;
mp_obj_t list;
} espnow_peers_obj_t;
extern const mp_obj_type_t espnow_peers_type;
extern espnow_peers_obj_t *espnow_peers_new(void);

View File

@ -0,0 +1,95 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2023 MicroDev
*
* 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 "bindings/espnow/__init__.h"
#include "bindings/espnow/ESPNow.h"
#include "bindings/espnow/ESPNowPacket.h"
#include "bindings/espnow/Peer.h"
#include "bindings/espnow/Peers.h"
//| """ESP-NOW Module
//|
//| The `espnow` module provides an interface to the
//| `ESP-NOW <https://www.espressif.com/en/products/software/esp-now/overview>`_
//| protocol provided by Espressif on its SoCs
//| (`API docs <https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/network/esp_now.html>`_).
//|
//| **Sender**
//|
//| .. code-block:: python
//|
//| import espnow
//|
//| e = espnow.ESPNow()
//| peer = espnow.Peer(mac=b'\xaa\xaa\xaa\xaa\xaa\xaa')
//| e.peers.append(peer)
//|
//| e.send("Starting...")
//| for i in range(10):
//| e.send(str(i)*20)
//| e.send(b'end')
//|
//| **Receiver**
//|
//| .. code-block:: python
//|
//| import espnow
//|
//| e = espnow.ESPNow()
//| packets = []
//|
//| while True:
//| if e:
//| packet = e.read()
//| packets.append(packet)
//| if packet.msg == b'end':
//| break
//|
//| print("packets:", f"length={len(packets)}")
//| for packet in packets:
//| print(packet)
//| """
//| ...
//|
STATIC const mp_rom_map_elem_t espnow_module_globals_table[] = {
// module name
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_espnow) },
// module classes
{ MP_ROM_QSTR(MP_QSTR_ESPNow), MP_ROM_PTR(&espnow_type) },
{ MP_ROM_QSTR(MP_QSTR_ESPNowPacket),MP_ROM_PTR(&espnow_packet_type_obj) },
{ MP_ROM_QSTR(MP_QSTR_Peer), MP_ROM_PTR(&espnow_peer_type) },
{ MP_ROM_QSTR(MP_QSTR_Peers), MP_ROM_PTR(&espnow_peers_type) },
};
STATIC MP_DEFINE_CONST_DICT(espnow_module_globals, espnow_module_globals_table);
const mp_obj_module_t espnow_module = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t *)&espnow_module_globals,
};
MP_REGISTER_MODULE(MP_QSTR_espnow, espnow_module, CIRCUITPY_ESPNOW);

View File

@ -0,0 +1,29 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2023 MicroDev
*
* 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.
*/
#pragma once
void espnow_reset(void);

View File

@ -9,5 +9,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 40m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
OPTIMIZATION_FLAGS = -Os
CIRCUITPY_ESPCAMERA = 0

View File

@ -9,3 +9,5 @@ IDF_TARGET = esp32s3
CIRCUITPY_ESP_FLASH_MODE = dio
CIRCUITPY_ESP_FLASH_FREQ = 40m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESPCAMERA = 0

View File

@ -10,5 +10,4 @@ CIRCUITPY_ESP_FLASH_MODE = dio
CIRCUITPY_ESP_FLASH_FREQ = 40m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
OPTIMIZATION_FLAGS = -Os
CIRCUITPY_ESPCAMERA = 0

View File

@ -6,4 +6,5 @@ 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,29 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
*
* 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"
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View File

@ -0,0 +1,42 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Dan Halbert for Adafruit Industries
*
* 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 "Adafruit HUZZAH32 Breakout"
#define MICROPY_HW_MCU_NAME "ESP32"
#define MICROPY_HW_LED_STATUS (&pin_GPIO13)
// For entering safe mode, use GPIO0 button
#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO0)
// Explanation of how a user got into safe mode
#define BOARD_USER_SAFE_MODE_ACTION translate("You pressed the GPIO0 button at start up.")
// UART pins
#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO1)
#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO3)

View File

@ -0,0 +1,10 @@
CIRCUITPY_CREATOR_ID = 0x0000239A
CIRCUITPY_CREATION_ID = 0x00320004
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,49 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_IO22), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_IO23), MP_ROM_PTR(&pin_GPIO23) },
{ MP_ROM_QSTR(MP_QSTR_IO25), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_IO26), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_IO27), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_IO32), MP_ROM_PTR(&pin_GPIO32) },
{ MP_ROM_QSTR(MP_QSTR_IO33), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_IO34), MP_ROM_PTR(&pin_GPIO34) },
{ MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -0,0 +1,20 @@
CONFIG_ESP32_ECO3_CACHE_LOCK_FIX=y
CONFIG_ESP32_SPIRAM_SUPPORT=n
# 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=17
### CONFIG_ESP_CONSOLE_UART_RX_GPIO=16
### CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200
### # CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5 is not set
### # end of ESP System Settings

View File

@ -109,6 +109,10 @@ const uint8_t display_stop_sequence[] = {
0x02, 0x00 // Power off
};
const uint8_t refresh_sequence[] = {
0x12, 0x00
};
void board_init(void) {
// Debug UART
#ifdef DEBUG
@ -137,6 +141,7 @@ void board_init(void) {
display,
bus,
display_start_sequence, sizeof(display_start_sequence),
0, // start up time
display_stop_sequence, sizeof(display_stop_sequence),
296, // width
128, // height
@ -154,13 +159,14 @@ void board_init(void) {
0x13, // write_color_ram_command
false, // color_bits_inverted
0x000000, // highlight_color
0x12, // refresh_display_command
refresh_sequence, sizeof(refresh_sequence),
1.0, // refresh_time
&pin_GPIO5, // busy_pin
false, // busy_state
5.0, // seconds_per_frame
false, // always_toggle_chip_select
true, // grayscale
false, // acep
false); // two_byte_sequence_length
}

View File

@ -31,3 +31,10 @@
#define DEFAULT_UART_BUS_RX (&pin_GPIO44)
#define DEFAULT_UART_BUS_TX (&pin_GPIO43)
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO9)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO8)
#define DEFAULT_SPI_BUS_SCK (&pin_GPIO14)
#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO15)
#define DEFAULT_SPI_BUS_MISO (&pin_GPIO13)

View File

@ -25,13 +25,13 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_SD_CLK), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO16) },
@ -64,5 +64,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_IO47), MP_ROM_PTR(&pin_GPIO47) },
{ MP_ROM_QSTR(MP_QSTR_IO48), MP_ROM_PTR(&pin_GPIO48) },
{ 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,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

@ -0,0 +1,99 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
*
* 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 "shared-bindings/busio/SPI.h"
#include "shared-bindings/displayio/FourWire.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
uint8_t display_init_sequence[] = {
0x01, 0x80, 0x96, // _SWRESET and Delay 150ms
0x11, 0x80, 0xFF, // _SLPOUT and Delay 500ms
0x3A, 0x81, 0x55, 0x0A, // _COLMOD and Delay 10ms
0x13, 0x80, 0x0A, // _NORON and Delay 10ms
0x36, 0x01, 0xC8, // _MADCTL
0x29, 0x80, 0xFF, // _DISPON and Delay 500ms
};
void board_init(void) {
busio_spi_obj_t *spi = &displays[0].fourwire_bus.inline_bus;
common_hal_busio_spi_construct(spi, &pin_GPIO12, &pin_GPIO11, NULL, false);
common_hal_busio_spi_never_reset(spi);
displayio_fourwire_obj_t *bus = &displays[0].fourwire_bus;
bus->base.type = &displayio_fourwire_type;
common_hal_displayio_fourwire_construct(bus,
spi,
&pin_GPIO13, // TFT_DC Command or data
&pin_GPIO10, // TFT_CS Chip select
&pin_GPIO9, // TFT_RST Reset
60000000, // Baudrate
0, // Polarity
0); // Phase
displayio_display_obj_t *display = &displays[0].display;
display->base.type = &displayio_display_type;
common_hal_displayio_display_construct(display,
bus,
320, // Width
170, // Height
35, // column start
0, // row start
90, // rotation
16, // Color depth
false, // Grayscale
false, // pixels in a byte share a row. Only valid for depths < 8
1, // bytes per cell. Only valid for depths < 8
false, // reverse_pixels_in_byte. Only valid for depths < 8
true, // reverse_pixels_in_word
MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command
display_init_sequence,
sizeof(display_init_sequence),
&pin_GPIO15, // backlight pin
NO_BRIGHTNESS_COMMAND,
1.0f, // brightness
false, // single_byte_bounds
false, // data_as_commands
true, // auto_refresh
60, // native_frames_per_second
true, // backlight_on_high
false, // SH1107_addressing
50000); // backlight pwm frequency
// Debug UART
#ifdef DEBUG
common_hal_never_reset_pin(&pin_GPIO43);
common_hal_never_reset_pin(&pin_GPIO44);
#endif
}
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

Some files were not shown because too many files have changed in this diff Show More