Merge branch 'adafruit:main' into main
This commit is contained in:
commit
3feaf6adb8
31
.devcontainer/Readme.md
Normal file
31
.devcontainer/Readme.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
Build CircuitPython in a Github-Devcontainer
|
||||||
|
============================================
|
||||||
|
|
||||||
|
To build CircuitPython within a Github-Devcontainer, you need to perform
|
||||||
|
the following steps.
|
||||||
|
|
||||||
|
1. checkout the code to a devcontainer
|
||||||
|
|
||||||
|
- click on the green "<> Code"-button
|
||||||
|
- select the Codespaces-tab
|
||||||
|
- choose "+ new with options..." from the "..."-menu
|
||||||
|
- in the following screen select the branch and then
|
||||||
|
- select ".devcontainer/cortex-m/devcontainer.json" instead
|
||||||
|
of "Default Codespaces configuration"
|
||||||
|
- update region as necessary
|
||||||
|
- finally, click on the green "Create codespace" button
|
||||||
|
|
||||||
|
2. Your codespace is created. Cloning the images is quite fast, but
|
||||||
|
preparing it for CircuitPython-development takes about 10 minutes.
|
||||||
|
Note that this is a one-time task.
|
||||||
|
|
||||||
|
3. During creation, you can run the command
|
||||||
|
`tail -f /workspaces/.codespaces/.persistedshare/creation.log`
|
||||||
|
to see what is going on.
|
||||||
|
|
||||||
|
4. To actually build CircuitPython, run
|
||||||
|
|
||||||
|
cd ports/raspberrypi
|
||||||
|
make -j $(nproc) BOARD=whatever TRANSLATION=xx_XX
|
||||||
|
|
||||||
|
This takes about 2m40s.
|
23
.devcontainer/cortex-m/devcontainer.json
Normal file
23
.devcontainer/cortex-m/devcontainer.json
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||||
|
// README at: https://github.com/devcontainers/templates/tree/main/src/universal
|
||||||
|
{
|
||||||
|
"name": "CircuitPython Cortex-M Build-Environment (base: Default Linux Universal)",
|
||||||
|
"image": "mcr.microsoft.com/devcontainers/universal:2-linux",
|
||||||
|
"postCreateCommand": ".devcontainer/cortex-m/on-create.sh",
|
||||||
|
"remoteEnv": { "PATH": "/workspaces/gcc-arm-none-eabi/bin:${containerEnv:PATH}" }
|
||||||
|
|
||||||
|
// Features to add to the dev container. More info: https://containers.dev/features.
|
||||||
|
// "features": {},
|
||||||
|
|
||||||
|
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||||
|
// "forwardPorts": [],
|
||||||
|
|
||||||
|
// Use 'postCreateCommand' to run commands after the container is created.
|
||||||
|
// "postCreateCommand": "uname -a",
|
||||||
|
|
||||||
|
// Configure tool-specific properties.
|
||||||
|
// "customizations": {},
|
||||||
|
|
||||||
|
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||||
|
// "remoteUser": "root"
|
||||||
|
}
|
59
.devcontainer/cortex-m/on-create.sh
Executable file
59
.devcontainer/cortex-m/on-create.sh
Executable file
@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# on-create.sh: postCreateCommand-hook for devcontainer.json (Cortex-M build)
|
||||||
|
#
|
||||||
|
# Author: Bernhard Bablok
|
||||||
|
#
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
echo -e "[on-create.sh] downloading and installing gcc-arm-non-eabi toolchain"
|
||||||
|
cd /workspaces
|
||||||
|
wget -qO gcc-arm-none-eabi.tar.bz2 https://adafru.it/Pid
|
||||||
|
tar -xjf gcc-arm-none-eabi.tar.bz2
|
||||||
|
ln -s gcc-arm-none-eabi-10-2020-q4-major gcc-arm-none-eabi
|
||||||
|
rm -f /workspaces/gcc-arm-none-eabi.tar.bz2
|
||||||
|
export PATH=/workspaces/gcc-arm-none-eabi/bin:$PATH
|
||||||
|
|
||||||
|
# add repository and install tools
|
||||||
|
echo -e "[on-create.sh] adding pybricks/ppa"
|
||||||
|
sudo add-apt-repository -y ppa:pybricks/ppa
|
||||||
|
echo -e "[on-create.sh] installing uncrustify and mtools"
|
||||||
|
sudo apt-get -y install uncrustify mtools
|
||||||
|
|
||||||
|
# dosfstools >= 4.2 needed, standard repo only has 4.1
|
||||||
|
echo -e "[on-create.sh] downloading and installing dosfstools"
|
||||||
|
wget https://github.com/dosfstools/dosfstools/releases/download/v4.2/dosfstools-4.2.tar.gz
|
||||||
|
tar -xzf dosfstools-4.2.tar.gz
|
||||||
|
cd dosfstools-4.2/
|
||||||
|
./configure
|
||||||
|
make -j $(nproc)
|
||||||
|
sudo make install
|
||||||
|
cd /workspaces
|
||||||
|
rm -fr /workspaces/dosfstools-4.2 /workspaces/dosfstools-4.2.tar.gz
|
||||||
|
|
||||||
|
# prepare source-code tree
|
||||||
|
cd /workspaces/circuitpython/
|
||||||
|
echo -e "[on-create.sh] fetching submodules"
|
||||||
|
make fetch-submodules
|
||||||
|
echo -e "[on-create.sh] fetching tags"
|
||||||
|
git fetch --tags --recurse-submodules=no --shallow-since="2021-07-01" https://github.com/adafruit/circuitpython HEAD
|
||||||
|
|
||||||
|
# additional python requirements
|
||||||
|
echo -e "[on-create.sh] pip-installing requirements"
|
||||||
|
pip install --upgrade -r requirements-dev.txt
|
||||||
|
pip install --upgrade -r requirements-doc.txt
|
||||||
|
|
||||||
|
# add pre-commit
|
||||||
|
echo -e "[on-create.sh] installing pre-commit"
|
||||||
|
pre-commit install
|
||||||
|
|
||||||
|
# create cross-compiler
|
||||||
|
echo -e "[on-create.sh] building mpy-cross"
|
||||||
|
make -j $(nproc) -C mpy-cross # time: about 36 sec
|
||||||
|
|
||||||
|
# that's it!
|
||||||
|
echo -e "[on-create.sh] setup complete"
|
||||||
|
|
||||||
|
#commands to actually build CP:
|
||||||
|
#cd ports/raspberrypi
|
||||||
|
#time make -j $(nproc) BOARD=pimoroni_tufty2040 TRANSLATION=de_DE
|
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -6,7 +6,7 @@ body:
|
|||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: >-
|
value: >-
|
||||||
Thanks! for testing out CircuitPython. Now that you have encountered a
|
Thanks for testing out CircuitPython! Now that you have encountered a
|
||||||
bug... you can file a report for it.
|
bug... you can file a report for it.
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: firmware
|
id: firmware
|
||||||
|
92
.github/actions/deps/external/action.yml
vendored
Normal file
92
.github/actions/deps/external/action.yml
vendored
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
name: Fetch external deps
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
action:
|
||||||
|
required: false
|
||||||
|
default: restore
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- cache
|
||||||
|
- restore
|
||||||
|
|
||||||
|
platform:
|
||||||
|
required: false
|
||||||
|
default: none
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- arm
|
||||||
|
- aarch
|
||||||
|
- esp
|
||||||
|
- riscv
|
||||||
|
- none
|
||||||
|
|
||||||
|
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'
|
||||||
|
uses: carlosperate/arm-none-eabi-gcc-action@v1
|
||||||
|
with:
|
||||||
|
release: '10-2020-q4'
|
||||||
|
|
||||||
|
# esp
|
||||||
|
- name: Get esp toolchain
|
||||||
|
if: inputs.platform == 'esp'
|
||||||
|
run: sudo apt-get install -y ninja-build
|
||||||
|
shell: bash
|
||||||
|
- name: Install IDF tools
|
||||||
|
if: inputs.platform == 'esp'
|
||||||
|
run: |
|
||||||
|
echo "Installing ESP-IDF tools"
|
||||||
|
$IDF_PATH/tools/idf_tools.py --non-interactive install required
|
||||||
|
$IDF_PATH/tools/idf_tools.py --non-interactive install cmake
|
||||||
|
echo "Installing Python environment and packages"
|
||||||
|
$IDF_PATH/tools/idf_tools.py --non-interactive install-python-env
|
||||||
|
rm -rf $IDF_TOOLS_PATH/dist
|
||||||
|
shell: bash
|
||||||
|
- name: Set environment
|
||||||
|
if: inputs.platform == 'esp'
|
||||||
|
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'
|
||||||
|
uses: ./.github/actions/deps/python
|
||||||
|
with:
|
||||||
|
action: ${{ inputs.action }}
|
||||||
|
- name: Install python dependencies
|
||||||
|
run: pip install -r requirements-dev.txt
|
||||||
|
shell: bash
|
36
.github/actions/deps/ports/espressif/action.yml
vendored
Normal file
36
.github/actions/deps/ports/espressif/action.yml
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
name: Fetch espressif port deps
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- name: Set IDF env
|
||||||
|
run: |
|
||||||
|
echo >> $GITHUB_ENV "IDF_PATH=$GITHUB_WORKSPACE/ports/espressif/esp-idf"
|
||||||
|
echo >> $GITHUB_ENV "IDF_TOOLS_PATH=$GITHUB_WORKSPACE/.idf_tools"
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Get IDF commit
|
||||||
|
id: idf-commit
|
||||||
|
run: |
|
||||||
|
COMMIT=$(git submodule status ports/espressif/esp-idf | grep -o -P '(?<=^-).*(?= )')
|
||||||
|
echo "$COMMIT"
|
||||||
|
echo "commit=$COMMIT" >> $GITHUB_OUTPUT
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Cache IDF submodules
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
.git/modules/ports/espressif/esp-idf
|
||||||
|
ports/espressif/esp-idf
|
||||||
|
key: submodules-idf-${{ steps.idf-commit.outputs.commit }}
|
||||||
|
|
||||||
|
- name: Cache IDF tools
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ${{ env.IDF_TOOLS_PATH }}
|
||||||
|
key: ${{ runner.os }}-${{ env.pythonLocation }}-tools-idf-${{ steps.idf-commit.outputs.commit }}
|
||||||
|
|
||||||
|
- name: Initialize IDF submodules
|
||||||
|
run: git submodule update --init --depth=1 --recursive $IDF_PATH
|
||||||
|
shell: bash
|
42
.github/actions/deps/python/action.yml
vendored
Normal file
42
.github/actions/deps/python/action.yml
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
name: Fetch python deps
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
action:
|
||||||
|
description: The cache action to use
|
||||||
|
required: false
|
||||||
|
default: restore
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- cache
|
||||||
|
- restore
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- name: Cache python dependencies
|
||||||
|
id: cache-python-deps
|
||||||
|
if: inputs.action == 'cache'
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: .cp_tools
|
||||||
|
key: ${{ runner.os }}-${{ env.pythonLocation }}-tools-cp-${{ hashFiles('requirements-dev.txt') }}
|
||||||
|
|
||||||
|
- name: Restore python dependencies
|
||||||
|
id: restore-python-deps
|
||||||
|
if: inputs.action == 'restore'
|
||||||
|
uses: actions/cache/restore@v3
|
||||||
|
with:
|
||||||
|
path: .cp_tools
|
||||||
|
key: ${{ runner.os }}-${{ env.pythonLocation }}-tools-cp-${{ hashFiles('requirements-dev.txt') }}
|
||||||
|
|
||||||
|
- name: Set up venv
|
||||||
|
if: inputs.action == 'cache' && !steps.cache-python-deps.outputs.cache-hit
|
||||||
|
run: python -m venv .cp_tools
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Activate venv
|
||||||
|
if: inputs.action == 'cache' || (inputs.action == 'restore' && steps.restore-python-deps.outputs.cache-hit)
|
||||||
|
run: |
|
||||||
|
source .cp_tools/bin/activate
|
||||||
|
echo >> $GITHUB_PATH "$PATH"
|
||||||
|
shell: bash
|
87
.github/actions/deps/submodules/action.yml
vendored
Normal file
87
.github/actions/deps/submodules/action.yml
vendored
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
name: 'Fetch Submodules'
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
target:
|
||||||
|
description: 'The target for ci_fetch_deps'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
|
||||||
|
submodules:
|
||||||
|
description: 'The submodules to cache'
|
||||||
|
required: false
|
||||||
|
default: '["extmod/ulab", "lib/", "tools/"]'
|
||||||
|
type: string
|
||||||
|
|
||||||
|
action:
|
||||||
|
description: 'The cache action to use'
|
||||||
|
required: false
|
||||||
|
default: 'restore'
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- cache
|
||||||
|
- restore
|
||||||
|
|
||||||
|
version:
|
||||||
|
description: 'Whether to generate CP version'
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
frozen:
|
||||||
|
description: 'Whether frozen submodules were fetched'
|
||||||
|
value: ${{ steps.cp-deps.outputs.frozen_tags }}
|
||||||
|
|
||||||
|
version:
|
||||||
|
description: 'The CP version'
|
||||||
|
value: ${{ steps.cp-version.outputs.cp-version }}
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Create submodule status
|
||||||
|
id: create-submodule-status
|
||||||
|
run: |
|
||||||
|
git submodule status ${{ join(fromJSON(inputs.submodules), ' ') }} >> submodule_status
|
||||||
|
echo $(cut -d ' ' -f 2 submodule_status) | echo "submodules=[\"$(sed "s/ /\", \"/g")\"]" >> $GITHUB_OUTPUT
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Cache submodules
|
||||||
|
if: ${{ inputs.action == 'cache' }}
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ".git/modules/\n${{ join(fromJSON(steps.create-submodule-status.outputs.submodules), '\n') }}"
|
||||||
|
key: submodules-common-${{ hashFiles('submodule_status') }}
|
||||||
|
enableCrossOsArchive: true
|
||||||
|
|
||||||
|
- name: Restore submodules
|
||||||
|
if: ${{ inputs.action == 'restore' }}
|
||||||
|
uses: actions/cache/restore@v3
|
||||||
|
with:
|
||||||
|
path: ".git/modules/\n${{ join(fromJSON(steps.create-submodule-status.outputs.submodules), '\n') }}"
|
||||||
|
key: submodules-common-${{ hashFiles('submodule_status') }}
|
||||||
|
enableCrossOsArchive: true
|
||||||
|
|
||||||
|
- name: Remove submodule status
|
||||||
|
run: rm submodule_status
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: CircuitPython dependencies
|
||||||
|
id: cp-deps
|
||||||
|
run: python tools/ci_fetch_deps.py ${{ inputs.target || matrix.board || github.job }}
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: CircuitPython version
|
||||||
|
id: cp-version
|
||||||
|
if: ${{ inputs.version == 'true' }}
|
||||||
|
run: |
|
||||||
|
echo "::group::Fetch history and tags"
|
||||||
|
git fetch --no-recurse-submodules --shallow-since="2021-07-01" --tags https://github.com/adafruit/circuitpython HEAD
|
||||||
|
git fetch --no-recurse-submodules --shallow-since="2021-07-01" origin $GITHUB_SHA
|
||||||
|
git repack -d
|
||||||
|
echo "::endgroup::"
|
||||||
|
CP_VERSION=$(tools/describe)
|
||||||
|
echo "$CP_VERSION"
|
||||||
|
echo "CP_VERSION=$CP_VERSION" >> $GITHUB_ENV
|
||||||
|
echo "cp-version=$CP_VERSION" >> $GITHUB_OUTPUT
|
||||||
|
shell: bash
|
37
.github/actions/mpy_cross/action.yml
vendored
Normal file
37
.github/actions/mpy_cross/action.yml
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
name: Set up mpy-cross
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
download:
|
||||||
|
required: false
|
||||||
|
default: true
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- name: Download mpy-cross
|
||||||
|
id: download-mpy-cross
|
||||||
|
if: inputs.download == 'true'
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: mpy-cross
|
||||||
|
path: mpy-cross
|
||||||
|
|
||||||
|
- name: Make mpy-cross executable
|
||||||
|
if: inputs.download == 'true' && steps.download-mpy-cross.outcome == 'success'
|
||||||
|
run: sudo chmod +x mpy-cross/mpy-cross
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Build mpy-cross
|
||||||
|
if: inputs.download == 'false' || steps.download-mpy-cross.outcome == 'failure'
|
||||||
|
run: make -C mpy-cross -j2
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Upload mpy-cross
|
||||||
|
if: inputs.download == 'false' || steps.download-mpy-cross.outcome == 'failure'
|
||||||
|
continue-on-error: true
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: mpy-cross
|
||||||
|
path: mpy-cross/mpy-cross
|
33
.github/actions/upload_aws/action.yml
vendored
Normal file
33
.github/actions/upload_aws/action.yml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
name: Upload to AWS S3
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
source:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
destination:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- name: Upload to S3
|
||||||
|
if: >-
|
||||||
|
(github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') ||
|
||||||
|
(github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
|
||||||
|
run: >-
|
||||||
|
[ -z "$AWS_ACCESS_KEY_ID" ] ||
|
||||||
|
aws s3 cp ${{ inputs.source }} s3://adafruit-circuit-python/bin/${{ inputs.destination }}
|
||||||
|
${{ endsWith(inputs.source, '/') && '--recursive' || '' }} --no-progress --region us-east-1
|
||||||
|
env:
|
||||||
|
AWS_PAGER: ''
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ inputs.AWS_ACCESS_KEY_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ inputs.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
shell: bash
|
104
.github/workflows/build-boards-custom.yml
vendored
Normal file
104
.github/workflows/build-boards-custom.yml
vendored
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
name: Custom board build
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
board:
|
||||||
|
description: 'Board: Found in ports/*/boards/[board_id]'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
version:
|
||||||
|
description: 'Version: Can be a tag or a commit (>=8.1.0)'
|
||||||
|
required: false
|
||||||
|
default: latest
|
||||||
|
type: string
|
||||||
|
language:
|
||||||
|
description: 'Language: Found in locale/[language].po'
|
||||||
|
required: false
|
||||||
|
default: en_US
|
||||||
|
type: string
|
||||||
|
flags:
|
||||||
|
description: 'Flags: Build flags (e.g. CIRCUITPY_WIFI=1)'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
debug:
|
||||||
|
description: 'Make a debug build'
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
run-name: ${{ inputs.board }}-${{ inputs.language }}-${{ inputs.version }}${{ inputs.flags != '' && '-custom' || '' }}${{ inputs.debug && '-debug' || '' }}
|
||||||
|
|
||||||
|
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: |
|
||||||
|
git clone --filter=tree:0 https://github.com/adafruit/circuitpython.git $GITHUB_WORKSPACE
|
||||||
|
git checkout ${{ inputs.version == 'latest' && 'HEAD' || inputs.version }}
|
||||||
|
- name: Set up identifier
|
||||||
|
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
|
||||||
|
- name: Set up submodules
|
||||||
|
id: set-up-submodules
|
||||||
|
uses: ./.github/actions/deps/submodules
|
||||||
|
with:
|
||||||
|
action: cache
|
||||||
|
target: ${{ inputs.board }}
|
||||||
|
- name: Set up external
|
||||||
|
uses: ./.github/actions/deps/external
|
||||||
|
with:
|
||||||
|
action: cache
|
||||||
|
platform: ${{ env.PLATFORM }}
|
||||||
|
- name: Set up mpy-cross
|
||||||
|
if: steps.set-up-submodules.outputs.frozen == 'True'
|
||||||
|
uses: ./.github/actions/mpy_cross
|
||||||
|
with:
|
||||||
|
download: false
|
||||||
|
- name: Versions
|
||||||
|
run: |
|
||||||
|
tools/describe
|
||||||
|
gcc --version
|
||||||
|
python3 --version
|
||||||
|
cmake --version || true
|
||||||
|
ninja --version || true
|
||||||
|
aarch64-none-elf-gcc --version || true
|
||||||
|
arm-none-eabi-gcc --version || true
|
||||||
|
xtensa-esp32-elf-gcc --version || true
|
||||||
|
riscv32-esp-elf-gcc --version || true
|
||||||
|
riscv64-unknown-elf-gcc --version || true
|
||||||
|
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 }}
|
||||||
|
- 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.*
|
85
.github/workflows/build-boards.yml
vendored
Normal file
85
.github/workflows/build-boards.yml
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
name: Build boards
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
platform:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
boards:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
cp-version:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
secrets:
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
required: false
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
env:
|
||||||
|
CP_VERSION: ${{ inputs.cp-version }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
board: ${{ fromJSON(inputs.boards) }}
|
||||||
|
steps:
|
||||||
|
- name: Set up repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: false
|
||||||
|
fetch-depth: 1
|
||||||
|
- name: Set up python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: 3.x
|
||||||
|
- name: Set up port
|
||||||
|
if: inputs.platform == 'esp'
|
||||||
|
uses: ./.github/actions/deps/ports/espressif
|
||||||
|
- 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 }}
|
||||||
|
- name: Set up mpy-cross
|
||||||
|
if: steps.set-up-submodules.outputs.frozen == 'True'
|
||||||
|
uses: ./.github/actions/mpy_cross
|
||||||
|
|
||||||
|
- name: Versions
|
||||||
|
run: |
|
||||||
|
gcc --version
|
||||||
|
python3 --version
|
||||||
|
cmake --version || true
|
||||||
|
ninja --version || true
|
||||||
|
aarch64-none-elf-gcc --version || true
|
||||||
|
arm-none-eabi-gcc --version || true
|
||||||
|
xtensa-esp32-elf-gcc --version || true
|
||||||
|
riscv32-esp-elf-gcc --version || true
|
||||||
|
riscv64-unknown-elf-gcc --version || true
|
||||||
|
mkfs.fat --version || true
|
||||||
|
|
||||||
|
- name: Set up build failure matcher
|
||||||
|
run: echo "::add-matcher::$GITHUB_WORKSPACE/.github/workflows/match-build-fail.json"
|
||||||
|
- name: Build board
|
||||||
|
run: python3 -u build_release_files.py
|
||||||
|
working-directory: tools
|
||||||
|
env:
|
||||||
|
BOARDS: ${{ matrix.board }}
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ matrix.board }}
|
||||||
|
path: bin/${{ matrix.board }}
|
||||||
|
- name: Upload to S3
|
||||||
|
uses: ./.github/actions/upload_aws
|
||||||
|
with:
|
||||||
|
source: bin/
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
70
.github/workflows/build-mpy-cross.yml
vendored
Normal file
70
.github/workflows/build-mpy-cross.yml
vendored
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
name: Build mpy-cross
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
cp-version:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
secrets:
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
required: false
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
mpy-cross: ["static", "static-aarch64", "static-mingw", "static-raspbian"]
|
||||||
|
env:
|
||||||
|
CP_VERSION: ${{ inputs.cp-version }}
|
||||||
|
EX_static-mingw: static.exe
|
||||||
|
OS_static: linux-amd64
|
||||||
|
OS_static-aarch64: linux-aarch64
|
||||||
|
OS_static-mingw: windows
|
||||||
|
OS_static-raspbian: linux-raspbian
|
||||||
|
steps:
|
||||||
|
- name: Set up repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: false
|
||||||
|
fetch-depth: 1
|
||||||
|
- name: Set up python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: 3.x
|
||||||
|
- name: Set up submodules
|
||||||
|
uses: ./.github/actions/deps/submodules
|
||||||
|
with:
|
||||||
|
target: mpy-cross
|
||||||
|
|
||||||
|
- name: Install toolchain (aarch64)
|
||||||
|
if: matrix.mpy-cross == 'static-aarch64'
|
||||||
|
run: sudo apt-get install -y gcc-aarch64-linux-gnu
|
||||||
|
- name: Install toolchain (mingw)
|
||||||
|
if: matrix.mpy-cross == 'static-mingw'
|
||||||
|
run: sudo apt-get install -y mingw-w64
|
||||||
|
|
||||||
|
- name: Build mpy-cross.${{ matrix.mpy-cross }}
|
||||||
|
run: make -C mpy-cross -j2 -f Makefile.${{ matrix.mpy-cross }}
|
||||||
|
|
||||||
|
- name: Set output
|
||||||
|
run: |
|
||||||
|
echo >> $GITHUB_ENV "EX=${{ env[format('EX_{0}', matrix.mpy-cross)] || matrix.mpy-cross }}"
|
||||||
|
echo >> $GITHUB_ENV "OS=${{ env[format('OS_{0}', matrix.mpy-cross)] }}"
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: mpy-cross.${{ env.EX }}
|
||||||
|
path: mpy-cross/mpy-cross.${{ env.EX }}
|
||||||
|
- name: Upload to S3
|
||||||
|
uses: ./.github/actions/upload_aws
|
||||||
|
with:
|
||||||
|
source: mpy-cross/mpy-cross.${{ env.EX }}
|
||||||
|
destination: mpy-cross/${{ env.OS }}/mpy-cross-${{ env.OS }}-${{ env.CP_VERSION }}.${{ env.EX }}
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
547
.github/workflows/build.yml
vendored
547
.github/workflows/build.yml
vendored
@ -17,166 +17,113 @@ concurrency:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
scheduler:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
outputs:
|
outputs:
|
||||||
build-doc: ${{ steps.set-matrix.outputs.build-doc }}
|
build-doc: ${{ steps.set-matrix.outputs.build-doc }}
|
||||||
boards-arm: ${{ steps.set-matrix.outputs.boards-arm }}
|
build-boards: ${{ steps.set-matrix.outputs.build-boards }}
|
||||||
boards-riscv: ${{ steps.set-matrix.outputs.boards-riscv }}
|
|
||||||
boards-espressif: ${{ steps.set-matrix.outputs.boards-espressif }}
|
|
||||||
boards-aarch: ${{ steps.set-matrix.outputs.boards-aarch }}
|
boards-aarch: ${{ steps.set-matrix.outputs.boards-aarch }}
|
||||||
|
boards-arm: ${{ steps.set-matrix.outputs.boards-arm }}
|
||||||
|
boards-esp: ${{ steps.set-matrix.outputs.boards-esp }}
|
||||||
|
boards-riscv: ${{ steps.set-matrix.outputs.boards-riscv }}
|
||||||
|
boards-rpi: ${{ steps.set-matrix.outputs.boards-rpi }}
|
||||||
|
cp-version: ${{ steps.set-up-submodules.outputs.version }}
|
||||||
steps:
|
steps:
|
||||||
- name: Dump GitHub context
|
- name: Dump GitHub context
|
||||||
|
run: echo "$GITHUB_CONTEXT"
|
||||||
env:
|
env:
|
||||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||||
run: echo "$GITHUB_CONTEXT"
|
- name: Set up repository
|
||||||
- uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: false
|
submodules: false
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
- name: Set up Python 3
|
- name: Set up python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: 3.x
|
||||||
- name: Get CP deps
|
- name: Duplicate USB VID/PID check
|
||||||
run: python tools/ci_fetch_deps.py test ${{ github.sha }}
|
|
||||||
- name: CircuitPython version
|
|
||||||
run: |
|
|
||||||
tools/describe || git log --parents HEAD~4..
|
|
||||||
echo >>$GITHUB_ENV CP_VERSION=$(tools/describe)
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y eatmydata
|
|
||||||
sudo eatmydata apt-get install -y gettext gcc-aarch64-linux-gnu mingw-w64
|
|
||||||
pip install -r requirements-ci.txt -r requirements-dev.txt
|
|
||||||
- name: Versions
|
|
||||||
run: |
|
|
||||||
gcc --version
|
|
||||||
python3 --version
|
|
||||||
- name: Duplicate USB VID/PID Check
|
|
||||||
run: python3 -u -m tools.ci_check_duplicate_usb_vid_pid
|
run: python3 -u -m tools.ci_check_duplicate_usb_vid_pid
|
||||||
- name: Build mpy-cross
|
- name: Set up submodules
|
||||||
run: make -C mpy-cross -j2
|
id: set-up-submodules
|
||||||
- name: Build unix port
|
uses: ./.github/actions/deps/submodules
|
||||||
run: |
|
|
||||||
make -C ports/unix VARIANT=coverage -j2
|
|
||||||
- name: Test all
|
|
||||||
run: MICROPY_CPYTHON3=python3.8 MICROPY_MICROPYTHON=../ports/unix/micropython-coverage ./run-tests.py -j1
|
|
||||||
working-directory: tests
|
|
||||||
- name: Print failure info
|
|
||||||
run: MICROPY_CPYTHON3=python3.8 MICROPY_MICROPYTHON=../ports/unix/micropython-coverage ./run-tests.py -j1 --print-failures
|
|
||||||
if: failure()
|
|
||||||
working-directory: tests
|
|
||||||
- name: Native Tests
|
|
||||||
run: MICROPY_CPYTHON3=python3.8 MICROPY_MICROPYTHON=../ports/unix/micropython-coverage ./run-tests.py -j1 --emit native
|
|
||||||
working-directory: tests
|
|
||||||
- name: mpy Tests
|
|
||||||
run: MICROPY_CPYTHON3=python3.8 MICROPY_MICROPYTHON=../ports/unix/micropython-coverage ./run-tests.py -j1 --via-mpy -d basics float micropython
|
|
||||||
working-directory: tests
|
|
||||||
- name: Native mpy Tests
|
|
||||||
run: MICROPY_CPYTHON3=python3.8 MICROPY_MICROPYTHON=../ports/unix/micropython-coverage ./run-tests.py -j1 --via-mpy --emit native -d basics float micropython
|
|
||||||
working-directory: tests
|
|
||||||
- name: Build native modules
|
|
||||||
run: |
|
|
||||||
make -C examples/natmod/features1
|
|
||||||
make -C examples/natmod/features2
|
|
||||||
make -C examples/natmod/btree
|
|
||||||
make -C examples/natmod/framebuf
|
|
||||||
make -C examples/natmod/uheapq
|
|
||||||
make -C examples/natmod/urandom
|
|
||||||
make -C examples/natmod/ure
|
|
||||||
make -C examples/natmod/uzlib
|
|
||||||
- name: Test native modules
|
|
||||||
run: MICROPY_CPYTHON3=python3.8 MICROPY_MICROPYTHON=../ports/unix/micropython-coverage ./run-natmodtests.py extmod/{btree*,framebuf*,uheapq*,ure*,uzlib*}.py
|
|
||||||
working-directory: tests
|
|
||||||
- name: Build mpy-cross.static-aarch64
|
|
||||||
run: make -C mpy-cross -j2 -f Makefile.static-aarch64
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
with:
|
with:
|
||||||
name: mpy-cross.static-aarch64
|
action: cache
|
||||||
path: mpy-cross/mpy-cross.static-aarch64
|
version: true
|
||||||
- name: Build mpy-cross.static-raspbian
|
- name: Set up external
|
||||||
run: make -C mpy-cross -j2 -f Makefile.static-raspbian
|
uses: ./.github/actions/deps/external
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
with:
|
with:
|
||||||
name: mpy-cross.static-raspbian
|
action: cache
|
||||||
path: mpy-cross/mpy-cross.static-raspbian
|
# Disabled: Needs to be updated
|
||||||
- name: Build mpy-cross.static
|
# - name: Get last commit with checks
|
||||||
run: make -C mpy-cross -j2 -f Makefile.static
|
# id: get-last-commit-with-checks
|
||||||
- uses: actions/upload-artifact@v3
|
# 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:
|
with:
|
||||||
name: mpy-cross.static-amd64-linux
|
download: false
|
||||||
path: mpy-cross/mpy-cross.static
|
- name: Set head sha
|
||||||
- name: Build mpy-cross.static-mingw
|
|
||||||
run: make -C mpy-cross -j2 -f Makefile.static-mingw
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: mpy-cross.static-x64-windows
|
|
||||||
path: mpy-cross/mpy-cross.static.exe
|
|
||||||
- name: Upload mpy-cross builds to S3
|
|
||||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') || (github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
|
|
||||||
env:
|
|
||||||
AWS_PAGER: ''
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
run: |
|
|
||||||
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross/mpy-cross.static-aarch64 s3://adafruit-circuit-python/bin/mpy-cross/mpy-cross.static-aarch64-${{ env.CP_VERSION }} --no-progress --region us-east-1
|
|
||||||
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross/mpy-cross.static-raspbian s3://adafruit-circuit-python/bin/mpy-cross/mpy-cross.static-raspbian-${{ env.CP_VERSION }} --no-progress --region us-east-1
|
|
||||||
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross/mpy-cross.static s3://adafruit-circuit-python/bin/mpy-cross/mpy-cross.static-amd64-linux-${{ env.CP_VERSION }} --no-progress --region us-east-1
|
|
||||||
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross/mpy-cross.static.exe s3://adafruit-circuit-python/bin/mpy-cross/mpy-cross.static-x64-windows-${{ env.CP_VERSION }}.exe --no-progress --region us-east-1
|
|
||||||
- name: Get last commit with checks
|
|
||||||
id: get-last-commit-with-checks
|
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
working-directory: tools
|
run: echo "HEAD_SHA=$(git show -s --format=%s $GITHUB_SHA | grep -o -P "(?<=Merge ).*(?= into)")" >> $GITHUB_ENV
|
||||||
|
- name: Set base sha
|
||||||
|
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:
|
env:
|
||||||
REPO: ${{ github.repository }}
|
DEPTH: ${{ steps.get-last-commit-with-checks.outputs.commit_depth || github.event.pull_request.commits }}
|
||||||
PULL: ${{ github.event.number }}
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
EXCLUDE_COMMIT: ${{ github.event.after }}
|
|
||||||
run: python3 -u ci_changes_per_commit.py
|
|
||||||
- name: Get changes
|
- name: Get changes
|
||||||
id: get-changes
|
id: get-changes
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
uses: tj-actions/changed-files@v34
|
run: echo $(git diff $BASE_SHA...$HEAD_SHA --name-only) | echo "changed_files=[\"$(sed "s/ /\", \"/g")\"]" >> $GITHUB_OUTPUT
|
||||||
with:
|
|
||||||
json: true
|
|
||||||
sha: ${{ steps.get-last-commit-with-checks.outputs.commit && github.event.after }}
|
|
||||||
base_sha: ${{ steps.get-last-commit-with-checks.outputs.commit }}
|
|
||||||
- name: Set matrix
|
- name: Set matrix
|
||||||
id: set-matrix
|
id: set-matrix
|
||||||
working-directory: tools
|
working-directory: tools
|
||||||
env:
|
|
||||||
CHANGED_FILES: ${{ steps.get-changes.outputs.all_changed_and_modified_files }}
|
|
||||||
LAST_FAILED_JOBS: ${{ steps.get-last-commit-with-checks.outputs.checkruns }}
|
|
||||||
run: python3 -u ci_set_matrix.py
|
run: python3 -u ci_set_matrix.py
|
||||||
|
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'
|
||||||
|
uses: ./.github/workflows/build-mpy-cross.yml
|
||||||
|
secrets: inherit
|
||||||
|
with:
|
||||||
|
cp-version: ${{ needs.scheduler.outputs.cp-version }}
|
||||||
|
|
||||||
mpy-cross-mac:
|
mpy-cross-mac:
|
||||||
runs-on: macos-11
|
runs-on: macos-11
|
||||||
steps:
|
needs: scheduler
|
||||||
- name: Dump GitHub context
|
if: ${{ needs.scheduler.outputs.build-boards == 'True' }}
|
||||||
env:
|
env:
|
||||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
CP_VERSION: ${{ needs.scheduler.outputs.cp-version }}
|
||||||
run: echo "$GITHUB_CONTEXT"
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Set up repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: false
|
submodules: false
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
- name: Set up Python 3
|
- name: Set up python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: 3.x
|
||||||
- name: Get CP deps
|
- name: Set up submodules
|
||||||
run: python tools/ci_fetch_deps.py mpy-cross-mac ${{ github.sha }}
|
uses: ./.github/actions/deps/submodules
|
||||||
- name: CircuitPython version
|
|
||||||
run: |
|
|
||||||
tools/describe || git log --parents HEAD~4..
|
|
||||||
echo >>$GITHUB_ENV CP_VERSION=$(tools/describe)
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
brew install gettext
|
|
||||||
echo >>$GITHUB_PATH /usr/local/opt/gettext/bin
|
|
||||||
- name: Versions
|
- name: Versions
|
||||||
run: |
|
run: |
|
||||||
gcc --version
|
gcc --version
|
||||||
@ -196,47 +143,46 @@ jobs:
|
|||||||
path: mpy-cross/mpy-cross-arm64
|
path: mpy-cross/mpy-cross-arm64
|
||||||
- name: Make universal binary
|
- name: Make universal binary
|
||||||
run: lipo -create -output mpy-cross-macos-universal mpy-cross/mpy-cross mpy-cross/mpy-cross-arm64
|
run: lipo -create -output mpy-cross-macos-universal mpy-cross/mpy-cross mpy-cross/mpy-cross-arm64
|
||||||
- uses: actions/upload-artifact@v3
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: mpy-cross-macos-11-universal
|
name: mpy-cross-macos-11-universal
|
||||||
path: mpy-cross-macos-universal
|
path: mpy-cross-macos-universal
|
||||||
- name: Upload mpy-cross build to S3
|
- name: Upload to S3
|
||||||
|
if: >-
|
||||||
|
(github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') ||
|
||||||
|
(github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
|
||||||
run: |
|
run: |
|
||||||
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross-macos-universal s3://adafruit-circuit-python/bin/mpy-cross/mpy-cross-macos-11-${{ env.CP_VERSION }}-universal --no-progress --region us-east-1
|
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross-macos-universal s3://adafruit-circuit-python/bin/mpy-cross/macos-11/mpy-cross-macos-11-${{ env.CP_VERSION }}-universal --no-progress --region us-east-1
|
||||||
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross/mpy-cross-arm64 s3://adafruit-circuit-python/bin/mpy-cross/mpy-cross-macos-11-${{ env.CP_VERSION }}-arm64 --no-progress --region us-east-1
|
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross/mpy-cross-arm64 s3://adafruit-circuit-python/bin/mpy-cross/macos-11/mpy-cross-macos-11-${{ env.CP_VERSION }}-arm64 --no-progress --region us-east-1
|
||||||
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross/mpy-cross s3://adafruit-circuit-python/bin/mpy-cross/mpy-cross-macos-11-${{ env.CP_VERSION }}-x64 --no-progress --region us-east-1
|
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp mpy-cross/mpy-cross s3://adafruit-circuit-python/bin/mpy-cross/macos-11/mpy-cross-macos-11-${{ env.CP_VERSION }}-x64 --no-progress --region us-east-1
|
||||||
env:
|
env:
|
||||||
AWS_PAGER: ''
|
AWS_PAGER: ''
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') || (github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
|
|
||||||
|
|
||||||
|
|
||||||
build-doc:
|
build-doc:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-22.04
|
||||||
needs: test
|
needs: scheduler
|
||||||
if: ${{ needs.test.outputs.build-doc == 'True' }}
|
if: ${{ needs.scheduler.outputs.build-doc == 'True' }}
|
||||||
|
env:
|
||||||
|
CP_VERSION: ${{ needs.scheduler.outputs.cp-version }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Set up repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: false
|
submodules: false
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
- name: Get CP deps
|
- name: Set up python
|
||||||
run: python tools/ci_fetch_deps.py docs ${{ github.sha }}
|
|
||||||
- name: CircuitPython version
|
|
||||||
run: |
|
|
||||||
tools/describe || git log --parents HEAD~4..
|
|
||||||
echo >>$GITHUB_ENV CP_VERSION=$(tools/describe)
|
|
||||||
- name: Set up Python 3
|
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: 3.x
|
||||||
|
- name: Set up submodules
|
||||||
|
uses: ./.github/actions/deps/submodules
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get install -y latexmk librsvg2-bin texlive-fonts-recommended texlive-latex-recommended texlive-latex-extra
|
||||||
sudo apt-get install -y eatmydata
|
pip install -r requirements-doc.txt
|
||||||
sudo eatmydata apt-get install -y latexmk librsvg2-bin texlive-fonts-recommended texlive-latex-recommended texlive-latex-extra
|
|
||||||
pip install -r requirements-ci.txt -r requirements-doc.txt
|
|
||||||
- name: Build and Validate Stubs
|
- name: Build and Validate Stubs
|
||||||
run: make check-stubs -j2
|
run: make check-stubs -j2
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
@ -256,15 +202,13 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: docs
|
name: docs
|
||||||
path: _build/latex
|
path: _build/latex
|
||||||
- name: Upload stubs to S3
|
- name: Upload to S3
|
||||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') || (github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
|
uses: ./.github/actions/upload_aws
|
||||||
env:
|
with:
|
||||||
AWS_PAGER: ''
|
source: circuitpython-stubs/dist/*.tar.gz
|
||||||
|
destination: stubs/circuitpython-stubs-${{ env.CP_VERSION }}.tar.gz
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
run: |
|
|
||||||
zip -9r circuitpython-stubs.zip circuitpython-stubs
|
|
||||||
[ -z "$AWS_ACCESS_KEY_ID" ] || aws s3 cp circuitpython-stubs/dist/*.tar.gz s3://adafruit-circuit-python/bin/stubs/circuitpython-stubs-${{ env.CP_VERSION }}.zip --no-progress --region us-east-1
|
|
||||||
- name: Upload stubs to PyPi
|
- name: Upload stubs to PyPi
|
||||||
if: github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested')
|
if: github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested')
|
||||||
env:
|
env:
|
||||||
@ -275,263 +219,52 @@ jobs:
|
|||||||
[ -z "$TWINE_USERNAME" ] || echo "Uploading dev release to PyPi"
|
[ -z "$TWINE_USERNAME" ] || echo "Uploading dev release to PyPi"
|
||||||
[ -z "$TWINE_USERNAME" ] || twine upload circuitpython-stubs/dist/*
|
[ -z "$TWINE_USERNAME" ] || twine upload circuitpython-stubs/dist/*
|
||||||
|
|
||||||
|
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 }}
|
||||||
|
|
||||||
build-arm:
|
arm:
|
||||||
runs-on: ubuntu-20.04
|
needs: [scheduler, mpy-cross, tests]
|
||||||
needs: test
|
if: ${{ needs.scheduler.outputs.boards-arm != '[]' }}
|
||||||
strategy:
|
uses: ./.github/workflows/build-boards.yml
|
||||||
fail-fast: false
|
secrets: inherit
|
||||||
matrix:
|
|
||||||
board: ${{ fromJSON(needs.test.outputs.boards-arm) }}
|
|
||||||
if: ${{ needs.test.outputs.boards-arm != '[]' }}
|
|
||||||
steps:
|
|
||||||
- name: Set up Python 3
|
|
||||||
uses: actions/setup-python@v4
|
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
platform: arm
|
||||||
- uses: actions/checkout@v3
|
boards: ${{ needs.scheduler.outputs.boards-arm }}
|
||||||
with:
|
cp-version: ${{ needs.scheduler.outputs.cp-version }}
|
||||||
submodules: false
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Get CP deps
|
|
||||||
run: python tools/ci_fetch_deps.py ${{ matrix.board }} ${{ github.sha }}
|
|
||||||
- uses: carlosperate/arm-none-eabi-gcc-action@v1
|
|
||||||
with:
|
|
||||||
release: '10-2020-q4'
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y gettext
|
|
||||||
pip install -r requirements-ci.txt -r requirements-dev.txt
|
|
||||||
- name: Versions
|
|
||||||
run: |
|
|
||||||
gcc --version
|
|
||||||
arm-none-eabi-gcc --version
|
|
||||||
python3 --version
|
|
||||||
- name: mpy-cross
|
|
||||||
run: make -C mpy-cross -j2
|
|
||||||
- name: Setup build failure matcher
|
|
||||||
run: echo "::add-matcher::$GITHUB_WORKSPACE/.github/workflows/match-build-fail.json"
|
|
||||||
- name: build
|
|
||||||
run: python3 -u build_release_files.py
|
|
||||||
working-directory: tools
|
|
||||||
env:
|
|
||||||
BOARDS: ${{ matrix.board }}
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.board }}
|
|
||||||
path: bin/${{ matrix.board }}
|
|
||||||
- name: Upload to S3
|
|
||||||
run: "[ -z \"$AWS_ACCESS_KEY_ID\" ] || aws s3 cp bin/ s3://adafruit-circuit-python/bin/ --recursive --no-progress --region us-east-1"
|
|
||||||
env:
|
|
||||||
AWS_PAGER: ''
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') || (github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
|
|
||||||
|
|
||||||
|
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 }}
|
||||||
|
|
||||||
build-riscv:
|
riscv:
|
||||||
runs-on: ubuntu-20.04
|
needs: [scheduler, mpy-cross, tests]
|
||||||
needs: test
|
if: ${{ needs.scheduler.outputs.boards-riscv != '[]' }}
|
||||||
strategy:
|
uses: ./.github/workflows/build-boards.yml
|
||||||
fail-fast: false
|
secrets: inherit
|
||||||
matrix:
|
|
||||||
board: ${{ fromJSON(needs.test.outputs.boards-riscv) }}
|
|
||||||
if: ${{ needs.test.outputs.boards-riscv != '[]' }}
|
|
||||||
steps:
|
|
||||||
- name: Set up Python 3
|
|
||||||
uses: actions/setup-python@v4
|
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
platform: riscv
|
||||||
- uses: actions/checkout@v3
|
boards: ${{ needs.scheduler.outputs.boards-riscv }}
|
||||||
with:
|
cp-version: ${{ needs.scheduler.outputs.cp-version }}
|
||||||
submodules: false
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Get CP deps
|
|
||||||
run: python tools/ci_fetch_deps.py ${{ matrix.board }} ${{ github.sha }}
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y gettext
|
|
||||||
pip install -r requirements-ci.txt -r requirements-dev.txt
|
|
||||||
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
|
|
||||||
- name: Versions
|
|
||||||
run: |
|
|
||||||
gcc --version
|
|
||||||
riscv64-unknown-elf-gcc --version
|
|
||||||
python3 --version
|
|
||||||
- name: mpy-cross
|
|
||||||
run: make -C mpy-cross -j2
|
|
||||||
- name: Setup build failure matcher
|
|
||||||
run: echo "::add-matcher::$GITHUB_WORKSPACE/.github/workflows/match-build-fail.json"
|
|
||||||
- name: build
|
|
||||||
run: python3 -u build_release_files.py
|
|
||||||
working-directory: tools
|
|
||||||
env:
|
|
||||||
BOARDS: ${{ matrix.board }}
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.board }}
|
|
||||||
path: bin/${{ matrix.board }}
|
|
||||||
- name: Upload to S3
|
|
||||||
run: "[ -z \"$AWS_ACCESS_KEY_ID\" ] || aws s3 cp bin/ s3://adafruit-circuit-python/bin/ --recursive --no-progress --region us-east-1"
|
|
||||||
env:
|
|
||||||
AWS_PAGER: ''
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') || (github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
|
|
||||||
|
|
||||||
|
rpi:
|
||||||
build-espressif:
|
needs: [scheduler, mpy-cross, tests]
|
||||||
runs-on: ubuntu-20.04
|
if: ${{ needs.scheduler.outputs.boards-rpi != '[]' }}
|
||||||
needs: test
|
uses: ./.github/workflows/build-boards.yml
|
||||||
strategy:
|
secrets: inherit
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
board: ${{ fromJSON(needs.test.outputs.boards-espressif) }}
|
|
||||||
if: ${{ needs.test.outputs.boards-espressif != '[]' }}
|
|
||||||
steps:
|
|
||||||
- name: Set up Python 3
|
|
||||||
id: py3
|
|
||||||
uses: actions/setup-python@v4
|
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
platform: arm
|
||||||
- uses: actions/checkout@v3
|
boards: ${{ needs.scheduler.outputs.boards-rpi }}
|
||||||
with:
|
cp-version: ${{ needs.scheduler.outputs.cp-version }}
|
||||||
submodules: false
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Get CP deps
|
|
||||||
run: python tools/ci_fetch_deps.py ${{ matrix.board }} ${{ github.sha }}
|
|
||||||
- name: CircuitPython version
|
|
||||||
run: |
|
|
||||||
tools/describe || git log --parents HEAD~4..
|
|
||||||
echo >>$GITHUB_ENV CP_VERSION=$(tools/describe)
|
|
||||||
- uses: actions/cache@v3
|
|
||||||
name: Fetch IDF tool cache
|
|
||||||
id: idf-cache
|
|
||||||
with:
|
|
||||||
path: ${{ github.workspace }}/.idf_tools
|
|
||||||
key: ${{ runner.os }}-idf-tools-${{ hashFiles('.git/modules/ports/espressif/esp-idf/HEAD') }}-${{ steps.py3.outputs.python-path }}-20220404
|
|
||||||
- name: Clone IDF submodules
|
|
||||||
run: |
|
|
||||||
(cd $IDF_PATH && git submodule update --init)
|
|
||||||
env:
|
|
||||||
IDF_PATH: ${{ github.workspace }}/ports/espressif/esp-idf
|
|
||||||
- name: Install IDF tools
|
|
||||||
run: |
|
|
||||||
$IDF_PATH/tools/idf_tools.py --non-interactive install required
|
|
||||||
$IDF_PATH/tools/idf_tools.py --non-interactive install cmake
|
|
||||||
$IDF_PATH/tools/idf_tools.py --non-interactive install-python-env
|
|
||||||
rm -rf $IDF_TOOLS_PATH/dist
|
|
||||||
env:
|
|
||||||
IDF_PATH: ${{ github.workspace }}/ports/espressif/esp-idf
|
|
||||||
IDF_TOOLS_PATH: ${{ github.workspace }}/.idf_tools
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
source $IDF_PATH/export.sh
|
|
||||||
sudo apt-get install -y gettext ninja-build
|
|
||||||
pip install -r requirements-ci.txt -r requirements-dev.txt
|
|
||||||
env:
|
|
||||||
IDF_PATH: ${{ github.workspace }}/ports/espressif/esp-idf
|
|
||||||
IDF_TOOLS_PATH: ${{ github.workspace }}/.idf_tools
|
|
||||||
- name: Versions
|
|
||||||
run: |
|
|
||||||
source $IDF_PATH/export.sh
|
|
||||||
gcc --version
|
|
||||||
xtensa-esp32s2-elf-gcc --version
|
|
||||||
python3 --version
|
|
||||||
ninja --version
|
|
||||||
cmake --version
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
IDF_PATH: ${{ github.workspace }}/ports/espressif/esp-idf
|
|
||||||
IDF_TOOLS_PATH: ${{ github.workspace }}/.idf_tools
|
|
||||||
- name: mpy-cross
|
|
||||||
run: make -C mpy-cross -j2
|
|
||||||
- name: Setup build failure matcher
|
|
||||||
run: echo "::add-matcher::$GITHUB_WORKSPACE/.github/workflows/match-build-fail.json"
|
|
||||||
- name: build
|
|
||||||
run: |
|
|
||||||
source $IDF_PATH/export.sh
|
|
||||||
python3 -u build_release_files.py
|
|
||||||
working-directory: tools
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
IDF_PATH: ${{ github.workspace }}/ports/espressif/esp-idf
|
|
||||||
IDF_TOOLS_PATH: ${{ github.workspace }}/.idf_tools
|
|
||||||
BOARDS: ${{ matrix.board }}
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.board }}
|
|
||||||
path: bin/${{ matrix.board }}
|
|
||||||
- name: Upload to S3
|
|
||||||
run: "[ -z \"$AWS_ACCESS_KEY_ID\" ] || aws s3 cp bin/ s3://adafruit-circuit-python/bin/ --recursive --no-progress --region us-east-1"
|
|
||||||
env:
|
|
||||||
AWS_PAGER: ''
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') || (github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
|
|
||||||
|
|
||||||
build-aarch:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
needs: test
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
board: ${{ fromJSON(needs.test.outputs.boards-aarch) }}
|
|
||||||
if: ${{ needs.test.outputs.boards-aarch != '[]' }}
|
|
||||||
steps:
|
|
||||||
- name: Set up Python 3
|
|
||||||
uses: actions/setup-python@v4
|
|
||||||
with:
|
|
||||||
python-version: "3.10"
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: false
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Get CP deps
|
|
||||||
run: python tools/ci_fetch_deps.py ${{ matrix.board }} ${{ github.sha }}
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y gettext mtools
|
|
||||||
pip install -r requirements-ci.txt -r requirements-dev.txt
|
|
||||||
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
|
|
||||||
- uses: carlosperate/arm-none-eabi-gcc-action@v1
|
|
||||||
with:
|
|
||||||
release: '10-2020-q4'
|
|
||||||
- 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)
|
|
||||||
- name: Versions
|
|
||||||
run: |
|
|
||||||
gcc --version
|
|
||||||
aarch64-none-elf-gcc --version
|
|
||||||
arm-none-eabi-gcc --version
|
|
||||||
python3 --version
|
|
||||||
mkfs.fat --version || true
|
|
||||||
- name: mpy-cross
|
|
||||||
run: make -C mpy-cross -j2
|
|
||||||
- name: Setup build failure matcher
|
|
||||||
run: echo "::add-matcher::$GITHUB_WORKSPACE/.github/workflows/match-build-fail.json"
|
|
||||||
- name: build
|
|
||||||
run: python3 -u build_release_files.py
|
|
||||||
working-directory: tools
|
|
||||||
env:
|
|
||||||
BOARDS: ${{ matrix.board }}
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.board }}
|
|
||||||
path: bin/${{ matrix.board }}
|
|
||||||
- name: Upload to S3
|
|
||||||
run: "[ -z \"$AWS_ACCESS_KEY_ID\" ] || aws s3 cp bin/ s3://adafruit-circuit-python/bin/ --recursive --no-progress --region us-east-1"
|
|
||||||
env:
|
|
||||||
AWS_PAGER: ''
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/main' && github.repository_owner == 'adafruit') || (github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
|
|
||||||
|
29
.github/workflows/create_website_pr.yml
vendored
29
.github/workflows/create_website_pr.yml
vendored
@ -6,41 +6,38 @@ name: Update CircuitPython.org
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published, rerequested]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
website:
|
website:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Dump GitHub context
|
- name: Dump GitHub context
|
||||||
|
run: echo "$GITHUB_CONTEXT"
|
||||||
env:
|
env:
|
||||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||||
run: echo "$GITHUB_CONTEXT"
|
- name: Set up repository
|
||||||
- uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: false
|
submodules: false
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
- name: Set up Python 3
|
- name: Set up python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: 3.x
|
||||||
- name: Get CP deps
|
- name: Set up submodules
|
||||||
run: python tools/ci_fetch_deps.py website ${{ github.sha }}
|
uses: ./.github/actions/deps/submodules
|
||||||
- name: Install deps
|
with:
|
||||||
run: |
|
version: true
|
||||||
pip install -r requirements-dev.txt
|
- name: Set up external
|
||||||
|
uses: ./.github/actions/deps/external
|
||||||
- name: Versions
|
- name: Versions
|
||||||
run: |
|
run: |
|
||||||
gcc --version
|
gcc --version
|
||||||
python3 --version
|
python3 --version
|
||||||
- name: CircuitPython version
|
|
||||||
run: |
|
|
||||||
tools/describe || git log --parents HEAD~4..
|
|
||||||
echo >>$GITHUB_ENV CP_VERSION=$(tools/describe)
|
|
||||||
- name: Website
|
- name: Website
|
||||||
run: python3 build_board_info.py
|
run: python3 build_board_info.py
|
||||||
working-directory: tools
|
working-directory: tools
|
||||||
env:
|
env:
|
||||||
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
||||||
ADABOT_GITHUB_ACCESS_TOKEN: ${{ secrets.ADABOT_GITHUB_ACCESS_TOKEN }}
|
ADABOT_GITHUB_ACCESS_TOKEN: ${{ secrets.ADABOT_GITHUB_ACCESS_TOKEN }}
|
||||||
if: github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested')
|
|
||||||
|
10
.github/workflows/notify.yml
vendored
10
.github/workflows/notify.yml
vendored
@ -7,8 +7,12 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
notify:
|
notify:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
- uses: jenschelkopf/issue-label-notification-action@1.3
|
- uses: tekktrik/issue-labeled-ping@v1
|
||||||
with:
|
with:
|
||||||
recipients: |
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
ulab=@v923z
|
user: v923z
|
||||||
|
label: ulab
|
||||||
|
message: Heads up {user} - the "{label}" label was applied to this issue.
|
||||||
|
23
.github/workflows/ports_windows.yml
vendored
23
.github/workflows/ports_windows.yml
vendored
@ -4,7 +4,7 @@ on:
|
|||||||
push:
|
push:
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- '.github/workflows/*.yml'
|
- '.github/workflows/ports_windows.yml'
|
||||||
- 'extmod/**'
|
- 'extmod/**'
|
||||||
- 'lib/**'
|
- 'lib/**'
|
||||||
- 'mpy-cross/**'
|
- 'mpy-cross/**'
|
||||||
@ -19,8 +19,8 @@ concurrency:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
windows:
|
||||||
runs-on: windows-2019
|
runs-on: windows-2022
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
# We define a custom shell script here, although `msys2.cmd` does neither exist nor is it available in the PATH yet
|
# We define a custom shell script here, although `msys2.cmd` does neither exist nor is it available in the PATH yet
|
||||||
@ -32,8 +32,7 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Check python coding (cmd)
|
- name: Check python coding (cmd)
|
||||||
run: |
|
run: python -c "import sys, locale; print(sys.getdefaultencoding(), locale.getpreferredencoding(False))"
|
||||||
python -c "import sys, locale; print(sys.getdefaultencoding(), locale.getpreferredencoding(False))"
|
|
||||||
shell: cmd
|
shell: cmd
|
||||||
|
|
||||||
# We use a JS Action, which calls the system terminal or other custom terminals directly, if required
|
# We use a JS Action, which calls the system terminal or other custom terminals directly, if required
|
||||||
@ -71,16 +70,16 @@ jobs:
|
|||||||
which python; python --version; python -c "import cascadetoml"
|
which python; python --version; python -c "import cascadetoml"
|
||||||
which python3; python3 --version; python3 -c "import cascadetoml"
|
which python3; python3 --version; python3 -c "import cascadetoml"
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- name: Set up repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: false
|
submodules: false
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
- name: Get CP deps
|
|
||||||
run: python tools/ci_fetch_deps.py windows ${{ github.sha }}
|
- name: Set up submodules
|
||||||
- name: CircuitPython version
|
uses: ./.github/actions/deps/submodules
|
||||||
run: |
|
with:
|
||||||
tools/describe || git log --parents HEAD~4..
|
version: true
|
||||||
echo >>$GITHUB_ENV CP_VERSION=$(tools/describe)
|
|
||||||
|
|
||||||
- name: build mpy-cross
|
- name: build mpy-cross
|
||||||
run: make -j2 -C mpy-cross
|
run: make -j2 -C mpy-cross
|
||||||
|
31
.github/workflows/pre-commit.yml
vendored
31
.github/workflows/pre-commit.yml
vendored
@ -16,24 +16,23 @@ jobs:
|
|||||||
pre-commit:
|
pre-commit:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Set up repository
|
||||||
- name: Set up Python 3
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: false
|
||||||
|
fetch-depth: 1
|
||||||
|
- name: Set up python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: 3.x
|
||||||
- name: Install deps
|
- name: Set up submodules
|
||||||
run: |
|
uses: ./.github/actions/deps/submodules
|
||||||
sudo apt-get install -y gettext uncrustify
|
- name: Set up external
|
||||||
pip3 install black polib pyyaml
|
uses: ./.github/actions/deps/external
|
||||||
- name: Populate selected submodules
|
- name: Install dependencies
|
||||||
run: git submodule update --init extmod/ulab
|
run: sudo apt-get install -y gettext uncrustify
|
||||||
- name: Set PY
|
- name: Run pre-commit
|
||||||
run: echo >>$GITHUB_ENV PY="$(python -c 'import hashlib, sys;print(hashlib.sha256(sys.version.encode()+sys.executable.encode()).hexdigest())')"
|
uses: pre-commit/action@v3.0.0
|
||||||
- uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: ~/.cache/pre-commit
|
|
||||||
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
|
|
||||||
- uses: pre-commit/action@v3.0.0
|
|
||||||
- name: Make patch
|
- name: Make patch
|
||||||
if: failure()
|
if: failure()
|
||||||
run: git diff > ~/pre-commit.patch
|
run: git diff > ~/pre-commit.patch
|
||||||
|
67
.github/workflows/run-tests.yml
vendored
Normal file
67
.github/workflows/run-tests.yml
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
name: Run tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
cp-version:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
test: [all, mpy, native, native_mpy]
|
||||||
|
env:
|
||||||
|
CP_VERSION: ${{ inputs.cp-version }}
|
||||||
|
MICROPY_CPYTHON3: python3.8
|
||||||
|
MICROPY_MICROPYTHON: ../ports/unix/micropython-coverage
|
||||||
|
TEST_all:
|
||||||
|
TEST_mpy: --via-mpy -d basics float micropython
|
||||||
|
TEST_native: --emit native
|
||||||
|
TEST_native_mpy: --via-mpy --emit native -d basics float micropython
|
||||||
|
steps:
|
||||||
|
- name: Set up repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: false
|
||||||
|
fetch-depth: 1
|
||||||
|
- name: Set up python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: 3.x
|
||||||
|
- name: Set up submodules
|
||||||
|
uses: ./.github/actions/deps/submodules
|
||||||
|
with:
|
||||||
|
target: tests
|
||||||
|
- name: Set up external
|
||||||
|
if: matrix.test == 'all'
|
||||||
|
uses: ./.github/actions/deps/external
|
||||||
|
- name: Set up mpy-cross
|
||||||
|
uses: ./.github/actions/mpy_cross
|
||||||
|
- name: Build unix port
|
||||||
|
run: make -C ports/unix VARIANT=coverage -j2
|
||||||
|
- name: Run tests
|
||||||
|
run: ./run-tests.py -j2 ${{ env[format('TEST_{0}', matrix.test)] }}
|
||||||
|
working-directory: tests
|
||||||
|
- name: Print failure info
|
||||||
|
run: ./run-tests.py -j2 --print-failures
|
||||||
|
if: failure()
|
||||||
|
working-directory: tests
|
||||||
|
- name: Build native modules
|
||||||
|
if: matrix.test == 'all'
|
||||||
|
run: |
|
||||||
|
make -C examples/natmod/features1
|
||||||
|
make -C examples/natmod/features2
|
||||||
|
make -C examples/natmod/btree
|
||||||
|
make -C examples/natmod/framebuf
|
||||||
|
make -C examples/natmod/uheapq
|
||||||
|
make -C examples/natmod/urandom
|
||||||
|
make -C examples/natmod/ure
|
||||||
|
make -C examples/natmod/uzlib
|
||||||
|
- name: Test native modules
|
||||||
|
if: matrix.test == 'all'
|
||||||
|
run: ./run-natmodtests.py extmod/{btree*,framebuf*,uheapq*,ure*,uzlib*}.py
|
||||||
|
working-directory: tests
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -9,6 +9,7 @@
|
|||||||
!atmel-samd/asf/**/*.a
|
!atmel-samd/asf/**/*.a
|
||||||
*.elf
|
*.elf
|
||||||
*.bin
|
*.bin
|
||||||
|
!*.toml.bin
|
||||||
*.map
|
*.map
|
||||||
*.hex
|
*.hex
|
||||||
*.dis
|
*.dis
|
||||||
|
9
.gitmodules
vendored
9
.gitmodules
vendored
@ -146,7 +146,7 @@
|
|||||||
[submodule "ports/espressif/esp-idf"]
|
[submodule "ports/espressif/esp-idf"]
|
||||||
path = ports/espressif/esp-idf
|
path = ports/espressif/esp-idf
|
||||||
url = https://github.com/adafruit/esp-idf.git
|
url = https://github.com/adafruit/esp-idf.git
|
||||||
branch = circuitpython8
|
branch = release/v4.4-circuitpython
|
||||||
[submodule "ports/espressif/certificates/nina-fw"]
|
[submodule "ports/espressif/certificates/nina-fw"]
|
||||||
path = lib/certificates/nina-fw
|
path = lib/certificates/nina-fw
|
||||||
url = https://github.com/adafruit/nina-fw.git
|
url = https://github.com/adafruit/nina-fw.git
|
||||||
@ -310,12 +310,15 @@
|
|||||||
[submodule "ports/espressif/esp32-camera"]
|
[submodule "ports/espressif/esp32-camera"]
|
||||||
path = ports/espressif/esp32-camera
|
path = ports/espressif/esp32-camera
|
||||||
url = https://github.com/adafruit/esp32-camera/
|
url = https://github.com/adafruit/esp32-camera/
|
||||||
|
branch = circuitpython
|
||||||
[submodule "ports/raspberrypi/lib/cyw43-driver"]
|
[submodule "ports/raspberrypi/lib/cyw43-driver"]
|
||||||
path = ports/raspberrypi/lib/cyw43-driver
|
path = ports/raspberrypi/lib/cyw43-driver
|
||||||
url = https://github.com/georgerobotics/cyw43-driver.git
|
url = https://github.com/adafruit/cyw43-driver.git
|
||||||
|
branch = circuitpython8
|
||||||
[submodule "ports/raspberrypi/lib/lwip"]
|
[submodule "ports/raspberrypi/lib/lwip"]
|
||||||
path = ports/raspberrypi/lib/lwip
|
path = ports/raspberrypi/lib/lwip
|
||||||
url = https://github.com/lwip-tcpip/lwip.git
|
url = https://github.com/adafruit/lwip.git
|
||||||
|
branch = circuitpython8
|
||||||
[submodule "lib/mbedtls"]
|
[submodule "lib/mbedtls"]
|
||||||
path = lib/mbedtls
|
path = lib/mbedtls
|
||||||
url = https://github.com/ARMmbed/mbedtls.git
|
url = https://github.com/ARMmbed/mbedtls.git
|
||||||
|
@ -14,7 +14,7 @@ build:
|
|||||||
python: "3"
|
python: "3"
|
||||||
jobs:
|
jobs:
|
||||||
post_install:
|
post_install:
|
||||||
- python tools/ci_fetch_deps.py docs HEAD
|
- python tools/ci_fetch_deps.py build-doc
|
||||||
|
|
||||||
formats:
|
formats:
|
||||||
- pdf
|
- pdf
|
||||||
|
7
Makefile
7
Makefile
@ -90,7 +90,7 @@ clean:
|
|||||||
rm -rf autoapi
|
rm -rf autoapi
|
||||||
rm -rf $(STUBDIR) $(DISTDIR) *.egg-info
|
rm -rf $(STUBDIR) $(DISTDIR) *.egg-info
|
||||||
|
|
||||||
html: stubs
|
html:
|
||||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||||
@ -323,10 +323,11 @@ clean-nrf:
|
|||||||
clean-stm:
|
clean-stm:
|
||||||
$(MAKE) -C ports/stm BOARD=feather_stm32f405_express clean
|
$(MAKE) -C ports/stm BOARD=feather_stm32f405_express clean
|
||||||
|
|
||||||
.PHONY: fetch-submodules
|
|
||||||
fetch-submodules:
|
|
||||||
# This update will fail because the commits we need aren't the latest on the
|
# This update will fail because the commits we need aren't the latest on the
|
||||||
# branch. We can ignore that though because we fix it with the second command.
|
# branch. We can ignore that though because we fix it with the second command.
|
||||||
# (Only works for git servers that allow sha fetches.)
|
# (Only works for git servers that allow sha fetches.)
|
||||||
|
.PHONY: fetch-submodules
|
||||||
|
fetch-submodules:
|
||||||
git submodule update --init -N --depth 1 || true
|
git submodule update --init -N --depth 1 || true
|
||||||
git submodule foreach 'git fetch --tags --depth 1 origin $$sha1 && git checkout -q $$sha1'
|
git submodule foreach 'git fetch --tags --depth 1 origin $$sha1 && git checkout -q $$sha1'
|
||||||
|
16
README.rst
16
README.rst
@ -138,6 +138,16 @@ Behavior
|
|||||||
- Adds a safe mode that does not run user code after a hard crash or brown out. This makes it
|
- Adds a safe mode that does not run user code after a hard crash or brown out. This makes it
|
||||||
possible to fix code that causes nasty crashes by making it available through mass storage after
|
possible to fix code that causes nasty crashes by making it available through mass storage after
|
||||||
the crash. A reset (the button) is needed after it's fixed to get back into normal mode.
|
the crash. A reset (the button) is needed after it's fixed to get back into normal mode.
|
||||||
|
- Safe mode may be handled programmatically by providing a ``safemode.py``.
|
||||||
|
``safemode.py`` is run if the board has reset due to entering safe mode, unless the safe mode
|
||||||
|
initiated by the user by pressing button(s).
|
||||||
|
USB is not available so nothing can be printed.
|
||||||
|
``safemode.py`` can determine why the safe mode occurred
|
||||||
|
using ``supervisor.runtime.safe_mode_reason``, and take appropriate action. For instance,
|
||||||
|
if a hard crash occurred, ``safemode.py`` may do a ``microcontroller.reset()``
|
||||||
|
to automatically restart despite the crash.
|
||||||
|
If the battery is low, but is being charged, ``safemode.py`` may put the board in deep sleep
|
||||||
|
for a while. Or it may simply reset, and have ``code.py`` check the voltage and do the sleep.
|
||||||
- RGB status LED indicating CircuitPython state.
|
- RGB status LED indicating CircuitPython state.
|
||||||
- One green flash - code completed without error.
|
- One green flash - code completed without error.
|
||||||
- Two red flashes - code ended due to an exception.
|
- Two red flashes - code ended due to an exception.
|
||||||
@ -145,9 +155,9 @@ Behavior
|
|||||||
- Re-runs ``code.py`` or other main file after file system writes by a workflow. (Disable with
|
- Re-runs ``code.py`` or other main file after file system writes by a workflow. (Disable with
|
||||||
``supervisor.disable_autoreload()``)
|
``supervisor.disable_autoreload()``)
|
||||||
- Autoreload is disabled while the REPL is active.
|
- Autoreload is disabled while the REPL is active.
|
||||||
- Main is one of these: ``code.txt``, ``code.py``, ``main.py``,
|
- ``code.py`` may also be named``code.txt``, ``main.py``, or ``main.txt``.
|
||||||
``main.txt``
|
- ``boot.py`` may also be named ``boot.txt``.
|
||||||
- Boot is one of these: ``boot.py``, ``boot.txt``
|
- ``safemode.py`` may also be named ``safemode.txt``.
|
||||||
|
|
||||||
API
|
API
|
||||||
~~~
|
~~~
|
||||||
|
1
conf.py
1
conf.py
@ -171,6 +171,7 @@ exclude_patterns = ["**/build*",
|
|||||||
".env",
|
".env",
|
||||||
".venv",
|
".venv",
|
||||||
".direnv",
|
".direnv",
|
||||||
|
".devcontainer/Readme.md",
|
||||||
"data",
|
"data",
|
||||||
"docs/autoapi",
|
"docs/autoapi",
|
||||||
"docs/README.md",
|
"docs/README.md",
|
||||||
|
@ -49,8 +49,8 @@
|
|||||||
#include "shared-bindings/_bleio/ScanEntry.h"
|
#include "shared-bindings/_bleio/ScanEntry.h"
|
||||||
#include "shared-bindings/time/__init__.h"
|
#include "shared-bindings/time/__init__.h"
|
||||||
|
|
||||||
#if CIRCUITPY_DOTENV
|
#if CIRCUITPY_OS_GETENV
|
||||||
#include "shared-module/dotenv/__init__.h"
|
#include "shared-bindings/os/__init__.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MSEC_TO_UNITS(TIME, RESOLUTION) (((TIME) * 1000) / (RESOLUTION))
|
#define MSEC_TO_UNITS(TIME, RESOLUTION) (((TIME) * 1000) / (RESOLUTION))
|
||||||
@ -284,15 +284,15 @@ char default_ble_name[] = { 'C', 'I', 'R', 'C', 'U', 'I', 'T', 'P', 'Y', 0, 0, 0
|
|||||||
STATIC void bleio_adapter_hci_init(bleio_adapter_obj_t *self) {
|
STATIC void bleio_adapter_hci_init(bleio_adapter_obj_t *self) {
|
||||||
mp_int_t name_len = 0;
|
mp_int_t name_len = 0;
|
||||||
|
|
||||||
#if CIRCUITPY_DOTENV
|
#if CIRCUITPY_OS_GETENV
|
||||||
char ble_name[32];
|
mp_obj_t name = common_hal_os_getenv("CIRCUITPY_BLE_NAME", mp_const_none);
|
||||||
name_len = dotenv_get_key("/.env", "CIRCUITPY_BLE_NAME", ble_name, sizeof(ble_name) - 1);
|
if (name != mp_const_none) {
|
||||||
if (name_len > 0) {
|
mp_arg_validate_type_string(name, MP_QSTR_CIRCUITPY_BLE_NAME);
|
||||||
self->name = mp_obj_new_str(ble_name, (size_t)name_len);
|
self->name = name;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (name_len <= 0) {
|
if (!self->name) {
|
||||||
name_len = sizeof(default_ble_name);
|
name_len = sizeof(default_ble_name);
|
||||||
bt_addr_t addr;
|
bt_addr_t addr;
|
||||||
hci_check_error(hci_read_bd_addr(&addr));
|
hci_check_error(hci_read_bd_addr(&addr));
|
||||||
|
@ -267,6 +267,14 @@ After the license comment::
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
Version description
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
After the import statements::
|
||||||
|
|
||||||
|
__version__ = "0.0.0+auto.0"
|
||||||
|
__repo__ = "<repo github link>"
|
||||||
|
|
||||||
|
|
||||||
Class description
|
Class description
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
Additional CircuitPython Libraries and Drivers on GitHub
|
|
||||||
=========================================================
|
|
||||||
|
|
||||||
These are libraries and drivers available in separate GitHub repos. They are
|
|
||||||
designed for use with CircuitPython and may or may not work with
|
|
||||||
`MicroPython <https://micropython.org>`_.
|
|
||||||
|
|
||||||
|
|
||||||
Adafruit CircuitPython Library Bundle
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
We provide a bundle of all our libraries to ease installation of drivers and
|
|
||||||
their dependencies. The bundle is primarily geared to the Adafruit Express line
|
|
||||||
of boards which feature a relatively large external flash. With Express boards,
|
|
||||||
it's easy to copy them all onto the filesystem. However, if you don't have
|
|
||||||
enough space simply copy things over as they are needed.
|
|
||||||
|
|
||||||
- The Adafruit bundles are available on GitHub: <https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases>.
|
|
||||||
|
|
||||||
- Documentation for the bundle, which includes links to documentation for all
|
|
||||||
libraries, is available here: <https://circuitpython.readthedocs.io/projects/bundle/en/latest/>.
|
|
||||||
|
|
||||||
|
|
||||||
CircuitPython Community Library Bundle
|
|
||||||
---------------------------------------
|
|
||||||
|
|
||||||
This bundle contains non-Adafruit sponsored libraries, that are written and submitted
|
|
||||||
by members of the community.
|
|
||||||
|
|
||||||
- The Community bundles are available on GitHub: <https://github.com/adafruit/CircuitPython_Community_Bundle/releases>.
|
|
||||||
|
|
||||||
- Documentation is not available on ReadTheDocs at this time. See each library for any
|
|
||||||
included documentation.
|
|
@ -6,24 +6,49 @@ variables are commonly used to store "secrets" such as Wi-Fi passwords and API
|
|||||||
keys. This method *does not* make them secure. It only separates them from the
|
keys. This method *does not* make them secure. It only separates them from the
|
||||||
code.
|
code.
|
||||||
|
|
||||||
CircuitPython supports these by mimicking the `dotenv <https://github.com/theskumar/python-dotenv>`_
|
CircuitPython uses a file called ``settings.toml`` at the drive root (no
|
||||||
CPython library. Other languages such as Javascript, PHP and Ruby also have
|
folder) as the environment. User code can access the values from the file
|
||||||
dotenv libraries.
|
using `os.getenv()`. It is recommended to save any values used repeatedly in a
|
||||||
|
variable because `os.getenv()` will parse the ``settings.toml`` file contents
|
||||||
|
on every access.
|
||||||
|
|
||||||
These libraries store environment variables in a ``.env`` file. Here is a simple
|
CircuitPython only supports a subset of the full toml specification, see below
|
||||||
example:
|
for more details. The subset is very "Python-like", which is a key reason we
|
||||||
|
selected the format.
|
||||||
|
|
||||||
.. code-block:: bash
|
Due to technical limitations it probably also accepts some files that are
|
||||||
|
not valid TOML files; bugs of this nature are subject to change (i.e., be
|
||||||
|
fixed) without the usual deprecation period for incompatible changes.
|
||||||
|
|
||||||
KEY1='value1'
|
File format example:
|
||||||
# Comment
|
|
||||||
KEY2='value2
|
|
||||||
is multiple lines'
|
|
||||||
|
|
||||||
CircuitPython uses the ``.env`` at the drive root (no folder) as the environment.
|
.. code-block::
|
||||||
User code can access the values from the file using `os.getenv()`. It is
|
|
||||||
recommended to save any values used repeatedly in a variable because `os.getenv()`
|
str_key="Hello world" # with trailing comment
|
||||||
will parse the ``/.env`` on every access.
|
int_key = 7
|
||||||
|
unicode_key="œuvre"
|
||||||
|
unicode_key2="\\u0153uvre" # same as above
|
||||||
|
unicode_key3="\\U00000153uvre" # same as above
|
||||||
|
escape_codes="supported, including \\r\\n\\"\\\\"
|
||||||
|
# comment
|
||||||
|
[subtable]
|
||||||
|
subvalue="cannot retrieve this using getenv"
|
||||||
|
|
||||||
|
|
||||||
|
Details of the toml language subset
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
* The content is required to be in UTF-8 encoding
|
||||||
|
* The supported data types are string and integer
|
||||||
|
* Only basic strings are supported, not triple-quoted strings
|
||||||
|
* Only integers supported by strtol. (no 0o, no 0b, no underscores 1_000, 011
|
||||||
|
is 9, not 11)
|
||||||
|
* Only bare keys are supported
|
||||||
|
* Duplicate keys are not diagnosed.
|
||||||
|
* Comments are supported
|
||||||
|
* Only values from the "root table" can be retrieved
|
||||||
|
* due to technical limitations, the content of multi-line
|
||||||
|
strings can erroneously be parsed as a value.
|
||||||
|
|
||||||
CircuitPython behavior
|
CircuitPython behavior
|
||||||
----------------------
|
----------------------
|
||||||
|
@ -21,7 +21,7 @@ Full Table of Contents
|
|||||||
../shared-bindings/index.rst
|
../shared-bindings/index.rst
|
||||||
supported_ports.rst
|
supported_ports.rst
|
||||||
troubleshooting.rst
|
troubleshooting.rst
|
||||||
drivers.rst
|
libraries.rst
|
||||||
workflows
|
workflows
|
||||||
environment.rst
|
environment.rst
|
||||||
|
|
||||||
|
31
docs/libraries.rst
Normal file
31
docs/libraries.rst
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
Adafruit CircuitPython Libraries
|
||||||
|
================================
|
||||||
|
|
||||||
|
Documentation for all Adafruit-sponsored CircuitPython libraries is at:
|
||||||
|
<https://docs.circuitpython.org/projects/bundle/en/latest/drivers.html>.
|
||||||
|
|
||||||
|
|
||||||
|
CircuitPython Library Bundles
|
||||||
|
=============================
|
||||||
|
|
||||||
|
Many Python libraries, including device drivers, have been written for use with CircuitPython.
|
||||||
|
They are maintained in separate GitHub repos, one per library.
|
||||||
|
|
||||||
|
Libraries are packaged in *bundles*, which are ZIP files that are snapshots in time of a group of libraries.
|
||||||
|
|
||||||
|
Adafruit sponsors and maintains several hundred libraries, packaged in the **Adafruit Library Bundle**.
|
||||||
|
Adafruit-sponsored libraries are also available on <https://pypi.org>.
|
||||||
|
|
||||||
|
Yet other libraries are maintained by members of the CircuitPython community,
|
||||||
|
and are packaged in the **CircuitPython Community Library Bundle**.
|
||||||
|
|
||||||
|
The Adafruit bundles are available on GitHub: <https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases>.
|
||||||
|
The Community bundles are available at: <https://github.com/adafruit/CircuitPython_Community_Bundle/releases>.
|
||||||
|
|
||||||
|
More detailed information about the bundles, and download links for the latest bundles
|
||||||
|
are at <https://circuitpython.org/libraries>.
|
||||||
|
|
||||||
|
Documentation about bundle construction is at: <https://circuitpython.readthedocs.io/projects/bundle/en/latest/>.
|
||||||
|
|
||||||
|
Documentation for Community Libraries is not available on ReadTheDocs at this time. See the GitHub repository
|
||||||
|
for each library for any included documentation.
|
@ -1,323 +0,0 @@
|
|||||||
:mod:`uasyncio` --- asynchronous I/O scheduler
|
|
||||||
==============================================
|
|
||||||
|
|
||||||
.. module:: uasyncio
|
|
||||||
:synopsis: asynchronous I/O scheduler for writing concurrent code
|
|
||||||
|
|
||||||
|see_cpython_module|
|
|
||||||
`asyncio <https://docs.python.org/3.8/library/asyncio.html>`_
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
import uasyncio
|
|
||||||
|
|
||||||
async def blink(led, period_ms):
|
|
||||||
while True:
|
|
||||||
led.on()
|
|
||||||
await uasyncio.sleep_ms(5)
|
|
||||||
led.off()
|
|
||||||
await uasyncio.sleep_ms(period_ms)
|
|
||||||
|
|
||||||
async def main(led1, led2):
|
|
||||||
uasyncio.create_task(blink(led1, 700))
|
|
||||||
uasyncio.create_task(blink(led2, 400))
|
|
||||||
await uasyncio.sleep_ms(10_000)
|
|
||||||
|
|
||||||
# Running on a pyboard
|
|
||||||
from pyb import LED
|
|
||||||
uasyncio.run(main(LED(1), LED(2)))
|
|
||||||
|
|
||||||
# Running on a generic board
|
|
||||||
from machine import Pin
|
|
||||||
uasyncio.run(main(Pin(1), Pin(2)))
|
|
||||||
|
|
||||||
Core functions
|
|
||||||
--------------
|
|
||||||
|
|
||||||
.. function:: create_task(coro)
|
|
||||||
|
|
||||||
Create a new task from the given coroutine and schedule it to run.
|
|
||||||
|
|
||||||
Returns the corresponding `Task` object.
|
|
||||||
|
|
||||||
.. function:: current_task()
|
|
||||||
|
|
||||||
Return the `Task` object associated with the currently running task.
|
|
||||||
|
|
||||||
.. function:: run(coro)
|
|
||||||
|
|
||||||
Create a new task from the given coroutine and run it until it completes.
|
|
||||||
|
|
||||||
Returns the value returned by *coro*.
|
|
||||||
|
|
||||||
.. function:: sleep(t)
|
|
||||||
|
|
||||||
Sleep for *t* seconds (can be a float).
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. function:: sleep_ms(t)
|
|
||||||
|
|
||||||
Sleep for *t* milliseconds.
|
|
||||||
|
|
||||||
This is a coroutine, and a MicroPython extension.
|
|
||||||
|
|
||||||
Additional functions
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
.. function:: wait_for(awaitable, timeout)
|
|
||||||
|
|
||||||
Wait for the *awaitable* to complete, but cancel it if it takes longer
|
|
||||||
that *timeout* seconds. If *awaitable* is not a task then a task will be
|
|
||||||
created from it.
|
|
||||||
|
|
||||||
If a timeout occurs, it cancels the task and raises ``asyncio.TimeoutError``:
|
|
||||||
this should be trapped by the caller.
|
|
||||||
|
|
||||||
Returns the return value of *awaitable*.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. function:: wait_for_ms(awaitable, timeout)
|
|
||||||
|
|
||||||
Similar to `wait_for` but *timeout* is an integer in milliseconds.
|
|
||||||
|
|
||||||
This is a coroutine, and a MicroPython extension.
|
|
||||||
|
|
||||||
.. function:: gather(*awaitables, return_exceptions=False)
|
|
||||||
|
|
||||||
Run all *awaitables* concurrently. Any *awaitables* that are not tasks are
|
|
||||||
promoted to tasks.
|
|
||||||
|
|
||||||
Returns a list of return values of all *awaitables*.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
class Task
|
|
||||||
----------
|
|
||||||
|
|
||||||
.. class:: Task()
|
|
||||||
|
|
||||||
This object wraps a coroutine into a running task. Tasks can be waited on
|
|
||||||
using ``await task``, which will wait for the task to complete and return
|
|
||||||
the return value of the task.
|
|
||||||
|
|
||||||
Tasks should not be created directly, rather use `create_task` to create them.
|
|
||||||
|
|
||||||
.. method:: Task.cancel()
|
|
||||||
|
|
||||||
Cancel the task by injecting a ``CancelledError`` into it. The task may
|
|
||||||
or may not ignore this exception.
|
|
||||||
|
|
||||||
class Event
|
|
||||||
-----------
|
|
||||||
|
|
||||||
.. class:: Event()
|
|
||||||
|
|
||||||
Create a new event which can be used to synchronise tasks. Events start
|
|
||||||
in the cleared state.
|
|
||||||
|
|
||||||
.. method:: Event.is_set()
|
|
||||||
|
|
||||||
Returns ``True`` if the event is set, ``False`` otherwise.
|
|
||||||
|
|
||||||
.. method:: Event.set()
|
|
||||||
|
|
||||||
Set the event. Any tasks waiting on the event will be scheduled to run.
|
|
||||||
|
|
||||||
.. method:: Event.clear()
|
|
||||||
|
|
||||||
Clear the event.
|
|
||||||
|
|
||||||
.. method:: Event.wait()
|
|
||||||
|
|
||||||
Wait for the event to be set. If the event is already set then it returns
|
|
||||||
immediately.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
class Lock
|
|
||||||
----------
|
|
||||||
|
|
||||||
.. class:: Lock()
|
|
||||||
|
|
||||||
Create a new lock which can be used to coordinate tasks. Locks start in
|
|
||||||
the unlocked state.
|
|
||||||
|
|
||||||
In addition to the methods below, locks can be used in an ``async with`` statement.
|
|
||||||
|
|
||||||
.. method:: Lock.locked()
|
|
||||||
|
|
||||||
Returns ``True`` if the lock is locked, otherwise ``False``.
|
|
||||||
|
|
||||||
.. method:: Lock.acquire()
|
|
||||||
|
|
||||||
Wait for the lock to be in the unlocked state and then lock it in an atomic
|
|
||||||
way. Only one task can acquire the lock at any one time.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. method:: Lock.release()
|
|
||||||
|
|
||||||
Release the lock. If any tasks are waiting on the lock then the next one in the
|
|
||||||
queue is scheduled to run and the lock remains locked. Otherwise, no tasks are
|
|
||||||
waiting an the lock becomes unlocked.
|
|
||||||
|
|
||||||
TCP stream connections
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
.. function:: open_connection(host, port)
|
|
||||||
|
|
||||||
Open a TCP connection to the given *host* and *port*. The *host* address will be
|
|
||||||
resolved using `socket.getaddrinfo`, which is currently a blocking call.
|
|
||||||
|
|
||||||
Returns a pair of streams: a reader and a writer stream.
|
|
||||||
Will raise a socket-specific ``OSError`` if the host could not be resolved or if
|
|
||||||
the connection could not be made.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. function:: start_server(callback, host, port, backlog=5)
|
|
||||||
|
|
||||||
Start a TCP server on the given *host* and *port*. The *callback* will be
|
|
||||||
called with incoming, accepted connections, and be passed 2 arguments: reader
|
|
||||||
and writer streams for the connection.
|
|
||||||
|
|
||||||
Returns a `Server` object.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. class:: Stream()
|
|
||||||
|
|
||||||
This represents a TCP stream connection. To minimise code this class implements
|
|
||||||
both a reader and a writer, and both ``StreamReader`` and ``StreamWriter`` alias to
|
|
||||||
this class.
|
|
||||||
|
|
||||||
.. method:: Stream.get_extra_info(v)
|
|
||||||
|
|
||||||
Get extra information about the stream, given by *v*. The valid values for *v* are:
|
|
||||||
``peername``.
|
|
||||||
|
|
||||||
.. method:: Stream.close()
|
|
||||||
|
|
||||||
Close the stream.
|
|
||||||
|
|
||||||
.. method:: Stream.wait_closed()
|
|
||||||
|
|
||||||
Wait for the stream to close.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. method:: Stream.read(n)
|
|
||||||
|
|
||||||
Read up to *n* bytes and return them.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. method:: Stream.readinto(buf)
|
|
||||||
|
|
||||||
Read up to n bytes into *buf* with n being equal to the length of *buf*.
|
|
||||||
|
|
||||||
Return the number of bytes read into *buf*.
|
|
||||||
|
|
||||||
This is a coroutine, and a MicroPython extension.
|
|
||||||
|
|
||||||
.. method:: Stream.readexactly(n)
|
|
||||||
|
|
||||||
Read exactly *n* bytes and return them as a bytes object.
|
|
||||||
|
|
||||||
Raises an ``EOFError`` exception if the stream ends before reading *n* bytes.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. method:: Stream.readline()
|
|
||||||
|
|
||||||
Read a line and return it.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. method:: Stream.write(buf)
|
|
||||||
|
|
||||||
Accumulated *buf* to the output buffer. The data is only flushed when
|
|
||||||
`Stream.drain` is called. It is recommended to call `Stream.drain` immediately
|
|
||||||
after calling this function.
|
|
||||||
|
|
||||||
.. method:: Stream.drain()
|
|
||||||
|
|
||||||
Drain (write) all buffered output data out to the stream.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
.. class:: Server()
|
|
||||||
|
|
||||||
This represents the server class returned from `start_server`. It can be used
|
|
||||||
in an ``async with`` statement to close the server upon exit.
|
|
||||||
|
|
||||||
.. method:: Server.close()
|
|
||||||
|
|
||||||
Close the server.
|
|
||||||
|
|
||||||
.. method:: Server.wait_closed()
|
|
||||||
|
|
||||||
Wait for the server to close.
|
|
||||||
|
|
||||||
This is a coroutine.
|
|
||||||
|
|
||||||
Event Loop
|
|
||||||
----------
|
|
||||||
|
|
||||||
.. function:: get_event_loop()
|
|
||||||
|
|
||||||
Return the event loop used to schedule and run tasks. See `Loop`.
|
|
||||||
|
|
||||||
.. function:: new_event_loop()
|
|
||||||
|
|
||||||
Reset the event loop and return it.
|
|
||||||
|
|
||||||
Note: since MicroPython only has a single event loop this function just
|
|
||||||
resets the loop's state, it does not create a new one.
|
|
||||||
|
|
||||||
.. class:: Loop()
|
|
||||||
|
|
||||||
This represents the object which schedules and runs tasks. It cannot be
|
|
||||||
created, use `get_event_loop` instead.
|
|
||||||
|
|
||||||
.. method:: Loop.create_task(coro)
|
|
||||||
|
|
||||||
Create a task from the given *coro* and return the new `Task` object.
|
|
||||||
|
|
||||||
.. method:: Loop.run_forever()
|
|
||||||
|
|
||||||
Run the event loop until `stop()` is called.
|
|
||||||
|
|
||||||
.. method:: Loop.run_until_complete(awaitable)
|
|
||||||
|
|
||||||
Run the given *awaitable* until it completes. If *awaitable* is not a task
|
|
||||||
then it will be promoted to one.
|
|
||||||
|
|
||||||
.. method:: Loop.stop()
|
|
||||||
|
|
||||||
Stop the event loop.
|
|
||||||
|
|
||||||
.. method:: Loop.close()
|
|
||||||
|
|
||||||
Close the event loop.
|
|
||||||
|
|
||||||
.. method:: Loop.set_exception_handler(handler)
|
|
||||||
|
|
||||||
Set the exception handler to call when a Task raises an exception that is not
|
|
||||||
caught. The *handler* should accept two arguments: ``(loop, context)``.
|
|
||||||
|
|
||||||
.. method:: Loop.get_exception_handler()
|
|
||||||
|
|
||||||
Get the current exception handler. Returns the handler, or ``None`` if no
|
|
||||||
custom handler is set.
|
|
||||||
|
|
||||||
.. method:: Loop.default_exception_handler(context)
|
|
||||||
|
|
||||||
The default exception handler that is called.
|
|
||||||
|
|
||||||
.. method:: Loop.call_exception_handler(context)
|
|
||||||
|
|
||||||
Call the current exception handler. The argument *context* is passed through and
|
|
||||||
is a dictionary containing keys: ``'message'``, ``'exception'``, ``'future'``.
|
|
@ -35,7 +35,6 @@ These libraries are not currently enabled in any CircuitPython build, but may be
|
|||||||
json.rst
|
json.rst
|
||||||
re.rst
|
re.rst
|
||||||
sys.rst
|
sys.rst
|
||||||
asyncio.rst
|
|
||||||
ctypes.rst
|
ctypes.rst
|
||||||
select.rst
|
select.rst
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ connection, the central device can discover two default services. One for file t
|
|||||||
CircuitPython specifically that includes serial characteristics.
|
CircuitPython specifically that includes serial characteristics.
|
||||||
|
|
||||||
To change the default BLE advertising name without (or before) running user code, the desired name
|
To change the default BLE advertising name without (or before) running user code, the desired name
|
||||||
can be put in the `/.env` file. The key is `CIRCUITPY_BLE_NAME`. It's limited to approximately
|
can be put in the `settings.toml` file. The key is `CIRCUITPY_BLE_NAME`. It's limited to approximately
|
||||||
30 characters depending on the port's settings and will be truncated if longer.
|
30 characters depending on the port's settings and will be truncated if longer.
|
||||||
|
|
||||||
### File Transfer API
|
### File Transfer API
|
||||||
@ -69,21 +69,21 @@ Read-only characteristic that returns the UTF-8 encoded version string.
|
|||||||
|
|
||||||
## Web
|
## Web
|
||||||
|
|
||||||
The web workflow is depends on adding Wi-Fi credentials into the `/.env` file. The keys are
|
The web workflow is depends on adding Wi-Fi credentials into the `settings.toml` file. The keys are
|
||||||
`CIRCUITPY_WIFI_SSID` and `CIRCUITPY_WIFI_PASSWORD`. Once these are defined, CircuitPython will
|
`CIRCUITPY_WIFI_SSID` and `CIRCUITPY_WIFI_PASSWORD`. Once these are defined, CircuitPython will
|
||||||
automatically connect to the network and start the webserver used for the workflow. The webserver
|
automatically connect to the network and start the webserver used for the workflow. The webserver
|
||||||
is on port 80 unless overridden by `CIRCUITPY_WEB_API_PORT`. It also enables MDNS.
|
is on port 80 unless overridden by `CIRCUITPY_WEB_API_PORT`. It also enables MDNS.
|
||||||
|
|
||||||
Here is an example `/.env`:
|
Here is an example `/settings.toml`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# To auto-connect to Wi-Fi
|
# To auto-connect to Wi-Fi
|
||||||
CIRCUITPY_WIFI_SSID='scottswifi'
|
CIRCUITPY_WIFI_SSID="scottswifi"
|
||||||
CIRCUITPY_WIFI_PASSWORD='secretpassword'
|
CIRCUITPY_WIFI_PASSWORD="secretpassword"
|
||||||
|
|
||||||
# To enable modifying files from the web. Change this too!
|
# To enable modifying files from the web. Change this too!
|
||||||
# Leave the User field blank in the browser.
|
# Leave the User field blank in the browser.
|
||||||
CIRCUITPY_WEB_API_PASSWORD='passw0rd'
|
CIRCUITPY_WEB_API_PASSWORD="passw0rd"
|
||||||
|
|
||||||
CIRCUITPY_WEB_API_PORT=80
|
CIRCUITPY_WEB_API_PORT=80
|
||||||
```
|
```
|
||||||
@ -124,7 +124,7 @@ All file system related APIs are protected by HTTP basic authentication. It is *
|
|||||||
hopefully prevent some griefing in shared settings. The password is sent unencrypted so do not reuse
|
hopefully prevent some griefing in shared settings. The password is sent unencrypted so do not reuse
|
||||||
a password with something important. The user field is left blank.
|
a password with something important. The user field is left blank.
|
||||||
|
|
||||||
The password is taken from `/.env` with the key `CIRCUITPY_WEB_API_PASSWORD`. If this is unset, the
|
The password is taken from `settings.toml` with the key `CIRCUITPY_WEB_API_PASSWORD`. If this is unset, the
|
||||||
server will respond with `403 Forbidden`. When a password is set, but not provided in a request, it
|
server will respond with `403 Forbidden`. When a password is set, but not provided in a request, it
|
||||||
will respond `401 Unauthorized`.
|
will respond `401 Unauthorized`.
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 25a825e41c26cfcee018b762416741d0d63aeabf
|
Subproject commit f2dd2230c4fdf1aa5c7a160782efdde18e8204bb
|
@ -429,6 +429,18 @@ STATIC mp_obj_t vfs_fat_utime(mp_obj_t vfs_in, mp_obj_t path_in, mp_obj_t times_
|
|||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_3(fat_vfs_utime_obj, vfs_fat_utime);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_3(fat_vfs_utime_obj, vfs_fat_utime);
|
||||||
|
|
||||||
|
STATIC mp_obj_t vfs_fat_getreadonly(mp_obj_t self_in) {
|
||||||
|
fs_user_mount_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
return mp_obj_new_bool(!filesystem_is_writable_by_python(self));
|
||||||
|
}
|
||||||
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(fat_vfs_getreadonly_obj, vfs_fat_getreadonly);
|
||||||
|
STATIC const mp_obj_property_t fat_vfs_readonly_obj = {
|
||||||
|
.base.type = &mp_type_property,
|
||||||
|
.proxy = {(mp_obj_t)&fat_vfs_getreadonly_obj,
|
||||||
|
MP_ROM_NONE,
|
||||||
|
MP_ROM_NONE},
|
||||||
|
};
|
||||||
|
|
||||||
#if MICROPY_FATFS_USE_LABEL
|
#if MICROPY_FATFS_USE_LABEL
|
||||||
STATIC mp_obj_t vfs_fat_getlabel(mp_obj_t self_in) {
|
STATIC mp_obj_t vfs_fat_getlabel(mp_obj_t self_in) {
|
||||||
fs_user_mount_t *self = MP_OBJ_TO_PTR(self_in);
|
fs_user_mount_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
@ -481,6 +493,7 @@ STATIC const mp_rom_map_elem_t fat_vfs_locals_dict_table[] = {
|
|||||||
{ MP_ROM_QSTR(MP_QSTR_mount), MP_ROM_PTR(&vfs_fat_mount_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_mount), MP_ROM_PTR(&vfs_fat_mount_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_umount), MP_ROM_PTR(&fat_vfs_umount_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_umount), MP_ROM_PTR(&fat_vfs_umount_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_utime), MP_ROM_PTR(&fat_vfs_utime_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_utime), MP_ROM_PTR(&fat_vfs_utime_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_readonly), MP_ROM_PTR(&fat_vfs_readonly_obj) },
|
||||||
#if MICROPY_FATFS_USE_LABEL
|
#if MICROPY_FATFS_USE_LABEL
|
||||||
{ MP_ROM_QSTR(MP_QSTR_label), MP_ROM_PTR(&fat_vfs_label_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_label), MP_ROM_PTR(&fat_vfs_label_obj) },
|
||||||
#endif
|
#endif
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit ba05423ed9aae09ce293603b519a4ac644ef0dab
|
Subproject commit 9ddd59650598b7a0641d70aabcc8aab71799cb93
|
@ -1 +1 @@
|
|||||||
Subproject commit 4fd499e39720f8ce970cceeb97c2a85c485f7335
|
Subproject commit e07e1853d7e995b9797a064c098bccc5c384632e
|
@ -1 +1 @@
|
|||||||
Subproject commit 4a4619a524918f2705c05ca4959385937afa9a7c
|
Subproject commit ab0ffa938dfa7eb1fd7260353a7a4e28f55e537a
|
@ -1 +1 @@
|
|||||||
Subproject commit 726270f5103d9d94810eb8b52041b7521afafc5c
|
Subproject commit e6a9a0140ed44ef5f15d8040fce35b5319c1f216
|
@ -1 +1 @@
|
|||||||
Subproject commit 656be4d79196b5f25ab9ebca731d448c5b3bdc17
|
Subproject commit cf2b173d0fc3ac2cd961754c6adf8f614a1c7c39
|
@ -1 +1 @@
|
|||||||
Subproject commit 6cf9f3cf32e0c176c861de6356813ea4d08034d6
|
Subproject commit 1590d81f7d1474b25aed6a0cb793c7e6dc7634ec
|
@ -1 +1 @@
|
|||||||
Subproject commit 992b601e2469f30e95ec35c9859b4aa2cd917504
|
Subproject commit 340c62ef6ce867b3924d166afc3d2a171680f799
|
@ -1 +1 @@
|
|||||||
Subproject commit 794488d1de3d17d1a08887c4a651cfac2c5a1524
|
Subproject commit 8e0f081a0fcc94053b8ef480a916b10855a3c0d5
|
@ -1 +1 @@
|
|||||||
Subproject commit 1919916dcf57e0879832b9c274c5fb77712d7775
|
Subproject commit 38bd02f014403954ab52154e3877e502d83862dc
|
@ -1 +1 @@
|
|||||||
Subproject commit 5b4703428fc299ac268d08350c885122b2af1e75
|
Subproject commit 61ca58788aabd53558e10c32064a1304aa7454f2
|
@ -1 +1 @@
|
|||||||
Subproject commit c8e82b96c68041a11a52f3053d0d2733ae2d1a49
|
Subproject commit d689ca77c67806484037e00110c669cf55846b6e
|
@ -1 +1 @@
|
|||||||
Subproject commit b6891e734183f978e7b3d0a363140e98635c0a04
|
Subproject commit e38bf1f9cf1e8faeb7d15a1d10674fb2c0a81e72
|
@ -1 +1 @@
|
|||||||
Subproject commit 31c819f377cf71f61cfb84eae159f1f948980db7
|
Subproject commit f26bead58d3c4036eced586d275396816e92e80a
|
@ -1 +1 @@
|
|||||||
Subproject commit 1064fdee5a1421f528af452be5e45ae95ef2b89a
|
Subproject commit 9516aa97e9216eac2b229fbb7dac34fa60c347c4
|
@ -1 +1 @@
|
|||||||
Subproject commit 7eeea1aaf6bb5fa0deb080a1dc1aa3cd103f9aad
|
Subproject commit 759c5c348878932adc5fcc9e4f3b3f570b43e17f
|
@ -1 +1 @@
|
|||||||
Subproject commit cad34af5267aca3665fdaf1ea5a0eee921d13f06
|
Subproject commit 74a1c261103cda43172053ff2370777255b9bf8d
|
@ -1 +1 @@
|
|||||||
Subproject commit df4c73a5e719f17fae0309e811ff17627cd0f268
|
Subproject commit c46c59e3004817c708c78c59d247b02161c6bf06
|
@ -1 +1 @@
|
|||||||
Subproject commit f611d5e31c9735a3c3ac43185e35dcd5f659e3aa
|
Subproject commit 46a49205f3f14546273dd1267e66cad82f03986c
|
@ -1 +1 @@
|
|||||||
Subproject commit 317f4bdb799afa59b164def4ea0610f57db9922e
|
Subproject commit 203d0b1489cb90a39f8a780570287f1a5bd610a0
|
@ -1 +1 @@
|
|||||||
Subproject commit bb2fc8c157ee44869cde4cbc1ab20e6f31ac727f
|
Subproject commit eb17bffa757dc8c0a53fe9e61c45246c06418099
|
@ -1 +1 @@
|
|||||||
Subproject commit 9ff56ce53f05e23ff678965ba54af89b24b1199a
|
Subproject commit e23c4871456cdf0ef1bfb59d1c2f6e38b7b640ee
|
@ -1 +1 @@
|
|||||||
Subproject commit 0a8fcbfc92060eb298ea52d5e88587b37347a0be
|
Subproject commit eac33b430b0cbe1f6f583000f6b29f75bfe8507e
|
@ -1 +1 @@
|
|||||||
Subproject commit 7832bbb5449d55d8c7b731e4ff7490b801e94a9e
|
Subproject commit 2634ca0163020bebec300fcca6e0b5afcdc655b8
|
@ -1 +1 @@
|
|||||||
Subproject commit 565fed515138f962c4bcce0ee756d32e708a151a
|
Subproject commit b6d9f852f50b489615f3f357f9758d0073335334
|
@ -1 +1 @@
|
|||||||
Subproject commit fbdb77d7127e7d6a8d3574440b0f790c94a28cf8
|
Subproject commit 596cc896e5c8815caa2a6f405560833193848149
|
@ -1 +1 @@
|
|||||||
Subproject commit 6234787515e2f0ece40b6408722ff0b42824038e
|
Subproject commit d4ff0388f3e3af2745864f2c3e5926f500673a40
|
@ -257,6 +257,11 @@
|
|||||||
#define GET_FATTIME() get_fattime()
|
#define GET_FATTIME() get_fattime()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if FF_FS_MAKE_VOLID == 1
|
||||||
|
#define MAKE_VOLID(x) (make_volid())
|
||||||
|
#else
|
||||||
|
#define MAKE_VOLID(x) (GET_FATTIME())
|
||||||
|
#endif
|
||||||
|
|
||||||
/* File lock controls */
|
/* File lock controls */
|
||||||
#if FF_FS_LOCK != 0
|
#if FF_FS_LOCK != 0
|
||||||
@ -5421,6 +5426,7 @@ FRESULT f_mkfs (
|
|||||||
DWORD tbl[3];
|
DWORD tbl[3];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
DWORD volid = MAKE_VOLID();
|
||||||
|
|
||||||
/* Check mounted drive and clear work area */
|
/* Check mounted drive and clear work area */
|
||||||
fs->fs_type = 0; /* Clear mounted volume */
|
fs->fs_type = 0; /* Clear mounted volume */
|
||||||
@ -5622,7 +5628,7 @@ FRESULT f_mkfs (
|
|||||||
st_dword(buf + BPB_DataOfsEx, b_data - b_vol); /* Data offset [sector] */
|
st_dword(buf + BPB_DataOfsEx, b_data - b_vol); /* Data offset [sector] */
|
||||||
st_dword(buf + BPB_NumClusEx, n_clst); /* Number of clusters */
|
st_dword(buf + BPB_NumClusEx, n_clst); /* Number of clusters */
|
||||||
st_dword(buf + BPB_RootClusEx, 2 + tbl[0] + tbl[1]); /* Root dir cluster # */
|
st_dword(buf + BPB_RootClusEx, 2 + tbl[0] + tbl[1]); /* Root dir cluster # */
|
||||||
st_dword(buf + BPB_VolIDEx, GET_FATTIME()); /* VSN */
|
st_dword(buf + BPB_VolIDEx, volid); /* VSN */
|
||||||
st_word(buf + BPB_FSVerEx, 0x100); /* Filesystem version (1.00) */
|
st_word(buf + BPB_FSVerEx, 0x100); /* Filesystem version (1.00) */
|
||||||
for (buf[BPB_BytsPerSecEx] = 0, i = ss; i >>= 1; buf[BPB_BytsPerSecEx]++) ; /* Log2 of sector size [byte] */
|
for (buf[BPB_BytsPerSecEx] = 0, i = ss; i >>= 1; buf[BPB_BytsPerSecEx]++) ; /* Log2 of sector size [byte] */
|
||||||
for (buf[BPB_SecPerClusEx] = 0, i = au; i >>= 1; buf[BPB_SecPerClusEx]++) ; /* Log2 of cluster size [sector] */
|
for (buf[BPB_SecPerClusEx] = 0, i = au; i >>= 1; buf[BPB_SecPerClusEx]++) ; /* Log2 of cluster size [sector] */
|
||||||
@ -5758,7 +5764,7 @@ FRESULT f_mkfs (
|
|||||||
st_dword(buf + BPB_HiddSec, b_vol); /* Volume offset in the physical drive [sector] */
|
st_dword(buf + BPB_HiddSec, b_vol); /* Volume offset in the physical drive [sector] */
|
||||||
#if FF_MKFS_FAT32
|
#if FF_MKFS_FAT32
|
||||||
if (fmt == FS_FAT32) {
|
if (fmt == FS_FAT32) {
|
||||||
st_dword(buf + BS_VolID32, GET_FATTIME()); /* VSN */
|
st_dword(buf + BS_VolID32, volid); /* VSN */
|
||||||
st_dword(buf + BPB_FATSz32, sz_fat); /* FAT size [sector] */
|
st_dword(buf + BPB_FATSz32, sz_fat); /* FAT size [sector] */
|
||||||
st_dword(buf + BPB_RootClus32, 2); /* Root directory cluster # (2) */
|
st_dword(buf + BPB_RootClus32, 2); /* Root directory cluster # (2) */
|
||||||
st_word(buf + BPB_FSInfo32, 1); /* Offset of FSINFO sector (VBR + 1) */
|
st_word(buf + BPB_FSInfo32, 1); /* Offset of FSINFO sector (VBR + 1) */
|
||||||
@ -5769,7 +5775,7 @@ FRESULT f_mkfs (
|
|||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
st_dword(buf + BS_VolID, GET_FATTIME()); /* VSN */
|
st_dword(buf + BS_VolID, volid); /* VSN */
|
||||||
st_word(buf + BPB_FATSz16, (WORD)sz_fat); /* FAT size [sector] */
|
st_word(buf + BPB_FATSz16, (WORD)sz_fat); /* FAT size [sector] */
|
||||||
buf[BS_DrvNum] = 0x80; /* Drive number (for int13) */
|
buf[BS_DrvNum] = 0x80; /* Drive number (for int13) */
|
||||||
buf[BS_BootSig] = 0x29; /* Extended boot signature */
|
buf[BS_BootSig] = 0x29; /* Extended boot signature */
|
||||||
|
@ -334,6 +334,10 @@ FRESULT f_setcp (WORD cp); /* Set curre
|
|||||||
DWORD get_fattime (void);
|
DWORD get_fattime (void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if FF_FS_MAKE_VOLID
|
||||||
|
DWORD make_volid (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* LFN support functions */
|
/* LFN support functions */
|
||||||
#if FF_USE_LFN >= 1 /* Code conversion (defined in unicode.c) */
|
#if FF_USE_LFN >= 1 /* Code conversion (defined in unicode.c) */
|
||||||
WCHAR ff_oem2uni (WCHAR oem, WORD cp); /* OEM code to Unicode conversion */
|
WCHAR ff_oem2uni (WCHAR oem, WORD cp); /* OEM code to Unicode conversion */
|
||||||
|
@ -373,6 +373,10 @@
|
|||||||
/ SemaphoreHandle_t and etc. A header file for O/S definitions needs to be
|
/ SemaphoreHandle_t and etc. A header file for O/S definitions needs to be
|
||||||
/ included somewhere in the scope of ff.h. */
|
/ included somewhere in the scope of ff.h. */
|
||||||
|
|
||||||
|
#ifndef FF_FS_MAKE_VOLID
|
||||||
|
#define FF_FS_MAKE_VOLID (0)
|
||||||
|
#endif
|
||||||
|
/* The option FF_FS_MAKE_VOLID enables the use of a function to return a 32-bit volume identifier.
|
||||||
|
/ If it is disabled, a Volume ID based on the current time is used. */
|
||||||
|
|
||||||
/*--- End of configuration options ---*/
|
/*--- End of configuration options ---*/
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit cc93ff18c3a20b25396cb2babaee8ed33bb79528
|
Subproject commit d0a07e14adcd71a7c22bcceb16c55aadb5e0d104
|
480
locale/ID.po
480
locale/ID.po
File diff suppressed because it is too large
Load Diff
436
locale/circuitpython.pot
Executable file → Normal file
436
locale/circuitpython.pot
Executable file → Normal file
@ -31,8 +31,20 @@ msgstr ""
|
|||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Please file an issue with the contents of your CIRCUITPY drive at \n"
|
"Please file an issue with your program at https://github.com/adafruit/"
|
||||||
"https://github.com/adafruit/circuitpython/issues\n"
|
"circuitpython/issues."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"Press reset to exit safe mode.\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"You are in safe mode because:\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/obj.c
|
#: py/obj.c
|
||||||
@ -65,6 +77,11 @@ msgstr ""
|
|||||||
msgid "%02X"
|
msgid "%02X"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
#, c-format
|
||||||
|
msgid "%S"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -80,7 +97,7 @@ msgstr ""
|
|||||||
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
||||||
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
||||||
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
||||||
#: ports/stm/common-hal/rtc/RTC.c
|
#: ports/stm/common-hal/canio/Listener.c ports/stm/common-hal/rtc/RTC.c
|
||||||
msgid "%q"
|
msgid "%q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -100,13 +117,18 @@ msgstr ""
|
|||||||
msgid "%q failure: %d"
|
msgid "%q failure: %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/argcheck.c
|
||||||
|
msgid "%q in %q must be of type %q, not %q"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/espulp/ULP.c
|
||||||
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
||||||
#: shared-bindings/digitalio/DigitalInOut.c
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
#: shared-bindings/microcontroller/Pin.c
|
||||||
msgid "%q in use"
|
msgid "%q in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/obj.c py/objstr.c py/objstrunicode.c
|
#: py/objstr.c py/objstrunicode.c
|
||||||
msgid "%q index out of range"
|
msgid "%q index out of range"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -118,7 +140,11 @@ msgstr ""
|
|||||||
msgid "%q is %q"
|
msgid "%q is %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "%q is read-only for this board"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/argcheck.c shared-bindings/usb_hid/Device.c
|
||||||
msgid "%q length must be %d"
|
msgid "%q length must be %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -134,10 +160,6 @@ msgstr ""
|
|||||||
msgid "%q length must be >= %d"
|
msgid "%q length must be >= %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/busio/I2C.c
|
|
||||||
msgid "%q length must be >= 1"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: py/argcheck.c
|
||||||
msgid "%q must be %d"
|
msgid "%q must be %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -159,24 +181,20 @@ msgid "%q must be >= %d"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/analogbufio/BufferedIn.c
|
#: shared-bindings/analogbufio/BufferedIn.c
|
||||||
|
msgid "%q must be a bytearray or array of type 'H' or 'B'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/audiocore/RawSample.c
|
#: shared-bindings/audiocore/RawSample.c
|
||||||
msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'"
|
msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
|
||||||
msgid "%q must be a string"
|
#: shared-bindings/canio/CAN.c shared-bindings/digitalio/Pull.c
|
||||||
|
msgid "%q must be of type %q or %q, not %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: py/argcheck.c py/obj.c py/objstrunicode.c
|
||||||
msgid "%q must be an int"
|
msgid "%q must be of type %q, not %q"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/argcheck.c
|
|
||||||
msgid "%q must be of type %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/digitalio/Pull.c
|
|
||||||
msgid "%q must be of type %q or None"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/busio/UART.c
|
#: ports/atmel-samd/common-hal/busio/UART.c
|
||||||
@ -189,7 +207,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
|
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
|
||||||
#: ports/cxd56/common-hal/pulseio/PulseIn.c
|
#: ports/cxd56/common-hal/pulseio/PulseIn.c
|
||||||
#: ports/espressif/common-hal/coproc/Coproc.c
|
|
||||||
#: ports/nrf/common-hal/pulseio/PulseIn.c
|
#: ports/nrf/common-hal/pulseio/PulseIn.c
|
||||||
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
||||||
#: ports/stm/common-hal/pulseio/PulseIn.c py/argcheck.c
|
#: ports/stm/common-hal/pulseio/PulseIn.c py/argcheck.c
|
||||||
@ -201,8 +218,8 @@ msgstr ""
|
|||||||
msgid "%q pin invalid"
|
msgid "%q pin invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/usb_hid/Device.c
|
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
|
||||||
msgid "%q with a report ID of 0 must be of length 1"
|
msgid "%q step cannot be zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/bc.c py/objnamedtuple.c
|
#: py/bc.c py/objnamedtuple.c
|
||||||
@ -302,7 +319,7 @@ msgstr ""
|
|||||||
msgid "'%s' object doesn't support item deletion"
|
msgid "'%s' object doesn't support item deletion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/raspberrypi/common-hal/wifi/Radio.c py/runtime.c
|
#: py/runtime.c
|
||||||
msgid "'%s' object has no attribute '%q'"
|
msgid "'%s' object has no attribute '%q'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -402,6 +419,10 @@ msgstr ""
|
|||||||
msgid "Address must be %d bytes long"
|
msgid "Address must be %d bytes long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/memorymap/AddressRange.c
|
||||||
|
msgid "Address range not allowed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/canio/CAN.c
|
#: ports/espressif/common-hal/canio/CAN.c
|
||||||
msgid "All CAN peripherals are in use"
|
msgid "All CAN peripherals are in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -429,7 +450,6 @@ msgid "All SPI peripherals are in use"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
|
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
|
||||||
#: ports/raspberrypi/common-hal/busio/UART.c
|
|
||||||
msgid "All UART peripherals are in use"
|
msgid "All UART peripherals are in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -482,7 +502,7 @@ msgstr ""
|
|||||||
msgid "Already have all-matches listener"
|
msgid "Already have all-matches listener"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/coproc/__init__.c
|
#: ports/espressif/common-hal/espulp/ULP.c
|
||||||
#: shared-module/memorymonitor/AllocationAlarm.c
|
#: shared-module/memorymonitor/AllocationAlarm.c
|
||||||
#: shared-module/memorymonitor/AllocationSize.c
|
#: shared-module/memorymonitor/AllocationSize.c
|
||||||
msgid "Already running"
|
msgid "Already running"
|
||||||
@ -493,6 +513,11 @@ msgstr ""
|
|||||||
msgid "Already scanning for wifi networks"
|
msgid "Already scanning for wifi networks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
#, c-format
|
||||||
|
msgid "An error occurred while retrieving '%s':\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/stm/common-hal/audiopwmio/PWMAudioOut.c
|
#: ports/stm/common-hal/audiopwmio/PWMAudioOut.c
|
||||||
msgid "Another PWMAudioOut is already active"
|
msgid "Another PWMAudioOut is already active"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -506,24 +531,16 @@ msgstr ""
|
|||||||
msgid "Array must contain halfwords (type 'H')"
|
msgid "Array must contain halfwords (type 'H')"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/alarm/SleepMemory.c shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
msgid "Array values should be single bytes."
|
msgid "Array values should be single bytes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
|
||||||
msgid "At most %d %q may be specified (not %d)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-module/memorymonitor/AllocationAlarm.c
|
#: shared-module/memorymonitor/AllocationAlarm.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Attempt to allocate %d blocks"
|
msgid "Attempt to allocate %d blocks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Attempted heap allocation when VM not running."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/raspberrypi/audio_dma.c
|
#: ports/raspberrypi/audio_dma.c
|
||||||
msgid "Audio conversion not implemented"
|
msgid "Audio conversion not implemented"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -572,20 +589,13 @@ msgid "Bitmap size and bits per value must match"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid "Boot device must be first device (interface #0)."
|
msgid "Boot device must be first (interface #0)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/mimxrt10xx/common-hal/busio/UART.c
|
#: ports/mimxrt10xx/common-hal/busio/UART.c
|
||||||
msgid "Both RX and TX required for flow control"
|
msgid "Both RX and TX required for flow control"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h
|
|
||||||
#: ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h
|
|
||||||
#: ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h
|
|
||||||
#: ports/atmel-samd/boards/meowmeow/mpconfigboard.h
|
|
||||||
msgid "Both buttons were pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
|
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
|
||||||
msgid "Both pins must support hardware interrupts"
|
msgid "Both pins must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -651,11 +661,6 @@ msgstr ""
|
|||||||
msgid "Bus pin %d is already in use"
|
msgid "Bus pin %d is already in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h
|
|
||||||
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
|
|
||||||
msgid "Button A was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/_bleio/UUID.c
|
#: shared-bindings/_bleio/UUID.c
|
||||||
msgid "Byte buffer must be 16 bytes."
|
msgid "Byte buffer must be 16 bytes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -786,10 +791,6 @@ msgstr ""
|
|||||||
msgid "CircuitPython core code crashed hard. Whoops!\n"
|
msgid "CircuitPython core code crashed hard. Whoops!\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "CircuitPython was unable to allocate the heap."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-module/bitbangio/I2C.c
|
#: shared-module/bitbangio/I2C.c
|
||||||
msgid "Clock stretch too long"
|
msgid "Clock stretch too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -828,10 +829,6 @@ msgstr ""
|
|||||||
msgid "Couldn't allocate decoder"
|
msgid "Couldn't allocate decoder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Crash into the HardFault_Handler."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/stm/common-hal/analogio/AnalogOut.c
|
#: ports/stm/common-hal/analogio/AnalogOut.c
|
||||||
msgid "DAC Channel Init Error"
|
msgid "DAC Channel Init Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -894,6 +891,10 @@ msgstr ""
|
|||||||
msgid "Drive mode not used when direction is input."
|
msgid "Drive mode not used when direction is input."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/obj.c
|
||||||
|
msgid "During handling of the above exception, another exception occurred:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/aesio/aes.c
|
#: shared-bindings/aesio/aes.c
|
||||||
msgid "ECB only operates on 16 bytes at a time"
|
msgid "ECB only operates on 16 bytes at a time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -919,24 +920,16 @@ msgstr ""
|
|||||||
msgid "Error in regex"
|
msgid "Error in regex"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Error in safemode.py."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c
|
#: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c
|
||||||
msgid "Error: Failure to bind"
|
msgid "Error: Failure to bind"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
|
|
||||||
#: shared-bindings/alarm/__init__.c shared-bindings/alarm/coproc/CoprocAlarm.c
|
|
||||||
#: shared-bindings/busio/SPI.c shared-bindings/coproc/Coproc.c
|
|
||||||
#: shared-bindings/coproc/__init__.c shared-bindings/microcontroller/Pin.c
|
|
||||||
#: shared-bindings/neopixel_write/__init__.c
|
|
||||||
msgid "Expected a %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/raspberrypi/bindings/cyw43/__init__.c
|
|
||||||
msgid "Expected a %q or %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/alarm/__init__.c
|
#: shared-bindings/alarm/__init__.c
|
||||||
msgid "Expected an %q"
|
msgid "Expected a kind of %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/_bleio/Adapter.c
|
#: ports/espressif/common-hal/_bleio/Adapter.c
|
||||||
@ -1004,13 +997,17 @@ msgid "Failed to write internal flash."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid "Fatal error."
|
msgid "Fault detected by hardware."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/moduerrno.c
|
#: py/moduerrno.c
|
||||||
msgid "File exists"
|
msgid "File exists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
msgid "File not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/canio/Listener.c
|
#: ports/atmel-samd/common-hal/canio/Listener.c
|
||||||
#: ports/espressif/common-hal/canio/Listener.c
|
#: ports/espressif/common-hal/canio/Listener.c
|
||||||
#: ports/stm/common-hal/canio/Listener.c
|
#: ports/stm/common-hal/canio/Listener.c
|
||||||
@ -1025,7 +1022,6 @@ msgstr ""
|
|||||||
msgid "Firmware is invalid"
|
msgid "Firmware is invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/coproc/Coproc.c
|
|
||||||
#: ports/espressif/common-hal/dualbank/__init__.c
|
#: ports/espressif/common-hal/dualbank/__init__.c
|
||||||
msgid "Firmware is too big"
|
msgid "Firmware is too big"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1067,6 +1063,8 @@ msgstr ""
|
|||||||
#: shared-bindings/displayio/Display.c
|
#: shared-bindings/displayio/Display.c
|
||||||
#: shared-bindings/displayio/EPaperDisplay.c
|
#: shared-bindings/displayio/EPaperDisplay.c
|
||||||
#: shared-bindings/framebufferio/FramebufferDisplay.c
|
#: shared-bindings/framebufferio/FramebufferDisplay.c
|
||||||
|
#: shared-module/displayio/Display.c
|
||||||
|
#: shared-module/framebufferio/FramebufferDisplay.c
|
||||||
msgid "Group already used"
|
msgid "Group already used"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1087,6 +1085,15 @@ msgstr ""
|
|||||||
msgid "Hardware in use, try alternative pins"
|
msgid "Hardware in use, try alternative pins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Heap allocation when VM not running."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid ""
|
||||||
|
"Heap was corrupted because the stack was too small. Increase stack size."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: extmod/vfs_posix_file.c py/objstringio.c
|
#: extmod/vfs_posix_file.c py/objstringio.c
|
||||||
msgid "I/O operation on closed file"
|
msgid "I/O operation on closed file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1104,11 +1111,6 @@ msgstr ""
|
|||||||
msgid "I2SOut not available"
|
msgid "I2SOut not available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/aesio/aes.c
|
|
||||||
#, c-format
|
|
||||||
msgid "IV must be %d bytes long"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/raspberrypi/bindings/rp2pio/StateMachine.c
|
#: ports/raspberrypi/bindings/rp2pio/StateMachine.c
|
||||||
msgid "In-buffer elements must be <= 4 bytes long"
|
msgid "In-buffer elements must be <= 4 bytes long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1193,6 +1195,7 @@ msgid "Internal define error"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1205,6 +1208,10 @@ msgstr ""
|
|||||||
msgid "Internal watchdog timer expired."
|
msgid "Internal watchdog timer expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Interrupt error."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
|
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
|
||||||
msgid "Invalid %q"
|
msgid "Invalid %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1239,6 +1246,11 @@ msgstr ""
|
|||||||
msgid "Invalid bits per value"
|
msgid "Invalid bits per value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
#, c-format
|
||||||
|
msgid "Invalid byte %.*s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/imagecapture/ParallelImageCapture.c
|
#: ports/atmel-samd/common-hal/imagecapture/ParallelImageCapture.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invalid data_pins[%d]"
|
msgid "Invalid data_pins[%d]"
|
||||||
@ -1248,18 +1260,10 @@ msgstr ""
|
|||||||
msgid "Invalid format chunk size"
|
msgid "Invalid format chunk size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Invalid memory access."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/wifi/Radio.c
|
#: ports/espressif/common-hal/wifi/Radio.c
|
||||||
msgid "Invalid multicast MAC address"
|
msgid "Invalid multicast MAC address"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/busio/UART.c
|
|
||||||
msgid "Invalid pins"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
||||||
msgid "Invalid size"
|
msgid "Invalid size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1273,10 +1277,18 @@ msgstr ""
|
|||||||
msgid "Invalid state"
|
msgid "Invalid state"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
msgid "Invalid unicode escape"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/aesio/aes.c
|
#: shared-bindings/aesio/aes.c
|
||||||
msgid "Key must be 16, 24, or 32 bytes long"
|
msgid "Key must be 16, 24, or 32 bytes long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
msgid "Key not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/is31fl3741/FrameBuffer.c
|
#: shared-module/is31fl3741/FrameBuffer.c
|
||||||
msgid "LED mappings must match display size"
|
msgid "LED mappings must match display size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1383,6 +1395,10 @@ msgstr ""
|
|||||||
msgid "NVS Error"
|
msgid "NVS Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/socketpool/SocketPool.c
|
||||||
|
msgid "Name or service not known"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/qstr.c
|
#: py/qstr.c
|
||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1497,11 +1513,6 @@ msgstr ""
|
|||||||
msgid "No long integer support"
|
msgid "No long integer support"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/usb_hid/__init__.c
|
|
||||||
#, c-format
|
|
||||||
msgid "No more than %d HID devices allowed"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/wifi/Radio.c
|
#: shared-bindings/wifi/Radio.c
|
||||||
msgid "No network with that ssid"
|
msgid "No network with that ssid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1537,10 +1548,6 @@ msgstr ""
|
|||||||
msgid "No timer available"
|
msgid "No timer available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Nordic system firmware failure assertion."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||||
msgid "Nordic system firmware out of memory"
|
msgid "Nordic system firmware out of memory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1560,10 +1567,6 @@ msgstr ""
|
|||||||
msgid "Not playing"
|
msgid "Not playing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_bleio/__init__.c
|
|
||||||
msgid "Not settable"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Number of data_pins must be 8 or 16, not %d"
|
msgid "Number of data_pins must be 8 or 16, not %d"
|
||||||
@ -1626,11 +1629,14 @@ msgid ""
|
|||||||
"%d bpp given"
|
"%d bpp given"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/alarm/coproc/CoprocAlarm.c
|
|
||||||
#: ports/espressif/common-hal/alarm/touch/TouchAlarm.c
|
#: ports/espressif/common-hal/alarm/touch/TouchAlarm.c
|
||||||
msgid "Only one %q can be set in deep sleep."
|
msgid "Only one %q can be set in deep sleep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/espulp/ULPAlarm.c
|
||||||
|
msgid "Only one %q can be set."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/i2ctarget/I2CTarget.c
|
#: ports/espressif/common-hal/i2ctarget/I2CTarget.c
|
||||||
#: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c
|
#: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c
|
||||||
msgid "Only one address is allowed"
|
msgid "Only one address is allowed"
|
||||||
@ -1663,6 +1669,10 @@ msgstr ""
|
|||||||
msgid "Operation timed out"
|
msgid "Operation timed out"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
|
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 ports/espressif/esp_error.c
|
||||||
msgid "Out of memory"
|
msgid "Out of memory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1786,6 +1796,10 @@ msgstr ""
|
|||||||
msgid "Program size invalid"
|
msgid "Program size invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/espulp/ULP.c
|
||||||
|
msgid "Program too long"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/digitalio/DigitalInOut.c
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
msgid "Pull not used when direction is output."
|
msgid "Pull not used when direction is output."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1825,8 +1839,9 @@ msgstr ""
|
|||||||
msgid "Random number generation error"
|
msgid "Random number generation error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/_bleio/__init__.c
|
||||||
#: shared-bindings/memorymonitor/AllocationSize.c
|
#: shared-bindings/memorymonitor/AllocationSize.c
|
||||||
#: shared-bindings/pulseio/PulseIn.c
|
#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c
|
||||||
msgid "Read-only"
|
msgid "Read-only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1834,10 +1849,6 @@ msgstr ""
|
|||||||
msgid "Read-only filesystem"
|
msgid "Read-only filesystem"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/displayio/Bitmap.c
|
|
||||||
msgid "Read-only object"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
||||||
msgid "Received response was invalid"
|
msgid "Received response was invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1930,7 +1941,7 @@ msgstr ""
|
|||||||
msgid "Sleep Memory not available"
|
msgid "Sleep Memory not available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/alarm/SleepMemory.c shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
msgid "Slice and value different lengths."
|
msgid "Slice and value different lengths."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1967,6 +1978,10 @@ msgstr ""
|
|||||||
msgid "Stereo right must be on PWM channel B"
|
msgid "Stereo right must be on PWM channel B"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: 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
|
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
|
||||||
msgid "Supply at least one UART pin"
|
msgid "Supply at least one UART pin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1984,35 +1999,11 @@ msgid "Temperature read timed out"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid "The BOOT button was pressed at start up.\n"
|
msgid "The `microcontroller` module was used to boot into safe mode."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: py/obj.c
|
||||||
msgid ""
|
msgid "The above exception was the direct cause of the following exception:"
|
||||||
"The CircuitPython heap was corrupted because the stack was too small.\n"
|
|
||||||
"Increase the stack size if you know how. If not:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
|
|
||||||
msgid "The SW38 button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h
|
|
||||||
msgid "The VOLUME button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid ""
|
|
||||||
"The `microcontroller` module was used to boot into safe mode. Press reset to "
|
|
||||||
"exit safe mode."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/boards/m5stack_atom_lite/mpconfigboard.h
|
|
||||||
msgid "The central button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/boards/aramcon2_badge/mpconfigboard.h
|
|
||||||
msgid "The left button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
@ -2020,10 +2011,7 @@ msgid "The length of rgb_pins must be 6, 12, 18, 24, or 30"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid "The power dipped. Make sure you are providing enough power."
|
||||||
"The microcontroller's power dipped. Make sure your power supply provides\n"
|
|
||||||
"enough power for the whole circuit and press reset (after ejecting "
|
|
||||||
"CIRCUITPY)."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/audiomixer/MixerVoice.c
|
#: shared-module/audiomixer/MixerVoice.c
|
||||||
@ -2042,6 +2030,10 @@ msgstr ""
|
|||||||
msgid "The sample's signedness does not match the mixer's"
|
msgid "The sample's signedness does not match the mixer's"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Third-party firmware fatal error."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/imagecapture/ParallelImageCapture.c
|
#: shared-module/imagecapture/ParallelImageCapture.c
|
||||||
msgid "This microcontroller does not support continuous capture."
|
msgid "This microcontroller does not support continuous capture."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2074,10 +2066,6 @@ msgstr ""
|
|||||||
msgid "Timeout is too long: Maximum timeout length is %d seconds"
|
msgid "Timeout is too long: Maximum timeout length is %d seconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "To exit, please reset the board without requesting safe mode."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
||||||
msgid "Too many channels in sample"
|
msgid "Too many channels in sample"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2122,6 +2110,10 @@ msgstr ""
|
|||||||
msgid "UART init"
|
msgid "UART init"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/busio/UART.c
|
||||||
|
msgid "UART peripheral in use"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/stm/common-hal/busio/UART.c
|
#: ports/stm/common-hal/busio/UART.c
|
||||||
msgid "UART re-init"
|
msgid "UART re-init"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2169,6 +2161,10 @@ msgstr ""
|
|||||||
msgid "Unable to allocate buffers for signed conversion"
|
msgid "Unable to allocate buffers for signed conversion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Unable to allocate the heap."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/busio/I2C.c
|
#: ports/espressif/common-hal/busio/I2C.c
|
||||||
msgid "Unable to create lock"
|
msgid "Unable to create lock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2192,11 +2188,12 @@ msgid "Unable to read color palette data"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/mdns/Server.c
|
#: ports/espressif/common-hal/mdns/Server.c
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
msgid "Unable to start mDNS query"
|
msgid "Unable to start mDNS query"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/memorymap/AddressRange.c
|
||||||
msgid "Unable to write"
|
msgid "Unable to write to address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
@ -2267,6 +2264,7 @@ msgid "Unkown error code %d"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
|
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
|
||||||
|
#: shared-module/_pixelmap/PixelMap.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Unmatched number of items on RHS (expected %d, got %d)."
|
msgid "Unmatched number of items on RHS (expected %d, got %d)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2351,6 +2349,18 @@ msgstr ""
|
|||||||
msgid "Wi-Fi: "
|
msgid "Wi-Fi: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "Wifi is in access point mode."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "Wifi is in station mode."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "Wifi is not enabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: main.c
|
#: main.c
|
||||||
msgid "Woken up by alarm.\n"
|
msgid "Woken up by alarm.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2360,13 +2370,48 @@ msgstr ""
|
|||||||
msgid "Writes not supported on Characteristic"
|
msgid "Writes not supported on Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h
|
||||||
msgid "You are in safe mode because:\n"
|
#: ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h
|
||||||
|
#: 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 ""
|
||||||
|
|
||||||
|
#: 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 ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid "You pressed the BOOT button at start up"
|
||||||
"You pressed the reset button during boot. Press again to exit safe mode."
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
|
||||||
|
msgid "You pressed the SW38 button at start up."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h
|
||||||
|
msgid "You pressed the VOLUME button at start up."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: 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 ""
|
||||||
|
|
||||||
|
#: ports/nrf/boards/aramcon2_badge/mpconfigboard.h
|
||||||
|
msgid "You pressed the left button at start up."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "You pressed the reset button during boot."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/micropython.c
|
||||||
|
msgid "[truncated due to length]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objtype.c
|
#: py/objtype.c
|
||||||
@ -2438,8 +2483,12 @@ msgstr ""
|
|||||||
msgid "array has too many dimensions"
|
msgid "array has too many dimensions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: extmod/ulab/code/ndarray.c
|
||||||
|
msgid "array is too big"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
|
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
|
||||||
#: shared-bindings/coproc/CoprocMemory.c shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/memorymap/AddressRange.c shared-bindings/nvm/ByteArray.c
|
||||||
msgid "array/bytes required on right side"
|
msgid "array/bytes required on right side"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2532,10 +2581,6 @@ msgstr ""
|
|||||||
msgid "buffer too small for requested bytes"
|
msgid "buffer too small for requested bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
|
|
||||||
msgid "byteorder is not a string"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objarray.c
|
#: py/objarray.c
|
||||||
msgid "bytes length not a multiple of item size"
|
msgid "bytes length not a multiple of item size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2577,14 +2622,10 @@ msgstr ""
|
|||||||
msgid "can't cancel self"
|
msgid "can't cancel self"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
|
#: py/obj.c py/objint.c py/runtime.c shared-module/adafruit_pixelbuf/PixelBuf.c
|
||||||
msgid "can't convert %q to %q"
|
msgid "can't convert %q to %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/runtime.c
|
|
||||||
msgid "can't convert %q to int"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/obj.c
|
#: py/obj.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "can't convert %s to complex"
|
msgid "can't convert %s to complex"
|
||||||
@ -2666,6 +2707,10 @@ msgstr ""
|
|||||||
msgid "can't set attribute"
|
msgid "can't set attribute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/runtime.c
|
||||||
|
msgid "can't set attribute '%q'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/emitnative.c
|
#: py/emitnative.c
|
||||||
msgid "can't store '%q'"
|
msgid "can't store '%q'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2768,10 +2813,6 @@ msgstr ""
|
|||||||
msgid "comparison of int and uint"
|
msgid "comparison of int and uint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objcomplex.c
|
|
||||||
msgid "complex division by zero"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objfloat.c py/parsenum.c
|
#: py/objfloat.c py/parsenum.c
|
||||||
msgid "complex values not supported"
|
msgid "complex values not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2874,12 +2915,11 @@ msgstr ""
|
|||||||
msgid "div/mod not implemented for uint"
|
msgid "div/mod not implemented for uint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objfloat.c py/objint_mpz.c
|
#: extmod/ulab/code/numpy/create.c
|
||||||
msgid "divide by zero"
|
msgid "divide by zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/modmath.c py/objint_longlong.c py/runtime.c
|
#: py/runtime.c
|
||||||
#: shared-bindings/math/__init__.c
|
|
||||||
msgid "division by zero"
|
msgid "division by zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2920,9 +2960,9 @@ msgstr ""
|
|||||||
msgid "error = 0x%08lX"
|
msgid "error = 0x%08lX"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/esp32_camera/Camera.c
|
#: ports/espressif/common-hal/espcamera/Camera.c
|
||||||
msgid ""
|
msgid ""
|
||||||
"esp32_camera.Camera requires reserved PSRAM to be configured. See the "
|
"espcamera.Camera requires reserved PSRAM to be configured. See the "
|
||||||
"documentation for instructions."
|
"documentation for instructions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2930,14 +2970,6 @@ msgstr ""
|
|||||||
msgid "exceptions must derive from BaseException"
|
msgid "exceptions must derive from BaseException"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/canio/CAN.c
|
|
||||||
msgid "expected '%q' but got '%q'"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/canio/CAN.c
|
|
||||||
msgid "expected '%q' or '%q' but got '%q'"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objstr.c
|
#: py/objstr.c
|
||||||
msgid "expected ':' after format specifier"
|
msgid "expected ':' after format specifier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3036,10 +3068,6 @@ msgstr ""
|
|||||||
msgid "format requires a dict"
|
msgid "format requires a dict"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Processor.c
|
|
||||||
msgid "frequency is read-only for this board"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objdeque.c
|
#: py/objdeque.c
|
||||||
msgid "full"
|
msgid "full"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3152,8 +3180,12 @@ msgstr ""
|
|||||||
msgid "index is out of bounds"
|
msgid "index is out of bounds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/_pixelmap/PixelMap.c
|
||||||
|
msgid "index must be tuple or int"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: extmod/ulab/code/numpy/numerical.c extmod/ulab/code/ulab_tools.c
|
#: extmod/ulab/code/numpy/numerical.c extmod/ulab/code/ulab_tools.c
|
||||||
#: ports/espressif/common-hal/pulseio/PulseIn.c py/obj.c
|
#: ports/espressif/common-hal/pulseio/PulseIn.c
|
||||||
#: shared-bindings/bitmaptools/__init__.c
|
#: shared-bindings/bitmaptools/__init__.c
|
||||||
msgid "index out of range"
|
msgid "index out of range"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3251,10 +3283,6 @@ msgstr ""
|
|||||||
msgid "inputs are not iterable"
|
msgid "inputs are not iterable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/parsenum.c
|
|
||||||
msgid "int() arg 2 must be >= 2 and <= 36"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: extmod/ulab/code/numpy/approx.c
|
#: extmod/ulab/code/numpy/approx.c
|
||||||
msgid "interp is defined for 1D iterables of equal length"
|
msgid "interp is defined for 1D iterables of equal length"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3311,7 +3339,7 @@ msgstr ""
|
|||||||
msgid "invalid micropython decorator"
|
msgid "invalid micropython decorator"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/esp32_camera/Camera.c
|
#: ports/espressif/common-hal/espcamera/Camera.c
|
||||||
msgid "invalid setting"
|
msgid "invalid setting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3336,10 +3364,6 @@ msgstr ""
|
|||||||
msgid "invalid syntax for number"
|
msgid "invalid syntax for number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objexcept.c
|
|
||||||
msgid "invalid traceback"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objtype.c
|
#: py/objtype.c
|
||||||
msgid "issubclass() arg 1 must be a class"
|
msgid "issubclass() arg 1 must be a class"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3396,19 +3420,17 @@ msgstr ""
|
|||||||
msgid "local variable referenced before assignment"
|
msgid "local variable referenced before assignment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objint.c
|
|
||||||
msgid "long int not supported in this build"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/canio/CAN.c
|
#: ports/espressif/common-hal/canio/CAN.c
|
||||||
msgid "loopback + silent mode not supported by peripheral"
|
msgid "loopback + silent mode not supported by peripheral"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/mdns/Server.c
|
#: ports/espressif/common-hal/mdns/Server.c
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
msgid "mDNS already initialized"
|
msgid "mDNS already initialized"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/mdns/Server.c
|
#: ports/espressif/common-hal/mdns/Server.c
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
msgid "mDNS only works with built-in WiFi"
|
msgid "mDNS only works with built-in WiFi"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3537,6 +3559,10 @@ msgstr ""
|
|||||||
msgid "negative shift count"
|
msgid "negative shift count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/_pixelmap/PixelMap.c
|
||||||
|
msgid "nested index must be int"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/sdcardio/SDCard.c
|
#: shared-module/sdcardio/SDCard.c
|
||||||
msgid "no SD card"
|
msgid "no SD card"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3570,7 +3596,7 @@ msgstr ""
|
|||||||
msgid "no response from SD card"
|
msgid "no response from SD card"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/esp32_camera/Camera.c py/objobject.c py/runtime.c
|
#: ports/espressif/common-hal/espcamera/Camera.c py/objobject.c py/runtime.c
|
||||||
msgid "no such attribute"
|
msgid "no such attribute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3706,6 +3732,10 @@ msgstr ""
|
|||||||
msgid "only mono is supported"
|
msgid "only mono is supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: extmod/ulab/code/numpy/create.c
|
||||||
|
msgid "only ndarrays can be concatenated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/stm/common-hal/audiobusio/PDMIn.c
|
#: ports/stm/common-hal/audiobusio/PDMIn.c
|
||||||
msgid "only oversample=64 is supported"
|
msgid "only oversample=64 is supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3716,7 +3746,7 @@ msgid "only sample_rate=16000 is supported"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objarray.c py/objstr.c py/objstrunicode.c py/objtuple.c
|
#: py/objarray.c py/objstr.c py/objstrunicode.c py/objtuple.c
|
||||||
#: shared-bindings/alarm/SleepMemory.c shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
msgid "only slices with step=1 (aka None) are supported"
|
msgid "only slices with step=1 (aka None) are supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3932,10 +3962,6 @@ msgstr ""
|
|||||||
msgid "slice step can't be zero"
|
msgid "slice step can't be zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objslice.c
|
|
||||||
msgid "slice step cannot be zero"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/nativeglue.c
|
#: py/nativeglue.c
|
||||||
msgid "slice unsupported"
|
msgid "slice unsupported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3984,10 +4010,6 @@ msgstr ""
|
|||||||
msgid "start/end indices"
|
msgid "start/end indices"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/random/__init__.c
|
|
||||||
msgid "step must be non-zero"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/random/__init__.c
|
#: shared-bindings/random/__init__.c
|
||||||
msgid "stop not reachable from start"
|
msgid "stop not reachable from start"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3996,10 +4018,6 @@ msgstr ""
|
|||||||
msgid "stream operation not supported"
|
msgid "stream operation not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objstrunicode.c
|
|
||||||
msgid "string indices must be integers, not %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/stream.c
|
#: py/stream.c
|
||||||
msgid "string not supported; use bytes or bytearray"
|
msgid "string not supported; use bytes or bytearray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -4032,10 +4050,6 @@ msgstr ""
|
|||||||
msgid "syntax error in uctypes descriptor"
|
msgid "syntax error in uctypes descriptor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/time/__init__.c
|
|
||||||
msgid "time.struct_time() takes a 9-sequence"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/watchdog/WatchDogTimer.c
|
#: ports/atmel-samd/common-hal/watchdog/WatchDogTimer.c
|
||||||
#: ports/espressif/common-hal/watchdog/WatchDogTimer.c
|
#: ports/espressif/common-hal/watchdog/WatchDogTimer.c
|
||||||
#: ports/nrf/common-hal/watchdog/WatchDogTimer.c
|
#: ports/nrf/common-hal/watchdog/WatchDogTimer.c
|
||||||
@ -4317,10 +4331,6 @@ msgstr ""
|
|||||||
msgid "y value out of bounds"
|
msgid "y value out of bounds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objrange.c
|
|
||||||
msgid "zero step"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: extmod/ulab/code/scipy/signal/signal.c
|
#: extmod/ulab/code/scipy/signal/signal.c
|
||||||
msgid "zi must be an ndarray"
|
msgid "zi must be an ndarray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
509
locale/cs.po
509
locale/cs.po
File diff suppressed because it is too large
Load Diff
661
locale/de_DE.po
661
locale/de_DE.po
File diff suppressed because it is too large
Load Diff
489
locale/el.po
489
locale/el.po
File diff suppressed because it is too large
Load Diff
575
locale/en_GB.po
575
locale/en_GB.po
File diff suppressed because it is too large
Load Diff
928
locale/es.po
928
locale/es.po
File diff suppressed because it is too large
Load Diff
482
locale/fil.po
482
locale/fil.po
File diff suppressed because it is too large
Load Diff
682
locale/fr.po
682
locale/fr.po
File diff suppressed because it is too large
Load Diff
436
locale/hi.po
436
locale/hi.po
@ -31,8 +31,20 @@ msgstr ""
|
|||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Please file an issue with the contents of your CIRCUITPY drive at \n"
|
"Please file an issue with your program at https://github.com/adafruit/"
|
||||||
"https://github.com/adafruit/circuitpython/issues\n"
|
"circuitpython/issues."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"Press reset to exit safe mode.\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"You are in safe mode because:\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/obj.c
|
#: py/obj.c
|
||||||
@ -65,6 +77,11 @@ msgstr ""
|
|||||||
msgid "%02X"
|
msgid "%02X"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
#, c-format
|
||||||
|
msgid "%S"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -80,7 +97,7 @@ msgstr ""
|
|||||||
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
||||||
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
||||||
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
||||||
#: ports/stm/common-hal/rtc/RTC.c
|
#: ports/stm/common-hal/canio/Listener.c ports/stm/common-hal/rtc/RTC.c
|
||||||
msgid "%q"
|
msgid "%q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -100,13 +117,18 @@ msgstr ""
|
|||||||
msgid "%q failure: %d"
|
msgid "%q failure: %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/argcheck.c
|
||||||
|
msgid "%q in %q must be of type %q, not %q"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/espulp/ULP.c
|
||||||
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
||||||
#: shared-bindings/digitalio/DigitalInOut.c
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
#: shared-bindings/microcontroller/Pin.c
|
||||||
msgid "%q in use"
|
msgid "%q in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/obj.c py/objstr.c py/objstrunicode.c
|
#: py/objstr.c py/objstrunicode.c
|
||||||
msgid "%q index out of range"
|
msgid "%q index out of range"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -118,7 +140,11 @@ msgstr ""
|
|||||||
msgid "%q is %q"
|
msgid "%q is %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "%q is read-only for this board"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/argcheck.c shared-bindings/usb_hid/Device.c
|
||||||
msgid "%q length must be %d"
|
msgid "%q length must be %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -134,10 +160,6 @@ msgstr ""
|
|||||||
msgid "%q length must be >= %d"
|
msgid "%q length must be >= %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/busio/I2C.c
|
|
||||||
msgid "%q length must be >= 1"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: py/argcheck.c
|
||||||
msgid "%q must be %d"
|
msgid "%q must be %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -159,24 +181,20 @@ msgid "%q must be >= %d"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/analogbufio/BufferedIn.c
|
#: shared-bindings/analogbufio/BufferedIn.c
|
||||||
|
msgid "%q must be a bytearray or array of type 'H' or 'B'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/audiocore/RawSample.c
|
#: shared-bindings/audiocore/RawSample.c
|
||||||
msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'"
|
msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
|
||||||
msgid "%q must be a string"
|
#: shared-bindings/canio/CAN.c shared-bindings/digitalio/Pull.c
|
||||||
|
msgid "%q must be of type %q or %q, not %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: py/argcheck.c py/obj.c py/objstrunicode.c
|
||||||
msgid "%q must be an int"
|
msgid "%q must be of type %q, not %q"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/argcheck.c
|
|
||||||
msgid "%q must be of type %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/digitalio/Pull.c
|
|
||||||
msgid "%q must be of type %q or None"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/busio/UART.c
|
#: ports/atmel-samd/common-hal/busio/UART.c
|
||||||
@ -189,7 +207,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
|
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
|
||||||
#: ports/cxd56/common-hal/pulseio/PulseIn.c
|
#: ports/cxd56/common-hal/pulseio/PulseIn.c
|
||||||
#: ports/espressif/common-hal/coproc/Coproc.c
|
|
||||||
#: ports/nrf/common-hal/pulseio/PulseIn.c
|
#: ports/nrf/common-hal/pulseio/PulseIn.c
|
||||||
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
||||||
#: ports/stm/common-hal/pulseio/PulseIn.c py/argcheck.c
|
#: ports/stm/common-hal/pulseio/PulseIn.c py/argcheck.c
|
||||||
@ -201,8 +218,8 @@ msgstr ""
|
|||||||
msgid "%q pin invalid"
|
msgid "%q pin invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/usb_hid/Device.c
|
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
|
||||||
msgid "%q with a report ID of 0 must be of length 1"
|
msgid "%q step cannot be zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/bc.c py/objnamedtuple.c
|
#: py/bc.c py/objnamedtuple.c
|
||||||
@ -302,7 +319,7 @@ msgstr ""
|
|||||||
msgid "'%s' object doesn't support item deletion"
|
msgid "'%s' object doesn't support item deletion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/raspberrypi/common-hal/wifi/Radio.c py/runtime.c
|
#: py/runtime.c
|
||||||
msgid "'%s' object has no attribute '%q'"
|
msgid "'%s' object has no attribute '%q'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -402,6 +419,10 @@ msgstr ""
|
|||||||
msgid "Address must be %d bytes long"
|
msgid "Address must be %d bytes long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/memorymap/AddressRange.c
|
||||||
|
msgid "Address range not allowed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/canio/CAN.c
|
#: ports/espressif/common-hal/canio/CAN.c
|
||||||
msgid "All CAN peripherals are in use"
|
msgid "All CAN peripherals are in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -429,7 +450,6 @@ msgid "All SPI peripherals are in use"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
|
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
|
||||||
#: ports/raspberrypi/common-hal/busio/UART.c
|
|
||||||
msgid "All UART peripherals are in use"
|
msgid "All UART peripherals are in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -482,7 +502,7 @@ msgstr ""
|
|||||||
msgid "Already have all-matches listener"
|
msgid "Already have all-matches listener"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/coproc/__init__.c
|
#: ports/espressif/common-hal/espulp/ULP.c
|
||||||
#: shared-module/memorymonitor/AllocationAlarm.c
|
#: shared-module/memorymonitor/AllocationAlarm.c
|
||||||
#: shared-module/memorymonitor/AllocationSize.c
|
#: shared-module/memorymonitor/AllocationSize.c
|
||||||
msgid "Already running"
|
msgid "Already running"
|
||||||
@ -493,6 +513,11 @@ msgstr ""
|
|||||||
msgid "Already scanning for wifi networks"
|
msgid "Already scanning for wifi networks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
#, c-format
|
||||||
|
msgid "An error occurred while retrieving '%s':\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/stm/common-hal/audiopwmio/PWMAudioOut.c
|
#: ports/stm/common-hal/audiopwmio/PWMAudioOut.c
|
||||||
msgid "Another PWMAudioOut is already active"
|
msgid "Another PWMAudioOut is already active"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -506,24 +531,16 @@ msgstr ""
|
|||||||
msgid "Array must contain halfwords (type 'H')"
|
msgid "Array must contain halfwords (type 'H')"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/alarm/SleepMemory.c shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
msgid "Array values should be single bytes."
|
msgid "Array values should be single bytes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
|
||||||
msgid "At most %d %q may be specified (not %d)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-module/memorymonitor/AllocationAlarm.c
|
#: shared-module/memorymonitor/AllocationAlarm.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Attempt to allocate %d blocks"
|
msgid "Attempt to allocate %d blocks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Attempted heap allocation when VM not running."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/raspberrypi/audio_dma.c
|
#: ports/raspberrypi/audio_dma.c
|
||||||
msgid "Audio conversion not implemented"
|
msgid "Audio conversion not implemented"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -572,20 +589,13 @@ msgid "Bitmap size and bits per value must match"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid "Boot device must be first device (interface #0)."
|
msgid "Boot device must be first (interface #0)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/mimxrt10xx/common-hal/busio/UART.c
|
#: ports/mimxrt10xx/common-hal/busio/UART.c
|
||||||
msgid "Both RX and TX required for flow control"
|
msgid "Both RX and TX required for flow control"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h
|
|
||||||
#: ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h
|
|
||||||
#: ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h
|
|
||||||
#: ports/atmel-samd/boards/meowmeow/mpconfigboard.h
|
|
||||||
msgid "Both buttons were pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
|
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
|
||||||
msgid "Both pins must support hardware interrupts"
|
msgid "Both pins must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -651,11 +661,6 @@ msgstr ""
|
|||||||
msgid "Bus pin %d is already in use"
|
msgid "Bus pin %d is already in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h
|
|
||||||
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
|
|
||||||
msgid "Button A was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/_bleio/UUID.c
|
#: shared-bindings/_bleio/UUID.c
|
||||||
msgid "Byte buffer must be 16 bytes."
|
msgid "Byte buffer must be 16 bytes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -786,10 +791,6 @@ msgstr ""
|
|||||||
msgid "CircuitPython core code crashed hard. Whoops!\n"
|
msgid "CircuitPython core code crashed hard. Whoops!\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "CircuitPython was unable to allocate the heap."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-module/bitbangio/I2C.c
|
#: shared-module/bitbangio/I2C.c
|
||||||
msgid "Clock stretch too long"
|
msgid "Clock stretch too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -828,10 +829,6 @@ msgstr ""
|
|||||||
msgid "Couldn't allocate decoder"
|
msgid "Couldn't allocate decoder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Crash into the HardFault_Handler."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/stm/common-hal/analogio/AnalogOut.c
|
#: ports/stm/common-hal/analogio/AnalogOut.c
|
||||||
msgid "DAC Channel Init Error"
|
msgid "DAC Channel Init Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -894,6 +891,10 @@ msgstr ""
|
|||||||
msgid "Drive mode not used when direction is input."
|
msgid "Drive mode not used when direction is input."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/obj.c
|
||||||
|
msgid "During handling of the above exception, another exception occurred:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/aesio/aes.c
|
#: shared-bindings/aesio/aes.c
|
||||||
msgid "ECB only operates on 16 bytes at a time"
|
msgid "ECB only operates on 16 bytes at a time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -919,24 +920,16 @@ msgstr ""
|
|||||||
msgid "Error in regex"
|
msgid "Error in regex"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Error in safemode.py."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c
|
#: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c
|
||||||
msgid "Error: Failure to bind"
|
msgid "Error: Failure to bind"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
|
|
||||||
#: shared-bindings/alarm/__init__.c shared-bindings/alarm/coproc/CoprocAlarm.c
|
|
||||||
#: shared-bindings/busio/SPI.c shared-bindings/coproc/Coproc.c
|
|
||||||
#: shared-bindings/coproc/__init__.c shared-bindings/microcontroller/Pin.c
|
|
||||||
#: shared-bindings/neopixel_write/__init__.c
|
|
||||||
msgid "Expected a %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/raspberrypi/bindings/cyw43/__init__.c
|
|
||||||
msgid "Expected a %q or %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/alarm/__init__.c
|
#: shared-bindings/alarm/__init__.c
|
||||||
msgid "Expected an %q"
|
msgid "Expected a kind of %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/_bleio/Adapter.c
|
#: ports/espressif/common-hal/_bleio/Adapter.c
|
||||||
@ -1004,13 +997,17 @@ msgid "Failed to write internal flash."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid "Fatal error."
|
msgid "Fault detected by hardware."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/moduerrno.c
|
#: py/moduerrno.c
|
||||||
msgid "File exists"
|
msgid "File exists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
msgid "File not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/canio/Listener.c
|
#: ports/atmel-samd/common-hal/canio/Listener.c
|
||||||
#: ports/espressif/common-hal/canio/Listener.c
|
#: ports/espressif/common-hal/canio/Listener.c
|
||||||
#: ports/stm/common-hal/canio/Listener.c
|
#: ports/stm/common-hal/canio/Listener.c
|
||||||
@ -1025,7 +1022,6 @@ msgstr ""
|
|||||||
msgid "Firmware is invalid"
|
msgid "Firmware is invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/coproc/Coproc.c
|
|
||||||
#: ports/espressif/common-hal/dualbank/__init__.c
|
#: ports/espressif/common-hal/dualbank/__init__.c
|
||||||
msgid "Firmware is too big"
|
msgid "Firmware is too big"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1067,6 +1063,8 @@ msgstr ""
|
|||||||
#: shared-bindings/displayio/Display.c
|
#: shared-bindings/displayio/Display.c
|
||||||
#: shared-bindings/displayio/EPaperDisplay.c
|
#: shared-bindings/displayio/EPaperDisplay.c
|
||||||
#: shared-bindings/framebufferio/FramebufferDisplay.c
|
#: shared-bindings/framebufferio/FramebufferDisplay.c
|
||||||
|
#: shared-module/displayio/Display.c
|
||||||
|
#: shared-module/framebufferio/FramebufferDisplay.c
|
||||||
msgid "Group already used"
|
msgid "Group already used"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1087,6 +1085,15 @@ msgstr ""
|
|||||||
msgid "Hardware in use, try alternative pins"
|
msgid "Hardware in use, try alternative pins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Heap allocation when VM not running."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid ""
|
||||||
|
"Heap was corrupted because the stack was too small. Increase stack size."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: extmod/vfs_posix_file.c py/objstringio.c
|
#: extmod/vfs_posix_file.c py/objstringio.c
|
||||||
msgid "I/O operation on closed file"
|
msgid "I/O operation on closed file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1104,11 +1111,6 @@ msgstr ""
|
|||||||
msgid "I2SOut not available"
|
msgid "I2SOut not available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/aesio/aes.c
|
|
||||||
#, c-format
|
|
||||||
msgid "IV must be %d bytes long"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/raspberrypi/bindings/rp2pio/StateMachine.c
|
#: ports/raspberrypi/bindings/rp2pio/StateMachine.c
|
||||||
msgid "In-buffer elements must be <= 4 bytes long"
|
msgid "In-buffer elements must be <= 4 bytes long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1193,6 +1195,7 @@ msgid "Internal define error"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1205,6 +1208,10 @@ msgstr ""
|
|||||||
msgid "Internal watchdog timer expired."
|
msgid "Internal watchdog timer expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Interrupt error."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
|
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
|
||||||
msgid "Invalid %q"
|
msgid "Invalid %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1239,6 +1246,11 @@ msgstr ""
|
|||||||
msgid "Invalid bits per value"
|
msgid "Invalid bits per value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
#, c-format
|
||||||
|
msgid "Invalid byte %.*s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/imagecapture/ParallelImageCapture.c
|
#: ports/atmel-samd/common-hal/imagecapture/ParallelImageCapture.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invalid data_pins[%d]"
|
msgid "Invalid data_pins[%d]"
|
||||||
@ -1248,18 +1260,10 @@ msgstr ""
|
|||||||
msgid "Invalid format chunk size"
|
msgid "Invalid format chunk size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Invalid memory access."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/wifi/Radio.c
|
#: ports/espressif/common-hal/wifi/Radio.c
|
||||||
msgid "Invalid multicast MAC address"
|
msgid "Invalid multicast MAC address"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/busio/UART.c
|
|
||||||
msgid "Invalid pins"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
||||||
msgid "Invalid size"
|
msgid "Invalid size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1273,10 +1277,18 @@ msgstr ""
|
|||||||
msgid "Invalid state"
|
msgid "Invalid state"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
msgid "Invalid unicode escape"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/aesio/aes.c
|
#: shared-bindings/aesio/aes.c
|
||||||
msgid "Key must be 16, 24, or 32 bytes long"
|
msgid "Key must be 16, 24, or 32 bytes long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
msgid "Key not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/is31fl3741/FrameBuffer.c
|
#: shared-module/is31fl3741/FrameBuffer.c
|
||||||
msgid "LED mappings must match display size"
|
msgid "LED mappings must match display size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1383,6 +1395,10 @@ msgstr ""
|
|||||||
msgid "NVS Error"
|
msgid "NVS Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/socketpool/SocketPool.c
|
||||||
|
msgid "Name or service not known"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/qstr.c
|
#: py/qstr.c
|
||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1497,11 +1513,6 @@ msgstr ""
|
|||||||
msgid "No long integer support"
|
msgid "No long integer support"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/usb_hid/__init__.c
|
|
||||||
#, c-format
|
|
||||||
msgid "No more than %d HID devices allowed"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/wifi/Radio.c
|
#: shared-bindings/wifi/Radio.c
|
||||||
msgid "No network with that ssid"
|
msgid "No network with that ssid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1537,10 +1548,6 @@ msgstr ""
|
|||||||
msgid "No timer available"
|
msgid "No timer available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Nordic system firmware failure assertion."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||||
msgid "Nordic system firmware out of memory"
|
msgid "Nordic system firmware out of memory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1560,10 +1567,6 @@ msgstr ""
|
|||||||
msgid "Not playing"
|
msgid "Not playing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_bleio/__init__.c
|
|
||||||
msgid "Not settable"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Number of data_pins must be 8 or 16, not %d"
|
msgid "Number of data_pins must be 8 or 16, not %d"
|
||||||
@ -1626,11 +1629,14 @@ msgid ""
|
|||||||
"%d bpp given"
|
"%d bpp given"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/alarm/coproc/CoprocAlarm.c
|
|
||||||
#: ports/espressif/common-hal/alarm/touch/TouchAlarm.c
|
#: ports/espressif/common-hal/alarm/touch/TouchAlarm.c
|
||||||
msgid "Only one %q can be set in deep sleep."
|
msgid "Only one %q can be set in deep sleep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/espulp/ULPAlarm.c
|
||||||
|
msgid "Only one %q can be set."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/i2ctarget/I2CTarget.c
|
#: ports/espressif/common-hal/i2ctarget/I2CTarget.c
|
||||||
#: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c
|
#: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c
|
||||||
msgid "Only one address is allowed"
|
msgid "Only one address is allowed"
|
||||||
@ -1663,6 +1669,10 @@ msgstr ""
|
|||||||
msgid "Operation timed out"
|
msgid "Operation timed out"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
|
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 ports/espressif/esp_error.c
|
||||||
msgid "Out of memory"
|
msgid "Out of memory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1786,6 +1796,10 @@ msgstr ""
|
|||||||
msgid "Program size invalid"
|
msgid "Program size invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/espulp/ULP.c
|
||||||
|
msgid "Program too long"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/digitalio/DigitalInOut.c
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
msgid "Pull not used when direction is output."
|
msgid "Pull not used when direction is output."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1825,8 +1839,9 @@ msgstr ""
|
|||||||
msgid "Random number generation error"
|
msgid "Random number generation error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/_bleio/__init__.c
|
||||||
#: shared-bindings/memorymonitor/AllocationSize.c
|
#: shared-bindings/memorymonitor/AllocationSize.c
|
||||||
#: shared-bindings/pulseio/PulseIn.c
|
#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c
|
||||||
msgid "Read-only"
|
msgid "Read-only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1834,10 +1849,6 @@ msgstr ""
|
|||||||
msgid "Read-only filesystem"
|
msgid "Read-only filesystem"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/displayio/Bitmap.c
|
|
||||||
msgid "Read-only object"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
||||||
msgid "Received response was invalid"
|
msgid "Received response was invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1930,7 +1941,7 @@ msgstr ""
|
|||||||
msgid "Sleep Memory not available"
|
msgid "Sleep Memory not available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/alarm/SleepMemory.c shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
msgid "Slice and value different lengths."
|
msgid "Slice and value different lengths."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1967,6 +1978,10 @@ msgstr ""
|
|||||||
msgid "Stereo right must be on PWM channel B"
|
msgid "Stereo right must be on PWM channel B"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: 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
|
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
|
||||||
msgid "Supply at least one UART pin"
|
msgid "Supply at least one UART pin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1984,35 +1999,11 @@ msgid "Temperature read timed out"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid "The BOOT button was pressed at start up.\n"
|
msgid "The `microcontroller` module was used to boot into safe mode."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: py/obj.c
|
||||||
msgid ""
|
msgid "The above exception was the direct cause of the following exception:"
|
||||||
"The CircuitPython heap was corrupted because the stack was too small.\n"
|
|
||||||
"Increase the stack size if you know how. If not:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
|
|
||||||
msgid "The SW38 button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h
|
|
||||||
msgid "The VOLUME button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid ""
|
|
||||||
"The `microcontroller` module was used to boot into safe mode. Press reset to "
|
|
||||||
"exit safe mode."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/boards/m5stack_atom_lite/mpconfigboard.h
|
|
||||||
msgid "The central button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/boards/aramcon2_badge/mpconfigboard.h
|
|
||||||
msgid "The left button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
@ -2020,10 +2011,7 @@ msgid "The length of rgb_pins must be 6, 12, 18, 24, or 30"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid "The power dipped. Make sure you are providing enough power."
|
||||||
"The microcontroller's power dipped. Make sure your power supply provides\n"
|
|
||||||
"enough power for the whole circuit and press reset (after ejecting "
|
|
||||||
"CIRCUITPY)."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/audiomixer/MixerVoice.c
|
#: shared-module/audiomixer/MixerVoice.c
|
||||||
@ -2042,6 +2030,10 @@ msgstr ""
|
|||||||
msgid "The sample's signedness does not match the mixer's"
|
msgid "The sample's signedness does not match the mixer's"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Third-party firmware fatal error."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/imagecapture/ParallelImageCapture.c
|
#: shared-module/imagecapture/ParallelImageCapture.c
|
||||||
msgid "This microcontroller does not support continuous capture."
|
msgid "This microcontroller does not support continuous capture."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2074,10 +2066,6 @@ msgstr ""
|
|||||||
msgid "Timeout is too long: Maximum timeout length is %d seconds"
|
msgid "Timeout is too long: Maximum timeout length is %d seconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "To exit, please reset the board without requesting safe mode."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
||||||
msgid "Too many channels in sample"
|
msgid "Too many channels in sample"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2122,6 +2110,10 @@ msgstr ""
|
|||||||
msgid "UART init"
|
msgid "UART init"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/busio/UART.c
|
||||||
|
msgid "UART peripheral in use"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/stm/common-hal/busio/UART.c
|
#: ports/stm/common-hal/busio/UART.c
|
||||||
msgid "UART re-init"
|
msgid "UART re-init"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2169,6 +2161,10 @@ msgstr ""
|
|||||||
msgid "Unable to allocate buffers for signed conversion"
|
msgid "Unable to allocate buffers for signed conversion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Unable to allocate the heap."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/busio/I2C.c
|
#: ports/espressif/common-hal/busio/I2C.c
|
||||||
msgid "Unable to create lock"
|
msgid "Unable to create lock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2192,11 +2188,12 @@ msgid "Unable to read color palette data"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/mdns/Server.c
|
#: ports/espressif/common-hal/mdns/Server.c
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
msgid "Unable to start mDNS query"
|
msgid "Unable to start mDNS query"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/memorymap/AddressRange.c
|
||||||
msgid "Unable to write"
|
msgid "Unable to write to address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
@ -2267,6 +2264,7 @@ msgid "Unkown error code %d"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
|
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
|
||||||
|
#: shared-module/_pixelmap/PixelMap.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Unmatched number of items on RHS (expected %d, got %d)."
|
msgid "Unmatched number of items on RHS (expected %d, got %d)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2351,6 +2349,18 @@ msgstr ""
|
|||||||
msgid "Wi-Fi: "
|
msgid "Wi-Fi: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "Wifi is in access point mode."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "Wifi is in station mode."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "Wifi is not enabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: main.c
|
#: main.c
|
||||||
msgid "Woken up by alarm.\n"
|
msgid "Woken up by alarm.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2360,13 +2370,48 @@ msgstr ""
|
|||||||
msgid "Writes not supported on Characteristic"
|
msgid "Writes not supported on Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h
|
||||||
msgid "You are in safe mode because:\n"
|
#: ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h
|
||||||
|
#: 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 ""
|
||||||
|
|
||||||
|
#: 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 ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid "You pressed the BOOT button at start up"
|
||||||
"You pressed the reset button during boot. Press again to exit safe mode."
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
|
||||||
|
msgid "You pressed the SW38 button at start up."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h
|
||||||
|
msgid "You pressed the VOLUME button at start up."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: 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 ""
|
||||||
|
|
||||||
|
#: ports/nrf/boards/aramcon2_badge/mpconfigboard.h
|
||||||
|
msgid "You pressed the left button at start up."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "You pressed the reset button during boot."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/micropython.c
|
||||||
|
msgid "[truncated due to length]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objtype.c
|
#: py/objtype.c
|
||||||
@ -2438,8 +2483,12 @@ msgstr ""
|
|||||||
msgid "array has too many dimensions"
|
msgid "array has too many dimensions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: extmod/ulab/code/ndarray.c
|
||||||
|
msgid "array is too big"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
|
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
|
||||||
#: shared-bindings/coproc/CoprocMemory.c shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/memorymap/AddressRange.c shared-bindings/nvm/ByteArray.c
|
||||||
msgid "array/bytes required on right side"
|
msgid "array/bytes required on right side"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2532,10 +2581,6 @@ msgstr ""
|
|||||||
msgid "buffer too small for requested bytes"
|
msgid "buffer too small for requested bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
|
|
||||||
msgid "byteorder is not a string"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objarray.c
|
#: py/objarray.c
|
||||||
msgid "bytes length not a multiple of item size"
|
msgid "bytes length not a multiple of item size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2577,14 +2622,10 @@ msgstr ""
|
|||||||
msgid "can't cancel self"
|
msgid "can't cancel self"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
|
#: py/obj.c py/objint.c py/runtime.c shared-module/adafruit_pixelbuf/PixelBuf.c
|
||||||
msgid "can't convert %q to %q"
|
msgid "can't convert %q to %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/runtime.c
|
|
||||||
msgid "can't convert %q to int"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/obj.c
|
#: py/obj.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "can't convert %s to complex"
|
msgid "can't convert %s to complex"
|
||||||
@ -2666,6 +2707,10 @@ msgstr ""
|
|||||||
msgid "can't set attribute"
|
msgid "can't set attribute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/runtime.c
|
||||||
|
msgid "can't set attribute '%q'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/emitnative.c
|
#: py/emitnative.c
|
||||||
msgid "can't store '%q'"
|
msgid "can't store '%q'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2768,10 +2813,6 @@ msgstr ""
|
|||||||
msgid "comparison of int and uint"
|
msgid "comparison of int and uint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objcomplex.c
|
|
||||||
msgid "complex division by zero"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objfloat.c py/parsenum.c
|
#: py/objfloat.c py/parsenum.c
|
||||||
msgid "complex values not supported"
|
msgid "complex values not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2874,12 +2915,11 @@ msgstr ""
|
|||||||
msgid "div/mod not implemented for uint"
|
msgid "div/mod not implemented for uint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objfloat.c py/objint_mpz.c
|
#: extmod/ulab/code/numpy/create.c
|
||||||
msgid "divide by zero"
|
msgid "divide by zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/modmath.c py/objint_longlong.c py/runtime.c
|
#: py/runtime.c
|
||||||
#: shared-bindings/math/__init__.c
|
|
||||||
msgid "division by zero"
|
msgid "division by zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2920,9 +2960,9 @@ msgstr ""
|
|||||||
msgid "error = 0x%08lX"
|
msgid "error = 0x%08lX"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/esp32_camera/Camera.c
|
#: ports/espressif/common-hal/espcamera/Camera.c
|
||||||
msgid ""
|
msgid ""
|
||||||
"esp32_camera.Camera requires reserved PSRAM to be configured. See the "
|
"espcamera.Camera requires reserved PSRAM to be configured. See the "
|
||||||
"documentation for instructions."
|
"documentation for instructions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2930,14 +2970,6 @@ msgstr ""
|
|||||||
msgid "exceptions must derive from BaseException"
|
msgid "exceptions must derive from BaseException"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/canio/CAN.c
|
|
||||||
msgid "expected '%q' but got '%q'"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/canio/CAN.c
|
|
||||||
msgid "expected '%q' or '%q' but got '%q'"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objstr.c
|
#: py/objstr.c
|
||||||
msgid "expected ':' after format specifier"
|
msgid "expected ':' after format specifier"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3036,10 +3068,6 @@ msgstr ""
|
|||||||
msgid "format requires a dict"
|
msgid "format requires a dict"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Processor.c
|
|
||||||
msgid "frequency is read-only for this board"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objdeque.c
|
#: py/objdeque.c
|
||||||
msgid "full"
|
msgid "full"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3152,8 +3180,12 @@ msgstr ""
|
|||||||
msgid "index is out of bounds"
|
msgid "index is out of bounds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/_pixelmap/PixelMap.c
|
||||||
|
msgid "index must be tuple or int"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: extmod/ulab/code/numpy/numerical.c extmod/ulab/code/ulab_tools.c
|
#: extmod/ulab/code/numpy/numerical.c extmod/ulab/code/ulab_tools.c
|
||||||
#: ports/espressif/common-hal/pulseio/PulseIn.c py/obj.c
|
#: ports/espressif/common-hal/pulseio/PulseIn.c
|
||||||
#: shared-bindings/bitmaptools/__init__.c
|
#: shared-bindings/bitmaptools/__init__.c
|
||||||
msgid "index out of range"
|
msgid "index out of range"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3251,10 +3283,6 @@ msgstr ""
|
|||||||
msgid "inputs are not iterable"
|
msgid "inputs are not iterable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/parsenum.c
|
|
||||||
msgid "int() arg 2 must be >= 2 and <= 36"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: extmod/ulab/code/numpy/approx.c
|
#: extmod/ulab/code/numpy/approx.c
|
||||||
msgid "interp is defined for 1D iterables of equal length"
|
msgid "interp is defined for 1D iterables of equal length"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3311,7 +3339,7 @@ msgstr ""
|
|||||||
msgid "invalid micropython decorator"
|
msgid "invalid micropython decorator"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/esp32_camera/Camera.c
|
#: ports/espressif/common-hal/espcamera/Camera.c
|
||||||
msgid "invalid setting"
|
msgid "invalid setting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3336,10 +3364,6 @@ msgstr ""
|
|||||||
msgid "invalid syntax for number"
|
msgid "invalid syntax for number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objexcept.c
|
|
||||||
msgid "invalid traceback"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objtype.c
|
#: py/objtype.c
|
||||||
msgid "issubclass() arg 1 must be a class"
|
msgid "issubclass() arg 1 must be a class"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3396,19 +3420,17 @@ msgstr ""
|
|||||||
msgid "local variable referenced before assignment"
|
msgid "local variable referenced before assignment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objint.c
|
|
||||||
msgid "long int not supported in this build"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/canio/CAN.c
|
#: ports/espressif/common-hal/canio/CAN.c
|
||||||
msgid "loopback + silent mode not supported by peripheral"
|
msgid "loopback + silent mode not supported by peripheral"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/mdns/Server.c
|
#: ports/espressif/common-hal/mdns/Server.c
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
msgid "mDNS already initialized"
|
msgid "mDNS already initialized"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/mdns/Server.c
|
#: ports/espressif/common-hal/mdns/Server.c
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
msgid "mDNS only works with built-in WiFi"
|
msgid "mDNS only works with built-in WiFi"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3537,6 +3559,10 @@ msgstr ""
|
|||||||
msgid "negative shift count"
|
msgid "negative shift count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/_pixelmap/PixelMap.c
|
||||||
|
msgid "nested index must be int"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/sdcardio/SDCard.c
|
#: shared-module/sdcardio/SDCard.c
|
||||||
msgid "no SD card"
|
msgid "no SD card"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3570,7 +3596,7 @@ msgstr ""
|
|||||||
msgid "no response from SD card"
|
msgid "no response from SD card"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/esp32_camera/Camera.c py/objobject.c py/runtime.c
|
#: ports/espressif/common-hal/espcamera/Camera.c py/objobject.c py/runtime.c
|
||||||
msgid "no such attribute"
|
msgid "no such attribute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3706,6 +3732,10 @@ msgstr ""
|
|||||||
msgid "only mono is supported"
|
msgid "only mono is supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: extmod/ulab/code/numpy/create.c
|
||||||
|
msgid "only ndarrays can be concatenated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/stm/common-hal/audiobusio/PDMIn.c
|
#: ports/stm/common-hal/audiobusio/PDMIn.c
|
||||||
msgid "only oversample=64 is supported"
|
msgid "only oversample=64 is supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3716,7 +3746,7 @@ msgid "only sample_rate=16000 is supported"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objarray.c py/objstr.c py/objstrunicode.c py/objtuple.c
|
#: py/objarray.c py/objstr.c py/objstrunicode.c py/objtuple.c
|
||||||
#: shared-bindings/alarm/SleepMemory.c shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
msgid "only slices with step=1 (aka None) are supported"
|
msgid "only slices with step=1 (aka None) are supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3932,10 +3962,6 @@ msgstr ""
|
|||||||
msgid "slice step can't be zero"
|
msgid "slice step can't be zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objslice.c
|
|
||||||
msgid "slice step cannot be zero"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/nativeglue.c
|
#: py/nativeglue.c
|
||||||
msgid "slice unsupported"
|
msgid "slice unsupported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3984,10 +4010,6 @@ msgstr ""
|
|||||||
msgid "start/end indices"
|
msgid "start/end indices"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/random/__init__.c
|
|
||||||
msgid "step must be non-zero"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/random/__init__.c
|
#: shared-bindings/random/__init__.c
|
||||||
msgid "stop not reachable from start"
|
msgid "stop not reachable from start"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3996,10 +4018,6 @@ msgstr ""
|
|||||||
msgid "stream operation not supported"
|
msgid "stream operation not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objstrunicode.c
|
|
||||||
msgid "string indices must be integers, not %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/stream.c
|
#: py/stream.c
|
||||||
msgid "string not supported; use bytes or bytearray"
|
msgid "string not supported; use bytes or bytearray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -4032,10 +4050,6 @@ msgstr ""
|
|||||||
msgid "syntax error in uctypes descriptor"
|
msgid "syntax error in uctypes descriptor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/time/__init__.c
|
|
||||||
msgid "time.struct_time() takes a 9-sequence"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/watchdog/WatchDogTimer.c
|
#: ports/atmel-samd/common-hal/watchdog/WatchDogTimer.c
|
||||||
#: ports/espressif/common-hal/watchdog/WatchDogTimer.c
|
#: ports/espressif/common-hal/watchdog/WatchDogTimer.c
|
||||||
#: ports/nrf/common-hal/watchdog/WatchDogTimer.c
|
#: ports/nrf/common-hal/watchdog/WatchDogTimer.c
|
||||||
@ -4317,10 +4331,6 @@ msgstr ""
|
|||||||
msgid "y value out of bounds"
|
msgid "y value out of bounds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objrange.c
|
|
||||||
msgid "zero step"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: extmod/ulab/code/scipy/signal/signal.c
|
#: extmod/ulab/code/scipy/signal/signal.c
|
||||||
msgid "zi must be an ndarray"
|
msgid "zi must be an ndarray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
478
locale/it_IT.po
478
locale/it_IT.po
File diff suppressed because it is too large
Load Diff
521
locale/ja.po
521
locale/ja.po
File diff suppressed because it is too large
Load Diff
442
locale/ko.po
442
locale/ko.po
@ -32,8 +32,20 @@ msgstr ""
|
|||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Please file an issue with the contents of your CIRCUITPY drive at \n"
|
"Please file an issue with your program at https://github.com/adafruit/"
|
||||||
"https://github.com/adafruit/circuitpython/issues\n"
|
"circuitpython/issues."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"Press reset to exit safe mode.\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"You are in safe mode because:\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/obj.c
|
#: py/obj.c
|
||||||
@ -66,6 +78,11 @@ msgstr "%%c 전수(int)또는 캐릭터(char)필요합니다"
|
|||||||
msgid "%02X"
|
msgid "%02X"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
#, c-format
|
||||||
|
msgid "%S"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -81,7 +98,7 @@ msgstr ""
|
|||||||
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
||||||
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
||||||
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
||||||
#: ports/stm/common-hal/rtc/RTC.c
|
#: ports/stm/common-hal/canio/Listener.c ports/stm/common-hal/rtc/RTC.c
|
||||||
msgid "%q"
|
msgid "%q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -101,13 +118,18 @@ msgstr ""
|
|||||||
msgid "%q failure: %d"
|
msgid "%q failure: %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/argcheck.c
|
||||||
|
msgid "%q in %q must be of type %q, not %q"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/espulp/ULP.c
|
||||||
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
||||||
#: shared-bindings/digitalio/DigitalInOut.c
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
#: shared-bindings/microcontroller/Pin.c
|
||||||
msgid "%q in use"
|
msgid "%q in use"
|
||||||
msgstr "%q 사용 중입니다"
|
msgstr "%q 사용 중입니다"
|
||||||
|
|
||||||
#: py/obj.c py/objstr.c py/objstrunicode.c
|
#: py/objstr.c py/objstrunicode.c
|
||||||
msgid "%q index out of range"
|
msgid "%q index out of range"
|
||||||
msgstr "%q 인덱스 범위를 벗어났습니다"
|
msgstr "%q 인덱스 범위를 벗어났습니다"
|
||||||
|
|
||||||
@ -119,7 +141,11 @@ msgstr ""
|
|||||||
msgid "%q is %q"
|
msgid "%q is %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "%q is read-only for this board"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/argcheck.c shared-bindings/usb_hid/Device.c
|
||||||
msgid "%q length must be %d"
|
msgid "%q length must be %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -135,10 +161,6 @@ msgstr ""
|
|||||||
msgid "%q length must be >= %d"
|
msgid "%q length must be >= %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/busio/I2C.c
|
|
||||||
msgid "%q length must be >= 1"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: py/argcheck.c
|
||||||
msgid "%q must be %d"
|
msgid "%q must be %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -160,24 +182,20 @@ msgid "%q must be >= %d"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/analogbufio/BufferedIn.c
|
#: shared-bindings/analogbufio/BufferedIn.c
|
||||||
|
msgid "%q must be a bytearray or array of type 'H' or 'B'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/audiocore/RawSample.c
|
#: shared-bindings/audiocore/RawSample.c
|
||||||
msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'"
|
msgid "%q must be a bytearray or array of type 'h', 'H', 'b', or 'B'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
|
||||||
msgid "%q must be a string"
|
#: shared-bindings/canio/CAN.c shared-bindings/digitalio/Pull.c
|
||||||
|
msgid "%q must be of type %q or %q, not %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c
|
#: py/argcheck.c py/obj.c py/objstrunicode.c
|
||||||
msgid "%q must be an int"
|
msgid "%q must be of type %q, not %q"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/argcheck.c
|
|
||||||
msgid "%q must be of type %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/digitalio/Pull.c
|
|
||||||
msgid "%q must be of type %q or None"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/busio/UART.c
|
#: ports/atmel-samd/common-hal/busio/UART.c
|
||||||
@ -190,7 +208,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
|
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
|
||||||
#: ports/cxd56/common-hal/pulseio/PulseIn.c
|
#: ports/cxd56/common-hal/pulseio/PulseIn.c
|
||||||
#: ports/espressif/common-hal/coproc/Coproc.c
|
|
||||||
#: ports/nrf/common-hal/pulseio/PulseIn.c
|
#: ports/nrf/common-hal/pulseio/PulseIn.c
|
||||||
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
|
||||||
#: ports/stm/common-hal/pulseio/PulseIn.c py/argcheck.c
|
#: ports/stm/common-hal/pulseio/PulseIn.c py/argcheck.c
|
||||||
@ -202,8 +219,8 @@ msgstr ""
|
|||||||
msgid "%q pin invalid"
|
msgid "%q pin invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/usb_hid/Device.c
|
#: py/objrange.c py/objslice.c shared-bindings/random/__init__.c
|
||||||
msgid "%q with a report ID of 0 must be of length 1"
|
msgid "%q step cannot be zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/bc.c py/objnamedtuple.c
|
#: py/bc.c py/objnamedtuple.c
|
||||||
@ -303,7 +320,7 @@ msgstr ""
|
|||||||
msgid "'%s' object doesn't support item deletion"
|
msgid "'%s' object doesn't support item deletion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/raspberrypi/common-hal/wifi/Radio.c py/runtime.c
|
#: py/runtime.c
|
||||||
msgid "'%s' object has no attribute '%q'"
|
msgid "'%s' object has no attribute '%q'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -403,6 +420,10 @@ msgstr ""
|
|||||||
msgid "Address must be %d bytes long"
|
msgid "Address must be %d bytes long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/memorymap/AddressRange.c
|
||||||
|
msgid "Address range not allowed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/canio/CAN.c
|
#: ports/espressif/common-hal/canio/CAN.c
|
||||||
msgid "All CAN peripherals are in use"
|
msgid "All CAN peripherals are in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -430,7 +451,6 @@ msgid "All SPI peripherals are in use"
|
|||||||
msgstr "사용중인 모든 SPI주변 기기"
|
msgstr "사용중인 모든 SPI주변 기기"
|
||||||
|
|
||||||
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
|
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
|
||||||
#: ports/raspberrypi/common-hal/busio/UART.c
|
|
||||||
msgid "All UART peripherals are in use"
|
msgid "All UART peripherals are in use"
|
||||||
msgstr "사용중인 모든 UART주변 기기"
|
msgstr "사용중인 모든 UART주변 기기"
|
||||||
|
|
||||||
@ -483,7 +503,7 @@ msgstr ""
|
|||||||
msgid "Already have all-matches listener"
|
msgid "Already have all-matches listener"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/coproc/__init__.c
|
#: ports/espressif/common-hal/espulp/ULP.c
|
||||||
#: shared-module/memorymonitor/AllocationAlarm.c
|
#: shared-module/memorymonitor/AllocationAlarm.c
|
||||||
#: shared-module/memorymonitor/AllocationSize.c
|
#: shared-module/memorymonitor/AllocationSize.c
|
||||||
msgid "Already running"
|
msgid "Already running"
|
||||||
@ -494,6 +514,11 @@ msgstr ""
|
|||||||
msgid "Already scanning for wifi networks"
|
msgid "Already scanning for wifi networks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
#, c-format
|
||||||
|
msgid "An error occurred while retrieving '%s':\n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/stm/common-hal/audiopwmio/PWMAudioOut.c
|
#: ports/stm/common-hal/audiopwmio/PWMAudioOut.c
|
||||||
msgid "Another PWMAudioOut is already active"
|
msgid "Another PWMAudioOut is already active"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -507,24 +532,16 @@ msgstr ""
|
|||||||
msgid "Array must contain halfwords (type 'H')"
|
msgid "Array must contain halfwords (type 'H')"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/alarm/SleepMemory.c shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
msgid "Array values should be single bytes."
|
msgid "Array values should be single bytes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
|
||||||
msgid "At most %d %q may be specified (not %d)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-module/memorymonitor/AllocationAlarm.c
|
#: shared-module/memorymonitor/AllocationAlarm.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Attempt to allocate %d blocks"
|
msgid "Attempt to allocate %d blocks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Attempted heap allocation when VM not running."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/raspberrypi/audio_dma.c
|
#: ports/raspberrypi/audio_dma.c
|
||||||
msgid "Audio conversion not implemented"
|
msgid "Audio conversion not implemented"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -575,20 +592,13 @@ msgid "Bitmap size and bits per value must match"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid "Boot device must be first device (interface #0)."
|
msgid "Boot device must be first (interface #0)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/mimxrt10xx/common-hal/busio/UART.c
|
#: ports/mimxrt10xx/common-hal/busio/UART.c
|
||||||
msgid "Both RX and TX required for flow control"
|
msgid "Both RX and TX required for flow control"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h
|
|
||||||
#: ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h
|
|
||||||
#: ports/atmel-samd/boards/circuitplayground_express_displayio/mpconfigboard.h
|
|
||||||
#: ports/atmel-samd/boards/meowmeow/mpconfigboard.h
|
|
||||||
msgid "Both buttons were pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
|
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
|
||||||
msgid "Both pins must support hardware interrupts"
|
msgid "Both pins must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -654,11 +664,6 @@ msgstr ""
|
|||||||
msgid "Bus pin %d is already in use"
|
msgid "Bus pin %d is already in use"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h
|
|
||||||
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
|
|
||||||
msgid "Button A was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/_bleio/UUID.c
|
#: shared-bindings/_bleio/UUID.c
|
||||||
msgid "Byte buffer must be 16 bytes."
|
msgid "Byte buffer must be 16 bytes."
|
||||||
msgstr "잘못된 크기의 버퍼. 16 바이트 여야합니다."
|
msgstr "잘못된 크기의 버퍼. 16 바이트 여야합니다."
|
||||||
@ -789,10 +794,6 @@ msgstr ""
|
|||||||
msgid "CircuitPython core code crashed hard. Whoops!\n"
|
msgid "CircuitPython core code crashed hard. Whoops!\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "CircuitPython was unable to allocate the heap."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-module/bitbangio/I2C.c
|
#: shared-module/bitbangio/I2C.c
|
||||||
msgid "Clock stretch too long"
|
msgid "Clock stretch too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -831,10 +832,6 @@ msgstr ""
|
|||||||
msgid "Couldn't allocate decoder"
|
msgid "Couldn't allocate decoder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Crash into the HardFault_Handler."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/stm/common-hal/analogio/AnalogOut.c
|
#: ports/stm/common-hal/analogio/AnalogOut.c
|
||||||
msgid "DAC Channel Init Error"
|
msgid "DAC Channel Init Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -897,6 +894,10 @@ msgstr ""
|
|||||||
msgid "Drive mode not used when direction is input."
|
msgid "Drive mode not used when direction is input."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/obj.c
|
||||||
|
msgid "During handling of the above exception, another exception occurred:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/aesio/aes.c
|
#: shared-bindings/aesio/aes.c
|
||||||
msgid "ECB only operates on 16 bytes at a time"
|
msgid "ECB only operates on 16 bytes at a time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -922,24 +923,16 @@ msgstr ""
|
|||||||
msgid "Error in regex"
|
msgid "Error in regex"
|
||||||
msgstr "Regex에 오류가 있습니다."
|
msgstr "Regex에 오류가 있습니다."
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Error in safemode.py."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c
|
#: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c
|
||||||
msgid "Error: Failure to bind"
|
msgid "Error: Failure to bind"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
|
|
||||||
#: shared-bindings/alarm/__init__.c shared-bindings/alarm/coproc/CoprocAlarm.c
|
|
||||||
#: shared-bindings/busio/SPI.c shared-bindings/coproc/Coproc.c
|
|
||||||
#: shared-bindings/coproc/__init__.c shared-bindings/microcontroller/Pin.c
|
|
||||||
#: shared-bindings/neopixel_write/__init__.c
|
|
||||||
msgid "Expected a %q"
|
|
||||||
msgstr "%q 이 예상되었습니다."
|
|
||||||
|
|
||||||
#: ports/raspberrypi/bindings/cyw43/__init__.c
|
|
||||||
msgid "Expected a %q or %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/alarm/__init__.c
|
#: shared-bindings/alarm/__init__.c
|
||||||
msgid "Expected an %q"
|
msgid "Expected a kind of %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/_bleio/Adapter.c
|
#: ports/espressif/common-hal/_bleio/Adapter.c
|
||||||
@ -1007,13 +1000,17 @@ msgid "Failed to write internal flash."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid "Fatal error."
|
msgid "Fault detected by hardware."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/moduerrno.c
|
#: py/moduerrno.c
|
||||||
msgid "File exists"
|
msgid "File exists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
msgid "File not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/canio/Listener.c
|
#: ports/atmel-samd/common-hal/canio/Listener.c
|
||||||
#: ports/espressif/common-hal/canio/Listener.c
|
#: ports/espressif/common-hal/canio/Listener.c
|
||||||
#: ports/stm/common-hal/canio/Listener.c
|
#: ports/stm/common-hal/canio/Listener.c
|
||||||
@ -1028,7 +1025,6 @@ msgstr ""
|
|||||||
msgid "Firmware is invalid"
|
msgid "Firmware is invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/coproc/Coproc.c
|
|
||||||
#: ports/espressif/common-hal/dualbank/__init__.c
|
#: ports/espressif/common-hal/dualbank/__init__.c
|
||||||
msgid "Firmware is too big"
|
msgid "Firmware is too big"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1070,6 +1066,8 @@ msgstr ""
|
|||||||
#: shared-bindings/displayio/Display.c
|
#: shared-bindings/displayio/Display.c
|
||||||
#: shared-bindings/displayio/EPaperDisplay.c
|
#: shared-bindings/displayio/EPaperDisplay.c
|
||||||
#: shared-bindings/framebufferio/FramebufferDisplay.c
|
#: shared-bindings/framebufferio/FramebufferDisplay.c
|
||||||
|
#: shared-module/displayio/Display.c
|
||||||
|
#: shared-module/framebufferio/FramebufferDisplay.c
|
||||||
msgid "Group already used"
|
msgid "Group already used"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1090,6 +1088,15 @@ msgstr ""
|
|||||||
msgid "Hardware in use, try alternative pins"
|
msgid "Hardware in use, try alternative pins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Heap allocation when VM not running."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid ""
|
||||||
|
"Heap was corrupted because the stack was too small. Increase stack size."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: extmod/vfs_posix_file.c py/objstringio.c
|
#: extmod/vfs_posix_file.c py/objstringio.c
|
||||||
msgid "I/O operation on closed file"
|
msgid "I/O operation on closed file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1107,11 +1114,6 @@ msgstr ""
|
|||||||
msgid "I2SOut not available"
|
msgid "I2SOut not available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/aesio/aes.c
|
|
||||||
#, c-format
|
|
||||||
msgid "IV must be %d bytes long"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/raspberrypi/bindings/rp2pio/StateMachine.c
|
#: ports/raspberrypi/bindings/rp2pio/StateMachine.c
|
||||||
msgid "In-buffer elements must be <= 4 bytes long"
|
msgid "In-buffer elements must be <= 4 bytes long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1196,6 +1198,7 @@ msgid "Internal define error"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
msgid "Internal error"
|
msgid "Internal error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1208,6 +1211,10 @@ msgstr ""
|
|||||||
msgid "Internal watchdog timer expired."
|
msgid "Internal watchdog timer expired."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Interrupt error."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
|
#: py/argcheck.c shared-bindings/digitalio/DigitalInOut.c
|
||||||
msgid "Invalid %q"
|
msgid "Invalid %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1242,6 +1249,11 @@ msgstr ""
|
|||||||
msgid "Invalid bits per value"
|
msgid "Invalid bits per value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
#, c-format
|
||||||
|
msgid "Invalid byte %.*s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/imagecapture/ParallelImageCapture.c
|
#: ports/atmel-samd/common-hal/imagecapture/ParallelImageCapture.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Invalid data_pins[%d]"
|
msgid "Invalid data_pins[%d]"
|
||||||
@ -1251,18 +1263,10 @@ msgstr ""
|
|||||||
msgid "Invalid format chunk size"
|
msgid "Invalid format chunk size"
|
||||||
msgstr "형식 청크 크기가 잘못되었습니다"
|
msgstr "형식 청크 크기가 잘못되었습니다"
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Invalid memory access."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/wifi/Radio.c
|
#: ports/espressif/common-hal/wifi/Radio.c
|
||||||
msgid "Invalid multicast MAC address"
|
msgid "Invalid multicast MAC address"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/busio/UART.c
|
|
||||||
msgid "Invalid pins"
|
|
||||||
msgstr "핀이 유효하지 않습니다"
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
||||||
msgid "Invalid size"
|
msgid "Invalid size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1276,10 +1280,18 @@ msgstr ""
|
|||||||
msgid "Invalid state"
|
msgid "Invalid state"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
msgid "Invalid unicode escape"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/aesio/aes.c
|
#: shared-bindings/aesio/aes.c
|
||||||
msgid "Key must be 16, 24, or 32 bytes long"
|
msgid "Key must be 16, 24, or 32 bytes long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-module/os/getenv.c
|
||||||
|
msgid "Key not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/is31fl3741/FrameBuffer.c
|
#: shared-module/is31fl3741/FrameBuffer.c
|
||||||
msgid "LED mappings must match display size"
|
msgid "LED mappings must match display size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1386,6 +1398,10 @@ msgstr ""
|
|||||||
msgid "NVS Error"
|
msgid "NVS Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/socketpool/SocketPool.c
|
||||||
|
msgid "Name or service not known"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/qstr.c
|
#: py/qstr.c
|
||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1500,11 +1516,6 @@ msgstr ""
|
|||||||
msgid "No long integer support"
|
msgid "No long integer support"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/usb_hid/__init__.c
|
|
||||||
#, c-format
|
|
||||||
msgid "No more than %d HID devices allowed"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/wifi/Radio.c
|
#: shared-bindings/wifi/Radio.c
|
||||||
msgid "No network with that ssid"
|
msgid "No network with that ssid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1540,10 +1551,6 @@ msgstr ""
|
|||||||
msgid "No timer available"
|
msgid "No timer available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "Nordic system firmware failure assertion."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||||
msgid "Nordic system firmware out of memory"
|
msgid "Nordic system firmware out of memory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1563,10 +1570,6 @@ msgstr ""
|
|||||||
msgid "Not playing"
|
msgid "Not playing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_bleio/__init__.c
|
|
||||||
msgid "Not settable"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
#: ports/espressif/common-hal/paralleldisplay/ParallelBus.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Number of data_pins must be 8 or 16, not %d"
|
msgid "Number of data_pins must be 8 or 16, not %d"
|
||||||
@ -1629,11 +1632,14 @@ msgid ""
|
|||||||
"%d bpp given"
|
"%d bpp given"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/alarm/coproc/CoprocAlarm.c
|
|
||||||
#: ports/espressif/common-hal/alarm/touch/TouchAlarm.c
|
#: ports/espressif/common-hal/alarm/touch/TouchAlarm.c
|
||||||
msgid "Only one %q can be set in deep sleep."
|
msgid "Only one %q can be set in deep sleep."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/espulp/ULPAlarm.c
|
||||||
|
msgid "Only one %q can be set."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/i2ctarget/I2CTarget.c
|
#: ports/espressif/common-hal/i2ctarget/I2CTarget.c
|
||||||
#: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c
|
#: ports/raspberrypi/common-hal/i2ctarget/I2CTarget.c
|
||||||
msgid "Only one address is allowed"
|
msgid "Only one address is allowed"
|
||||||
@ -1666,6 +1672,10 @@ msgstr ""
|
|||||||
msgid "Operation timed out"
|
msgid "Operation timed out"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
|
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 ports/espressif/esp_error.c
|
||||||
msgid "Out of memory"
|
msgid "Out of memory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1789,6 +1799,10 @@ msgstr ""
|
|||||||
msgid "Program size invalid"
|
msgid "Program size invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/common-hal/espulp/ULP.c
|
||||||
|
msgid "Program too long"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/digitalio/DigitalInOut.c
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
msgid "Pull not used when direction is output."
|
msgid "Pull not used when direction is output."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1828,8 +1842,9 @@ msgstr ""
|
|||||||
msgid "Random number generation error"
|
msgid "Random number generation error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/_bleio/__init__.c
|
||||||
#: shared-bindings/memorymonitor/AllocationSize.c
|
#: shared-bindings/memorymonitor/AllocationSize.c
|
||||||
#: shared-bindings/pulseio/PulseIn.c
|
#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c
|
||||||
msgid "Read-only"
|
msgid "Read-only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1837,10 +1852,6 @@ msgstr ""
|
|||||||
msgid "Read-only filesystem"
|
msgid "Read-only filesystem"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/displayio/Bitmap.c
|
|
||||||
msgid "Read-only object"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
#: ports/espressif/common-hal/espidf/__init__.c ports/espressif/esp_error.c
|
||||||
msgid "Received response was invalid"
|
msgid "Received response was invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1933,7 +1944,7 @@ msgstr ""
|
|||||||
msgid "Sleep Memory not available"
|
msgid "Sleep Memory not available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/alarm/SleepMemory.c shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
msgid "Slice and value different lengths."
|
msgid "Slice and value different lengths."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1970,6 +1981,10 @@ msgstr ""
|
|||||||
msgid "Stereo right must be on PWM channel B"
|
msgid "Stereo right must be on PWM channel B"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: 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
|
#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
|
||||||
msgid "Supply at least one UART pin"
|
msgid "Supply at least one UART pin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1987,35 +2002,11 @@ msgid "Temperature read timed out"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid "The BOOT button was pressed at start up.\n"
|
msgid "The `microcontroller` module was used to boot into safe mode."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: py/obj.c
|
||||||
msgid ""
|
msgid "The above exception was the direct cause of the following exception:"
|
||||||
"The CircuitPython heap was corrupted because the stack was too small.\n"
|
|
||||||
"Increase the stack size if you know how. If not:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
|
|
||||||
msgid "The SW38 button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h
|
|
||||||
msgid "The VOLUME button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid ""
|
|
||||||
"The `microcontroller` module was used to boot into safe mode. Press reset to "
|
|
||||||
"exit safe mode."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/boards/m5stack_atom_lite/mpconfigboard.h
|
|
||||||
msgid "The central button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/boards/aramcon2_badge/mpconfigboard.h
|
|
||||||
msgid "The left button was pressed at start up.\n"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
@ -2023,10 +2014,7 @@ msgid "The length of rgb_pins must be 6, 12, 18, 24, or 30"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid "The power dipped. Make sure you are providing enough power."
|
||||||
"The microcontroller's power dipped. Make sure your power supply provides\n"
|
|
||||||
"enough power for the whole circuit and press reset (after ejecting "
|
|
||||||
"CIRCUITPY)."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/audiomixer/MixerVoice.c
|
#: shared-module/audiomixer/MixerVoice.c
|
||||||
@ -2045,6 +2033,10 @@ msgstr ""
|
|||||||
msgid "The sample's signedness does not match the mixer's"
|
msgid "The sample's signedness does not match the mixer's"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Third-party firmware fatal error."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/imagecapture/ParallelImageCapture.c
|
#: shared-module/imagecapture/ParallelImageCapture.c
|
||||||
msgid "This microcontroller does not support continuous capture."
|
msgid "This microcontroller does not support continuous capture."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2077,10 +2069,6 @@ msgstr ""
|
|||||||
msgid "Timeout is too long: Maximum timeout length is %d seconds"
|
msgid "Timeout is too long: Maximum timeout length is %d seconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
|
||||||
msgid "To exit, please reset the board without requesting safe mode."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
||||||
msgid "Too many channels in sample"
|
msgid "Too many channels in sample"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2125,6 +2113,10 @@ msgstr ""
|
|||||||
msgid "UART init"
|
msgid "UART init"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/busio/UART.c
|
||||||
|
msgid "UART peripheral in use"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/stm/common-hal/busio/UART.c
|
#: ports/stm/common-hal/busio/UART.c
|
||||||
msgid "UART re-init"
|
msgid "UART re-init"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2173,6 +2165,10 @@ msgstr ""
|
|||||||
msgid "Unable to allocate buffers for signed conversion"
|
msgid "Unable to allocate buffers for signed conversion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "Unable to allocate the heap."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/busio/I2C.c
|
#: ports/espressif/common-hal/busio/I2C.c
|
||||||
msgid "Unable to create lock"
|
msgid "Unable to create lock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2196,11 +2192,12 @@ msgid "Unable to read color palette data"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/mdns/Server.c
|
#: ports/espressif/common-hal/mdns/Server.c
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
msgid "Unable to start mDNS query"
|
msgid "Unable to start mDNS query"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/memorymap/AddressRange.c
|
||||||
msgid "Unable to write"
|
msgid "Unable to write to address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
@ -2271,6 +2268,7 @@ msgid "Unkown error code %d"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
|
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
|
||||||
|
#: shared-module/_pixelmap/PixelMap.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Unmatched number of items on RHS (expected %d, got %d)."
|
msgid "Unmatched number of items on RHS (expected %d, got %d)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2355,6 +2353,18 @@ msgstr ""
|
|||||||
msgid "Wi-Fi: "
|
msgid "Wi-Fi: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "Wifi is in access point mode."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "Wifi is in station mode."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/raspberrypi/common-hal/wifi/Radio.c
|
||||||
|
msgid "Wifi is not enabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: main.c
|
#: main.c
|
||||||
msgid "Woken up by alarm.\n"
|
msgid "Woken up by alarm.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2364,13 +2374,48 @@ msgstr ""
|
|||||||
msgid "Writes not supported on Characteristic"
|
msgid "Writes not supported on Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: ports/atmel-samd/boards/circuitplayground_express/mpconfigboard.h
|
||||||
msgid "You are in safe mode because:\n"
|
#: ports/atmel-samd/boards/circuitplayground_express_crickit/mpconfigboard.h
|
||||||
|
#: 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 ""
|
||||||
|
|
||||||
|
#: 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 ""
|
||||||
|
|
||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid "You pressed the BOOT button at start up"
|
||||||
"You pressed the reset button during boot. Press again to exit safe mode."
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
|
||||||
|
msgid "You pressed the SW38 button at start up."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ports/espressif/boards/hardkernel_odroid_go/mpconfigboard.h
|
||||||
|
msgid "You pressed the VOLUME button at start up."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: 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 ""
|
||||||
|
|
||||||
|
#: ports/nrf/boards/aramcon2_badge/mpconfigboard.h
|
||||||
|
msgid "You pressed the left button at start up."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/safe_mode.c
|
||||||
|
msgid "You pressed the reset button during boot."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: supervisor/shared/micropython.c
|
||||||
|
msgid "[truncated due to length]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objtype.c
|
#: py/objtype.c
|
||||||
@ -2442,8 +2487,12 @@ msgstr ""
|
|||||||
msgid "array has too many dimensions"
|
msgid "array has too many dimensions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: extmod/ulab/code/ndarray.c
|
||||||
|
msgid "array is too big"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
|
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
|
||||||
#: shared-bindings/coproc/CoprocMemory.c shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/memorymap/AddressRange.c shared-bindings/nvm/ByteArray.c
|
||||||
msgid "array/bytes required on right side"
|
msgid "array/bytes required on right side"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2536,10 +2585,6 @@ msgstr ""
|
|||||||
msgid "buffer too small for requested bytes"
|
msgid "buffer too small for requested bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
|
|
||||||
msgid "byteorder is not a string"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objarray.c
|
#: py/objarray.c
|
||||||
msgid "bytes length not a multiple of item size"
|
msgid "bytes length not a multiple of item size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2581,14 +2626,10 @@ msgstr ""
|
|||||||
msgid "can't cancel self"
|
msgid "can't cancel self"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
|
#: py/obj.c py/objint.c py/runtime.c shared-module/adafruit_pixelbuf/PixelBuf.c
|
||||||
msgid "can't convert %q to %q"
|
msgid "can't convert %q to %q"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/runtime.c
|
|
||||||
msgid "can't convert %q to int"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/obj.c
|
#: py/obj.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "can't convert %s to complex"
|
msgid "can't convert %s to complex"
|
||||||
@ -2670,6 +2711,10 @@ msgstr ""
|
|||||||
msgid "can't set attribute"
|
msgid "can't set attribute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: py/runtime.c
|
||||||
|
msgid "can't set attribute '%q'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: py/emitnative.c
|
#: py/emitnative.c
|
||||||
msgid "can't store '%q'"
|
msgid "can't store '%q'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2772,10 +2817,6 @@ msgstr ""
|
|||||||
msgid "comparison of int and uint"
|
msgid "comparison of int and uint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objcomplex.c
|
|
||||||
msgid "complex division by zero"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objfloat.c py/parsenum.c
|
#: py/objfloat.c py/parsenum.c
|
||||||
msgid "complex values not supported"
|
msgid "complex values not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2878,12 +2919,11 @@ msgstr ""
|
|||||||
msgid "div/mod not implemented for uint"
|
msgid "div/mod not implemented for uint"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objfloat.c py/objint_mpz.c
|
#: extmod/ulab/code/numpy/create.c
|
||||||
msgid "divide by zero"
|
msgid "divide by zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/modmath.c py/objint_longlong.c py/runtime.c
|
#: py/runtime.c
|
||||||
#: shared-bindings/math/__init__.c
|
|
||||||
msgid "division by zero"
|
msgid "division by zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2924,9 +2964,9 @@ msgstr ""
|
|||||||
msgid "error = 0x%08lX"
|
msgid "error = 0x%08lX"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/esp32_camera/Camera.c
|
#: ports/espressif/common-hal/espcamera/Camera.c
|
||||||
msgid ""
|
msgid ""
|
||||||
"esp32_camera.Camera requires reserved PSRAM to be configured. See the "
|
"espcamera.Camera requires reserved PSRAM to be configured. See the "
|
||||||
"documentation for instructions."
|
"documentation for instructions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2934,14 +2974,6 @@ msgstr ""
|
|||||||
msgid "exceptions must derive from BaseException"
|
msgid "exceptions must derive from BaseException"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/canio/CAN.c
|
|
||||||
msgid "expected '%q' but got '%q'"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/canio/CAN.c
|
|
||||||
msgid "expected '%q' or '%q' but got '%q'"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objstr.c
|
#: py/objstr.c
|
||||||
msgid "expected ':' after format specifier"
|
msgid "expected ':' after format specifier"
|
||||||
msgstr "':'이 예상되었습니다"
|
msgstr "':'이 예상되었습니다"
|
||||||
@ -3040,10 +3072,6 @@ msgstr ""
|
|||||||
msgid "format requires a dict"
|
msgid "format requires a dict"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Processor.c
|
|
||||||
msgid "frequency is read-only for this board"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objdeque.c
|
#: py/objdeque.c
|
||||||
msgid "full"
|
msgid "full"
|
||||||
msgstr "완전한(full)"
|
msgstr "완전한(full)"
|
||||||
@ -3156,8 +3184,12 @@ msgstr ""
|
|||||||
msgid "index is out of bounds"
|
msgid "index is out of bounds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/_pixelmap/PixelMap.c
|
||||||
|
msgid "index must be tuple or int"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: extmod/ulab/code/numpy/numerical.c extmod/ulab/code/ulab_tools.c
|
#: extmod/ulab/code/numpy/numerical.c extmod/ulab/code/ulab_tools.c
|
||||||
#: ports/espressif/common-hal/pulseio/PulseIn.c py/obj.c
|
#: ports/espressif/common-hal/pulseio/PulseIn.c
|
||||||
#: shared-bindings/bitmaptools/__init__.c
|
#: shared-bindings/bitmaptools/__init__.c
|
||||||
msgid "index out of range"
|
msgid "index out of range"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3255,10 +3287,6 @@ msgstr ""
|
|||||||
msgid "inputs are not iterable"
|
msgid "inputs are not iterable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/parsenum.c
|
|
||||||
msgid "int() arg 2 must be >= 2 and <= 36"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: extmod/ulab/code/numpy/approx.c
|
#: extmod/ulab/code/numpy/approx.c
|
||||||
msgid "interp is defined for 1D iterables of equal length"
|
msgid "interp is defined for 1D iterables of equal length"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3315,7 +3343,7 @@ msgstr "키가 유효하지 않습니다"
|
|||||||
msgid "invalid micropython decorator"
|
msgid "invalid micropython decorator"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/esp32_camera/Camera.c
|
#: ports/espressif/common-hal/espcamera/Camera.c
|
||||||
msgid "invalid setting"
|
msgid "invalid setting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3340,10 +3368,6 @@ msgstr "구문(syntax)가 정수가 유효하지 않습니다"
|
|||||||
msgid "invalid syntax for number"
|
msgid "invalid syntax for number"
|
||||||
msgstr "숫자에 대한 구문(syntax)가 유효하지 않습니다"
|
msgstr "숫자에 대한 구문(syntax)가 유효하지 않습니다"
|
||||||
|
|
||||||
#: py/objexcept.c
|
|
||||||
msgid "invalid traceback"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/objtype.c
|
#: py/objtype.c
|
||||||
msgid "issubclass() arg 1 must be a class"
|
msgid "issubclass() arg 1 must be a class"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3400,19 +3424,17 @@ msgstr ""
|
|||||||
msgid "local variable referenced before assignment"
|
msgid "local variable referenced before assignment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objint.c
|
|
||||||
msgid "long int not supported in this build"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/canio/CAN.c
|
#: ports/espressif/common-hal/canio/CAN.c
|
||||||
msgid "loopback + silent mode not supported by peripheral"
|
msgid "loopback + silent mode not supported by peripheral"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/mdns/Server.c
|
#: ports/espressif/common-hal/mdns/Server.c
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
msgid "mDNS already initialized"
|
msgid "mDNS already initialized"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/mdns/Server.c
|
#: ports/espressif/common-hal/mdns/Server.c
|
||||||
|
#: ports/raspberrypi/common-hal/mdns/Server.c
|
||||||
msgid "mDNS only works with built-in WiFi"
|
msgid "mDNS only works with built-in WiFi"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3541,6 +3563,10 @@ msgstr ""
|
|||||||
msgid "negative shift count"
|
msgid "negative shift count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/_pixelmap/PixelMap.c
|
||||||
|
msgid "nested index must be int"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: shared-module/sdcardio/SDCard.c
|
#: shared-module/sdcardio/SDCard.c
|
||||||
msgid "no SD card"
|
msgid "no SD card"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3574,7 +3600,7 @@ msgstr ""
|
|||||||
msgid "no response from SD card"
|
msgid "no response from SD card"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/esp32_camera/Camera.c py/objobject.c py/runtime.c
|
#: ports/espressif/common-hal/espcamera/Camera.c py/objobject.c py/runtime.c
|
||||||
msgid "no such attribute"
|
msgid "no such attribute"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3710,6 +3736,10 @@ msgstr ""
|
|||||||
msgid "only mono is supported"
|
msgid "only mono is supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: extmod/ulab/code/numpy/create.c
|
||||||
|
msgid "only ndarrays can be concatenated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/stm/common-hal/audiobusio/PDMIn.c
|
#: ports/stm/common-hal/audiobusio/PDMIn.c
|
||||||
msgid "only oversample=64 is supported"
|
msgid "only oversample=64 is supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3720,7 +3750,7 @@ msgid "only sample_rate=16000 is supported"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objarray.c py/objstr.c py/objstrunicode.c py/objtuple.c
|
#: py/objarray.c py/objstr.c py/objstrunicode.c py/objtuple.c
|
||||||
#: shared-bindings/alarm/SleepMemory.c shared-bindings/coproc/CoprocMemory.c
|
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
|
||||||
#: shared-bindings/nvm/ByteArray.c
|
#: shared-bindings/nvm/ByteArray.c
|
||||||
msgid "only slices with step=1 (aka None) are supported"
|
msgid "only slices with step=1 (aka None) are supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3936,10 +3966,6 @@ msgstr ""
|
|||||||
msgid "slice step can't be zero"
|
msgid "slice step can't be zero"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objslice.c
|
|
||||||
msgid "slice step cannot be zero"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/nativeglue.c
|
#: py/nativeglue.c
|
||||||
msgid "slice unsupported"
|
msgid "slice unsupported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3988,10 +4014,6 @@ msgstr ""
|
|||||||
msgid "start/end indices"
|
msgid "start/end indices"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/random/__init__.c
|
|
||||||
msgid "step must be non-zero"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/random/__init__.c
|
#: shared-bindings/random/__init__.c
|
||||||
msgid "stop not reachable from start"
|
msgid "stop not reachable from start"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -4000,10 +4022,6 @@ msgstr ""
|
|||||||
msgid "stream operation not supported"
|
msgid "stream operation not supported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objstrunicode.c
|
|
||||||
msgid "string indices must be integers, not %q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: py/stream.c
|
#: py/stream.c
|
||||||
msgid "string not supported; use bytes or bytearray"
|
msgid "string not supported; use bytes or bytearray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -4036,10 +4054,6 @@ msgstr ""
|
|||||||
msgid "syntax error in uctypes descriptor"
|
msgid "syntax error in uctypes descriptor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/time/__init__.c
|
|
||||||
msgid "time.struct_time() takes a 9-sequence"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/watchdog/WatchDogTimer.c
|
#: ports/atmel-samd/common-hal/watchdog/WatchDogTimer.c
|
||||||
#: ports/espressif/common-hal/watchdog/WatchDogTimer.c
|
#: ports/espressif/common-hal/watchdog/WatchDogTimer.c
|
||||||
#: ports/nrf/common-hal/watchdog/WatchDogTimer.c
|
#: ports/nrf/common-hal/watchdog/WatchDogTimer.c
|
||||||
@ -4321,10 +4335,6 @@ msgstr ""
|
|||||||
msgid "y value out of bounds"
|
msgid "y value out of bounds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/objrange.c
|
|
||||||
msgid "zero step"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: extmod/ulab/code/scipy/signal/signal.c
|
#: extmod/ulab/code/scipy/signal/signal.c
|
||||||
msgid "zi must be an ndarray"
|
msgid "zi must be an ndarray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -4337,6 +4347,12 @@ msgstr ""
|
|||||||
msgid "zi must be of shape (n_section, 2)"
|
msgid "zi must be of shape (n_section, 2)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Expected a %q"
|
||||||
|
#~ msgstr "%q 이 예상되었습니다."
|
||||||
|
|
||||||
|
#~ msgid "Invalid pins"
|
||||||
|
#~ msgstr "핀이 유효하지 않습니다"
|
||||||
|
|
||||||
#~ msgid "%q indices must be integers, not %s"
|
#~ msgid "%q indices must be integers, not %s"
|
||||||
#~ msgstr "%q 인덱스는 %s 가 아닌 정수 여야합니다"
|
#~ msgstr "%q 인덱스는 %s 가 아닌 정수 여야합니다"
|
||||||
|
|
||||||
|
509
locale/nl.po
509
locale/nl.po
File diff suppressed because it is too large
Load Diff
486
locale/pl.po
486
locale/pl.po
File diff suppressed because it is too large
Load Diff
683
locale/pt_BR.po
683
locale/pt_BR.po
File diff suppressed because it is too large
Load Diff
645
locale/ru.po
645
locale/ru.po
File diff suppressed because it is too large
Load Diff
679
locale/sv.po
679
locale/sv.po
File diff suppressed because it is too large
Load Diff
723
locale/tr.po
723
locale/tr.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
114
main.c
114
main.c
@ -218,12 +218,10 @@ void supervisor_execution_status(void) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define STRING_LIST(...) {__VA_ARGS__, ""}
|
|
||||||
|
|
||||||
// Look for the first file that exists in the list of filenames, using mp_import_stat().
|
// Look for the first file that exists in the list of filenames, using mp_import_stat().
|
||||||
// Return its index. If no file found, return -1.
|
// Return its index. If no file found, return -1.
|
||||||
STATIC const char *first_existing_file_in_list(const char *const *filenames) {
|
STATIC const char *first_existing_file_in_list(const char *const *filenames, size_t n_filenames) {
|
||||||
for (int i = 0; filenames[i] != (char *)""; i++) {
|
for (size_t i = 0; i < n_filenames; i++) {
|
||||||
mp_import_stat_t stat = mp_import_stat(filenames[i]);
|
mp_import_stat_t stat = mp_import_stat(filenames[i]);
|
||||||
if (stat == MP_IMPORT_STAT_FILE) {
|
if (stat == MP_IMPORT_STAT_FILE) {
|
||||||
return filenames[i];
|
return filenames[i];
|
||||||
@ -232,11 +230,11 @@ STATIC const char *first_existing_file_in_list(const char *const *filenames) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC bool maybe_run_list(const char *const *filenames) {
|
STATIC bool maybe_run_list(const char *const *filenames, size_t n_filenames) {
|
||||||
_exec_result.return_code = 0;
|
_exec_result.return_code = 0;
|
||||||
_exec_result.exception = MP_OBJ_NULL;
|
_exec_result.exception = MP_OBJ_NULL;
|
||||||
_exec_result.exception_line = 0;
|
_exec_result.exception_line = 0;
|
||||||
_current_executing_filename = first_existing_file_in_list(filenames);
|
_current_executing_filename = first_existing_file_in_list(filenames, n_filenames);
|
||||||
if (_current_executing_filename == NULL) {
|
if (_current_executing_filename == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -360,7 +358,7 @@ STATIC void print_code_py_status_message(safe_mode_t safe_mode) {
|
|||||||
} else {
|
} else {
|
||||||
serial_write_compressed(translate("Auto-reload is off.\n"));
|
serial_write_compressed(translate("Auto-reload is off.\n"));
|
||||||
}
|
}
|
||||||
if (safe_mode != NO_SAFE_MODE) {
|
if (safe_mode != SAFE_MODE_NONE) {
|
||||||
serial_write_compressed(translate("Running in safe mode! Not running saved code.\n"));
|
serial_write_compressed(translate("Running in safe mode! Not running saved code.\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -386,17 +384,19 @@ STATIC bool run_code_py(safe_mode_t safe_mode, bool *simulate_reset) {
|
|||||||
|
|
||||||
// Do the filesystem flush check before reload in case another write comes
|
// Do the filesystem flush check before reload in case another write comes
|
||||||
// in while we're doing the flush.
|
// in while we're doing the flush.
|
||||||
if (safe_mode == NO_SAFE_MODE) {
|
if (safe_mode == SAFE_MODE_NONE) {
|
||||||
stack_resize();
|
stack_resize();
|
||||||
filesystem_flush();
|
filesystem_flush();
|
||||||
}
|
}
|
||||||
if (safe_mode == NO_SAFE_MODE && !autoreload_pending()) {
|
if (safe_mode == SAFE_MODE_NONE && !autoreload_pending()) {
|
||||||
static const char *const supported_filenames[] = STRING_LIST(
|
static const char *const supported_filenames[] = {
|
||||||
"code.txt", "code.py", "main.py", "main.txt");
|
"code.txt", "code.py", "main.py", "main.txt"
|
||||||
|
};
|
||||||
#if CIRCUITPY_FULL_BUILD
|
#if CIRCUITPY_FULL_BUILD
|
||||||
static const char *const double_extension_filenames[] = STRING_LIST(
|
static const char *const double_extension_filenames[] = {
|
||||||
"code.txt.py", "code.py.txt", "code.txt.txt","code.py.py",
|
"code.txt.py", "code.py.txt", "code.txt.txt","code.py.py",
|
||||||
"main.txt.py", "main.py.txt", "main.txt.txt","main.py.py");
|
"main.txt.py", "main.py.txt", "main.txt.txt","main.py.py"
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
supervisor_allocation *heap = allocate_remaining_memory();
|
supervisor_allocation *heap = allocate_remaining_memory();
|
||||||
@ -410,14 +410,15 @@ STATIC bool run_code_py(safe_mode_t safe_mode, bool *simulate_reset) {
|
|||||||
|
|
||||||
// Check if a different run file has been allocated
|
// Check if a different run file has been allocated
|
||||||
if (next_code_allocation) {
|
if (next_code_allocation) {
|
||||||
((next_code_info_t *)next_code_allocation->ptr)->options &= ~SUPERVISOR_NEXT_CODE_OPT_NEWLY_SET;
|
next_code_info_t *info = ((next_code_info_t *)next_code_allocation->ptr);
|
||||||
next_code_options = ((next_code_info_t *)next_code_allocation->ptr)->options;
|
info->options &= ~SUPERVISOR_NEXT_CODE_OPT_NEWLY_SET;
|
||||||
if (((next_code_info_t *)next_code_allocation->ptr)->filename[0] != '\0') {
|
next_code_options = info->options;
|
||||||
const char *next_list[] = {((next_code_info_t *)next_code_allocation->ptr)->filename, ""};
|
if (info->filename[0] != '\0') {
|
||||||
// This is where the user's python code is actually executed:
|
// This is where the user's python code is actually executed:
|
||||||
found_main = maybe_run_list(next_list);
|
const char *const filenames[] = { info->filename };
|
||||||
|
found_main = maybe_run_list(filenames, MP_ARRAY_SIZE(filenames));
|
||||||
if (!found_main) {
|
if (!found_main) {
|
||||||
serial_write(((next_code_info_t *)next_code_allocation->ptr)->filename);
|
serial_write(info->filename);
|
||||||
serial_write_compressed(translate(" not found.\n"));
|
serial_write_compressed(translate(" not found.\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -425,11 +426,11 @@ STATIC bool run_code_py(safe_mode_t safe_mode, bool *simulate_reset) {
|
|||||||
// Otherwise, default to the standard list of filenames
|
// Otherwise, default to the standard list of filenames
|
||||||
if (!found_main) {
|
if (!found_main) {
|
||||||
// This is where the user's python code is actually executed:
|
// This is where the user's python code is actually executed:
|
||||||
found_main = maybe_run_list(supported_filenames);
|
found_main = maybe_run_list(supported_filenames, MP_ARRAY_SIZE(supported_filenames));
|
||||||
// If that didn't work, double check the extensions
|
// If that didn't work, double check the extensions
|
||||||
#if CIRCUITPY_FULL_BUILD
|
#if CIRCUITPY_FULL_BUILD
|
||||||
if (!found_main) {
|
if (!found_main) {
|
||||||
found_main = maybe_run_list(double_extension_filenames);
|
found_main = maybe_run_list(double_extension_filenames, MP_ARRAY_SIZE(double_extension_filenames));
|
||||||
if (found_main) {
|
if (found_main) {
|
||||||
serial_write_compressed(translate("WARNING: Your code filename has two extensions\n"));
|
serial_write_compressed(translate("WARNING: Your code filename has two extensions\n"));
|
||||||
}
|
}
|
||||||
@ -509,7 +510,7 @@ STATIC bool run_code_py(safe_mode_t safe_mode, bool *simulate_reset) {
|
|||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
if (_exec_result.return_code != PYEXEC_EXCEPTION) {
|
if (_exec_result.return_code != PYEXEC_EXCEPTION) {
|
||||||
if (safe_mode == NO_SAFE_MODE) {
|
if (safe_mode == SAFE_MODE_NONE) {
|
||||||
color = ALL_DONE;
|
color = ALL_DONE;
|
||||||
blink_count = ALL_DONE_BLINKS;
|
blink_count = ALL_DONE_BLINKS;
|
||||||
} else {
|
} else {
|
||||||
@ -729,8 +730,34 @@ STATIC bool run_code_py(safe_mode_t safe_mode, bool *simulate_reset) {
|
|||||||
|
|
||||||
vstr_t *boot_output;
|
vstr_t *boot_output;
|
||||||
|
|
||||||
|
#if CIRCUITPY_SAFEMODE_PY
|
||||||
|
STATIC void __attribute__ ((noinline)) run_safemode_py(safe_mode_t safe_mode) {
|
||||||
|
// Don't run if we aren't in safe mode or we won't be able to find safemode.py.
|
||||||
|
// Also don't run if it's a user-initiated safemode (pressing button(s) during boot),
|
||||||
|
// since that's deliberate.
|
||||||
|
if (safe_mode == SAFE_MODE_NONE || safe_mode == SAFE_MODE_USER || !filesystem_present()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
supervisor_allocation *heap = allocate_remaining_memory();
|
||||||
|
start_mp(heap);
|
||||||
|
|
||||||
|
static const char *const safemode_py_filenames[] = {"safemode.py", "safemode.txt"};
|
||||||
|
maybe_run_list(safemode_py_filenames, MP_ARRAY_SIZE(safemode_py_filenames));
|
||||||
|
|
||||||
|
// If safemode.py itself caused an error, change the safe_mode state to indicate that.
|
||||||
|
if (_exec_result.exception != MP_OBJ_NULL &&
|
||||||
|
_exec_result.exception != MP_OBJ_SENTINEL) {
|
||||||
|
set_safe_mode(SAFE_MODE_SAFEMODE_PY_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup_after_vm(heap, _exec_result.exception);
|
||||||
|
_exec_result.exception = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
STATIC void __attribute__ ((noinline)) run_boot_py(safe_mode_t safe_mode) {
|
STATIC void __attribute__ ((noinline)) run_boot_py(safe_mode_t safe_mode) {
|
||||||
if (safe_mode == NO_HEAP) {
|
if (safe_mode == SAFE_MODE_NO_HEAP) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -738,10 +765,10 @@ STATIC void __attribute__ ((noinline)) run_boot_py(safe_mode_t safe_mode) {
|
|||||||
|
|
||||||
// There is USB setup to do even if boot.py is not actually run.
|
// There is USB setup to do even if boot.py is not actually run.
|
||||||
const bool ok_to_run = filesystem_present()
|
const bool ok_to_run = filesystem_present()
|
||||||
&& safe_mode == NO_SAFE_MODE
|
&& safe_mode == SAFE_MODE_NONE
|
||||||
&& MP_STATE_VM(vfs_mount_table) != NULL;
|
&& MP_STATE_VM(vfs_mount_table) != NULL;
|
||||||
|
|
||||||
static const char *const boot_py_filenames[] = STRING_LIST("boot.py", "boot.txt");
|
static const char *const boot_py_filenames[] = {"boot.py", "boot.txt"};
|
||||||
|
|
||||||
// Do USB setup even if boot.py is not run.
|
// Do USB setup even if boot.py is not run.
|
||||||
|
|
||||||
@ -778,7 +805,7 @@ STATIC void __attribute__ ((noinline)) run_boot_py(safe_mode_t safe_mode) {
|
|||||||
port_boot_info();
|
port_boot_info();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool found_boot = maybe_run_list(boot_py_filenames);
|
bool found_boot = maybe_run_list(boot_py_filenames, MP_ARRAY_SIZE(boot_py_filenames));
|
||||||
(void)found_boot;
|
(void)found_boot;
|
||||||
|
|
||||||
|
|
||||||
@ -912,7 +939,7 @@ STATIC int run_repl(void) {
|
|||||||
|
|
||||||
int __attribute__((used)) main(void) {
|
int __attribute__((used)) main(void) {
|
||||||
// initialise the cpu and peripherals
|
// initialise the cpu and peripherals
|
||||||
safe_mode_t safe_mode = port_init();
|
set_safe_mode(port_init());
|
||||||
|
|
||||||
// Turn on RX and TX LEDs if we have them.
|
// Turn on RX and TX LEDs if we have them.
|
||||||
init_rxtx_leds();
|
init_rxtx_leds();
|
||||||
@ -924,9 +951,12 @@ int __attribute__((used)) main(void) {
|
|||||||
common_hal_nvm_bytearray_set_bytes(&common_hal_mcu_nvm_obj,0,&value_out,1);
|
common_hal_nvm_bytearray_set_bytes(&common_hal_mcu_nvm_obj,0,&value_out,1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Start the debug serial
|
||||||
|
serial_early_init();
|
||||||
|
|
||||||
// Wait briefly to give a reset window where we'll enter safe mode after the reset.
|
// Wait briefly to give a reset window where we'll enter safe mode after the reset.
|
||||||
if (safe_mode == NO_SAFE_MODE) {
|
if (get_safe_mode() == SAFE_MODE_NONE) {
|
||||||
safe_mode = wait_for_safe_mode_reset();
|
set_safe_mode(wait_for_safe_mode_reset());
|
||||||
}
|
}
|
||||||
|
|
||||||
stack_init();
|
stack_init();
|
||||||
@ -940,9 +970,6 @@ int __attribute__((used)) main(void) {
|
|||||||
supervisor_bluetooth_init();
|
supervisor_bluetooth_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Start the debug serial
|
|
||||||
serial_early_init();
|
|
||||||
|
|
||||||
#if !INTERNAL_FLASH_FILESYSTEM
|
#if !INTERNAL_FLASH_FILESYSTEM
|
||||||
// Set up anything that might need to get done before we try to use SPI flash
|
// Set up anything that might need to get done before we try to use SPI flash
|
||||||
// This is needed for some boards where flash relies on GPIO setup to work
|
// This is needed for some boards where flash relies on GPIO setup to work
|
||||||
@ -955,8 +982,8 @@ int __attribute__((used)) main(void) {
|
|||||||
|
|
||||||
// Check whether CIRCUITPY is available. No need to reset to get safe mode
|
// Check whether CIRCUITPY is available. No need to reset to get safe mode
|
||||||
// since we haven't run user code yet.
|
// since we haven't run user code yet.
|
||||||
if (!filesystem_init(safe_mode == NO_SAFE_MODE, false)) {
|
if (!filesystem_init(get_safe_mode() == SAFE_MODE_NONE, false)) {
|
||||||
safe_mode = NO_CIRCUITPY;
|
set_safe_mode(SAFE_MODE_NO_CIRCUITPY);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CIRCUITPY_ALARM
|
#if CIRCUITPY_ALARM
|
||||||
@ -981,16 +1008,23 @@ int __attribute__((used)) main(void) {
|
|||||||
supervisor_set_run_reason(RUN_REASON_STARTUP);
|
supervisor_set_run_reason(RUN_REASON_STARTUP);
|
||||||
|
|
||||||
// If not in safe mode turn on autoreload by default but before boot.py in case it wants to change it.
|
// If not in safe mode turn on autoreload by default but before boot.py in case it wants to change it.
|
||||||
if (safe_mode == NO_SAFE_MODE) {
|
if (get_safe_mode() == SAFE_MODE_NONE) {
|
||||||
autoreload_enable();
|
autoreload_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
// By default our internal flash is readonly to local python code and
|
// By default our internal flash is readonly to local python code and
|
||||||
// writable over USB. Set it here so that boot.py can change it.
|
// writable over USB. Set it here so that safemode.py or boot.py can change it.
|
||||||
filesystem_set_internal_concurrent_write_protection(true);
|
filesystem_set_internal_concurrent_write_protection(true);
|
||||||
filesystem_set_internal_writable_by_usb(CIRCUITPY_USB == 1);
|
filesystem_set_internal_writable_by_usb(CIRCUITPY_USB == 1);
|
||||||
|
|
||||||
run_boot_py(safe_mode);
|
#if CIRCUITPY_SAFEMODE_PY
|
||||||
|
// Run safemode.py if we ARE in safe mode.
|
||||||
|
// If safemode.py does not do a hard reset, and exits normally, we will continue on
|
||||||
|
// and report the safe mode as usual.
|
||||||
|
run_safemode_py(get_safe_mode());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
run_boot_py(get_safe_mode());
|
||||||
|
|
||||||
supervisor_workflow_start();
|
supervisor_workflow_start();
|
||||||
|
|
||||||
@ -1015,7 +1049,7 @@ int __attribute__((used)) main(void) {
|
|||||||
// If code.py did a fake deep sleep, pretend that we
|
// If code.py did a fake deep sleep, pretend that we
|
||||||
// are running code.py for the first time after a hard
|
// are running code.py for the first time after a hard
|
||||||
// reset. This will preserve any alarm information.
|
// reset. This will preserve any alarm information.
|
||||||
skip_repl = run_code_py(safe_mode, &simulate_reset);
|
skip_repl = run_code_py(get_safe_mode(), &simulate_reset);
|
||||||
} else {
|
} else {
|
||||||
skip_repl = false;
|
skip_repl = false;
|
||||||
}
|
}
|
||||||
@ -1075,14 +1109,14 @@ void gc_collect(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void NORETURN nlr_jump_fail(void *val) {
|
void NORETURN nlr_jump_fail(void *val) {
|
||||||
reset_into_safe_mode(MICROPY_NLR_JUMP_FAIL);
|
reset_into_safe_mode(SAFE_MODE_NLR_JUMP_FAIL);
|
||||||
while (true) {
|
while (true) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
static void NORETURN __fatal_error(const char *msg) {
|
static void NORETURN __fatal_error(const char *msg) {
|
||||||
reset_into_safe_mode(MICROPY_FATAL_ERROR);
|
reset_into_safe_mode(SAFE_MODE_HARD_FAULT);
|
||||||
while (true) {
|
while (true) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ endif
|
|||||||
|
|
||||||
ifeq ($(CHIP_FAMILY), same54)
|
ifeq ($(CHIP_FAMILY), same54)
|
||||||
PERIPHERALS_CHIP_FAMILY=sam_d5x_e5x
|
PERIPHERALS_CHIP_FAMILY=sam_d5x_e5x
|
||||||
OPTIMIZATION_FLAGS ?= -O2
|
OPTIMIZATION_FLAGS ?= -Os
|
||||||
# TinyUSB defines
|
# TinyUSB defines
|
||||||
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_SAME5X -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024
|
CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_SAME5X -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024
|
||||||
endif
|
endif
|
||||||
@ -293,7 +293,6 @@ SRC_C += \
|
|||||||
boards/$(BOARD)/board.c \
|
boards/$(BOARD)/board.c \
|
||||||
boards/$(BOARD)/pins.c \
|
boards/$(BOARD)/pins.c \
|
||||||
eic_handler.c \
|
eic_handler.c \
|
||||||
fatfs_port.c \
|
|
||||||
lib/tinyusb/src/portable/microchip/samd/dcd_samd.c \
|
lib/tinyusb/src/portable/microchip/samd/dcd_samd.c \
|
||||||
mphalport.c \
|
mphalport.c \
|
||||||
reset.c \
|
reset.c \
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#define CALIBRATE_CRYSTALLESS 1
|
#define CALIBRATE_CRYSTALLESS 1
|
||||||
|
|
||||||
// Explanation of how a user got into safe mode.
|
// Explanation of how a user got into safe mode.
|
||||||
#define BOARD_USER_SAFE_MODE_ACTION translate("Both buttons were pressed at start up.\n")
|
#define BOARD_USER_SAFE_MODE_ACTION translate("You pressed both buttons at start up.")
|
||||||
|
|
||||||
// Increase stack size slightly due to CPX library import nesting
|
// Increase stack size slightly due to CPX library import nesting
|
||||||
#define CIRCUITPY_DEFAULT_STACK_SIZE (4248) // divisible by 8
|
#define CIRCUITPY_DEFAULT_STACK_SIZE (4248) // divisible by 8
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#define CALIBRATE_CRYSTALLESS 1
|
#define CALIBRATE_CRYSTALLESS 1
|
||||||
|
|
||||||
// Explanation of how a user got into safe mode.
|
// Explanation of how a user got into safe mode.
|
||||||
#define BOARD_USER_SAFE_MODE_ACTION translate("Both buttons were pressed at start up.\n")
|
#define BOARD_USER_SAFE_MODE_ACTION translate("You pressed both buttons at start up.")
|
||||||
|
|
||||||
// Increase stack size slightly due to CPX library import nesting
|
// Increase stack size slightly due to CPX library import nesting
|
||||||
#define CIRCUITPY_DEFAULT_STACK_SIZE (4248) // divisible by 8
|
#define CIRCUITPY_DEFAULT_STACK_SIZE (4248) // divisible by 8
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#define CALIBRATE_CRYSTALLESS 1
|
#define CALIBRATE_CRYSTALLESS 1
|
||||||
|
|
||||||
// Explanation of how a user got into safe mode.
|
// Explanation of how a user got into safe mode.
|
||||||
#define BOARD_USER_SAFE_MODE_ACTION translate("Both buttons were pressed at start up.\n")
|
#define BOARD_USER_SAFE_MODE_ACTION translate("You pressed both buttons at start up.")
|
||||||
|
|
||||||
// Increase stack size slightly due to CPX library import nesting.
|
// Increase stack size slightly due to CPX library import nesting.
|
||||||
#define CIRCUITPY_DEFAULT_STACK_SIZE (4248) // divisible by 8
|
#define CIRCUITPY_DEFAULT_STACK_SIZE (4248) // divisible by 8
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#define CALIBRATE_CRYSTALLESS 1
|
#define CALIBRATE_CRYSTALLESS 1
|
||||||
|
|
||||||
// Explanation of how a user got into safe mode.
|
// Explanation of how a user got into safe mode.
|
||||||
#define BOARD_USER_SAFE_MODE_ACTION translate("Both buttons were pressed at start up.\n")
|
#define BOARD_USER_SAFE_MODE_ACTION translate("You pressed both buttons at start up.")
|
||||||
|
|
||||||
#define DEFAULT_I2C_BUS_SCL (&pin_PA01)
|
#define DEFAULT_I2C_BUS_SCL (&pin_PA01)
|
||||||
#define DEFAULT_I2C_BUS_SDA (&pin_PA00)
|
#define DEFAULT_I2C_BUS_SDA (&pin_PA00)
|
||||||
|
@ -11,6 +11,7 @@ LONGINT_IMPL = NONE
|
|||||||
|
|
||||||
CIRCUITPY_FULL_BUILD = 0
|
CIRCUITPY_FULL_BUILD = 0
|
||||||
|
|
||||||
|
CIRCUITPY_ANALOGIO = 0
|
||||||
CIRCUITPY_ALARM = 0
|
CIRCUITPY_ALARM = 0
|
||||||
CIRCUITPY_AUDIOBUSIO = 0
|
CIRCUITPY_AUDIOBUSIO = 0
|
||||||
CIRCUITPY_AUDIOMP3 = 0
|
CIRCUITPY_AUDIOMP3 = 0
|
||||||
@ -31,14 +32,13 @@ CIRCUITPY_ROTARYIO = 0
|
|||||||
CIRCUITPY_RTC = 0
|
CIRCUITPY_RTC = 0
|
||||||
CIRCUITPY_SAMD = 0
|
CIRCUITPY_SAMD = 0
|
||||||
CIRCUITPY_TOUCHIO = 0
|
CIRCUITPY_TOUCHIO = 0
|
||||||
CIRCUITPY_USB_CDC = 0
|
|
||||||
CIRCUITPY_USB_HID = 0
|
CIRCUITPY_USB_HID = 0
|
||||||
CIRCUITPY_USB_MIDI = 0
|
CIRCUITPY_USB_MIDI = 0
|
||||||
CIRCUITPY_VECTORIO = 0
|
CIRCUITPY_VECTORIO = 0
|
||||||
CIRCUITPY_BUSDEVICE = 0
|
CIRCUITPY_BUSDEVICE = 0
|
||||||
CIRCUITPY_BITMAPTOOLS = 0
|
CIRCUITPY_BITMAPTOOLS = 0
|
||||||
|
CIRCUITPY_WATCHDOG = 0
|
||||||
|
|
||||||
CIRCUITPY_ANALOGIO = 1
|
|
||||||
CIRCUITPY_AUDIOIO = 1
|
CIRCUITPY_AUDIOIO = 1
|
||||||
CIRCUITPY_AUDIOMIXER = 1
|
CIRCUITPY_AUDIOMIXER = 1
|
||||||
CIRCUITPY_DISPLAYIO = 1
|
CIRCUITPY_DISPLAYIO = 1
|
||||||
@ -53,3 +53,13 @@ CIRCUITPY_DISPLAY_FONT = $(TOP)/ports/atmel-samd/boards/ugame10/brutalist-6.bdf
|
|||||||
|
|
||||||
# Override optimization to keep binary small
|
# Override optimization to keep binary small
|
||||||
OPTIMIZATION_FLAGS = -Os
|
OPTIMIZATION_FLAGS = -Os
|
||||||
|
|
||||||
|
# We don't have room for the fonts for terminalio for certain languages,
|
||||||
|
# so turn off terminalio, and if it's off and displayio is on,
|
||||||
|
# force a clean build.
|
||||||
|
# Note that we cannot test $(CIRCUITPY_DISPLAYIO) directly with an
|
||||||
|
# ifeq, because it's not set yet.
|
||||||
|
ifneq (,$(filter $(TRANSLATION),ja ko ru))
|
||||||
|
CIRCUITPY_TERMINALIO = 0
|
||||||
|
RELEASE_NEEDS_CLEAN_BUILD = $(CIRCUITPY_DISPLAYIO)
|
||||||
|
endif
|
||||||
|
@ -405,7 +405,13 @@ void common_hal_audioio_audioout_play(audioio_audioout_obj_t *self,
|
|||||||
if (self->right_channel == &pin_PA02) {
|
if (self->right_channel == &pin_PA02) {
|
||||||
right_channel_reg = (uint32_t)&DAC->DATABUF[0].reg;
|
right_channel_reg = (uint32_t)&DAC->DATABUF[0].reg;
|
||||||
}
|
}
|
||||||
if (right_channel_reg == left_channel_reg + 2 && audiosample_bits_per_sample(sample) == 16) {
|
|
||||||
|
size_t num_channels = audiosample_channel_count(sample);
|
||||||
|
|
||||||
|
if (num_channels == 2 &&
|
||||||
|
// Are DAC channels sequential?
|
||||||
|
left_channel_reg + 2 == right_channel_reg &&
|
||||||
|
audiosample_bits_per_sample(sample) == 16) {
|
||||||
result = audio_dma_setup_playback(&self->left_dma, sample, loop, false, 0,
|
result = audio_dma_setup_playback(&self->left_dma, sample, loop, false, 0,
|
||||||
false /* output unsigned */,
|
false /* output unsigned */,
|
||||||
left_channel_reg,
|
left_channel_reg,
|
||||||
@ -415,7 +421,11 @@ void common_hal_audioio_audioout_play(audioio_audioout_obj_t *self,
|
|||||||
false /* output unsigned */,
|
false /* output unsigned */,
|
||||||
left_channel_reg,
|
left_channel_reg,
|
||||||
left_channel_trigger);
|
left_channel_trigger);
|
||||||
if (right_channel_reg != 0 && result == AUDIO_DMA_OK) {
|
// Don't play back on right channel unless stereo.
|
||||||
|
// TODO possibility: Set up non-incrementing DMA on one channel so they use the same samples?
|
||||||
|
// Right now, playing back mono on both channels causes sample to play twice as fast.
|
||||||
|
if (num_channels == 2 &&
|
||||||
|
right_channel_reg != 0 && result == AUDIO_DMA_OK) {
|
||||||
result = audio_dma_setup_playback(&self->right_dma, sample, loop, true, 1,
|
result = audio_dma_setup_playback(&self->right_dma, sample, loop, true, 1,
|
||||||
false /* output unsigned */,
|
false /* output unsigned */,
|
||||||
right_channel_reg,
|
right_channel_reg,
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if CIRCUITPY_BUSIO_UART
|
||||||
#include "shared-bindings/microcontroller/__init__.h"
|
#include "shared-bindings/microcontroller/__init__.h"
|
||||||
#include "shared-bindings/microcontroller/Pin.h"
|
#include "shared-bindings/microcontroller/Pin.h"
|
||||||
#include "shared-bindings/busio/UART.h"
|
#include "shared-bindings/busio/UART.h"
|
||||||
@ -485,3 +486,4 @@ bool common_hal_busio_uart_ready_to_tx(busio_uart_obj_t *self) {
|
|||||||
usart_async_get_status(usart_desc_p, &async_status);
|
usart_async_get_status(usart_desc_p, &async_status);
|
||||||
return !(async_status.flags & USART_ASYNC_STATUS_BUSY);
|
return !(async_status.flags & USART_ASYNC_STATUS_BUSY);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -51,9 +51,8 @@ void common_hal_mcu_disable_interrupts(void) {
|
|||||||
|
|
||||||
void common_hal_mcu_enable_interrupts(void) {
|
void common_hal_mcu_enable_interrupts(void) {
|
||||||
if (nesting_count == 0) {
|
if (nesting_count == 0) {
|
||||||
// This is very very bad because it means there was mismatched disable/enables so we
|
// This is very very bad because it means there was mismatched disable/enables.
|
||||||
// "HardFault".
|
reset_into_safe_mode(SAFE_MODE_INTERRUPT_ERROR);
|
||||||
HardFault_Handler();
|
|
||||||
}
|
}
|
||||||
nesting_count--;
|
nesting_count--;
|
||||||
if (nesting_count > 0) {
|
if (nesting_count > 0) {
|
||||||
@ -76,7 +75,7 @@ void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
|
|||||||
_bootloader_dbl_tap = DBL_TAP_MAGIC_QUICK_BOOT;
|
_bootloader_dbl_tap = DBL_TAP_MAGIC_QUICK_BOOT;
|
||||||
}
|
}
|
||||||
if (runmode == RUNMODE_SAFE_MODE) {
|
if (runmode == RUNMODE_SAFE_MODE) {
|
||||||
safe_mode_on_next_reset(PROGRAMMATIC_SAFE_MODE);
|
safe_mode_on_next_reset(SAFE_MODE_PROGRAMMATIC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,8 +114,6 @@ CLK PA21 PCC_D? (D32) BROWN
|
|||||||
gpio_set_pin_pull_mode(functions[i]->pin,
|
gpio_set_pin_pull_mode(functions[i]->pin,
|
||||||
(i == 1 || i == 5) ? GPIO_PULL_OFF : GPIO_PULL_UP);
|
(i == 1 || i == 5) ? GPIO_PULL_OFF : GPIO_PULL_UP);
|
||||||
gpio_set_pin_function(functions[i]->pin, GPIO_PIN_FUNCTION_SDIO);
|
gpio_set_pin_function(functions[i]->pin, GPIO_PIN_FUNCTION_SDIO);
|
||||||
|
|
||||||
common_hal_never_reset_pin(functions[i]->obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self->num_data = num_data;
|
self->num_data = num_data;
|
||||||
@ -145,6 +143,12 @@ CLK PA21 PCC_D? (D32) BROWN
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (result != SD_MMC_OK) {
|
if (result != SD_MMC_OK) {
|
||||||
|
for (size_t i = 0; i < MP_ARRAY_SIZE(functions); i++) {
|
||||||
|
if (!functions[i]->obj) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
reset_pin_number(functions[i]->obj->number);
|
||||||
|
}
|
||||||
mp_raise_OSError_msg_varg(translate("%q failure: %d"), MP_QSTR_sd_mmc_check, (int)result);
|
mp_raise_OSError_msg_varg(translate("%q failure: %d"), MP_QSTR_sd_mmc_check, (int)result);
|
||||||
}
|
}
|
||||||
// sd_mmc_get_capacity() is in KiB, but our "capacity" is in 512-byte blocks
|
// sd_mmc_get_capacity() is in KiB, but our "capacity" is in 512-byte blocks
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George
|
|
||||||
*
|
|
||||||
* 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/mphal.h"
|
|
||||||
#include "py/runtime.h"
|
|
||||||
#include "lib/oofatfs/ff.h" /* FatFs lower layer API */
|
|
||||||
#include "lib/oofatfs/diskio.h" /* FatFs lower layer API */
|
|
||||||
#include "shared/timeutils/timeutils.h"
|
|
||||||
|
|
||||||
#if CIRCUITPY_RTC
|
|
||||||
#include "shared-bindings/rtc/RTC.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DWORD get_fattime(void) {
|
|
||||||
#if CIRCUITPY_RTC
|
|
||||||
timeutils_struct_time_t tm;
|
|
||||||
common_hal_rtc_get_time(&tm);
|
|
||||||
return ((tm.tm_year - 1980) << 25) | (tm.tm_mon << 21) | (tm.tm_mday << 16) |
|
|
||||||
(tm.tm_hour << 11) | (tm.tm_min << 5) | (tm.tm_sec >> 1);
|
|
||||||
#else
|
|
||||||
return ((2016 - 1980) << 25) | ((9) << 21) | ((1) << 16) | ((16) << 11) | ((43) << 5) | (35 / 2);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -24,13 +24,13 @@ ifeq ($(CHIP_FAMILY),samd21)
|
|||||||
CIRCUITPY_AESIO ?= 0
|
CIRCUITPY_AESIO ?= 0
|
||||||
CIRCUITPY_ATEXIT ?= 0
|
CIRCUITPY_ATEXIT ?= 0
|
||||||
CIRCUITPY_AUDIOMIXER ?= 0
|
CIRCUITPY_AUDIOMIXER ?= 0
|
||||||
|
CIRCUITPY_AUDIOMP3 ?= 0
|
||||||
CIRCUITPY_BINASCII ?= 0
|
CIRCUITPY_BINASCII ?= 0
|
||||||
CIRCUITPY_BITBANGIO ?= 0
|
CIRCUITPY_BITBANGIO ?= 0
|
||||||
CIRCUITPY_BITMAPTOOLS ?= 0
|
CIRCUITPY_BITMAPTOOLS ?= 0
|
||||||
CIRCUITPY_BUSDEVICE ?= 0
|
|
||||||
CIRCUITPY_AUDIOMP3 ?= 0
|
|
||||||
CIRCUITPY_BLEIO_HCI = 0
|
CIRCUITPY_BLEIO_HCI = 0
|
||||||
CIRCUITPY_BUILTINS_POW3 ?= 0
|
CIRCUITPY_BUILTINS_POW3 ?= 0
|
||||||
|
CIRCUITPY_BUSDEVICE ?= 0
|
||||||
CIRCUITPY_COMPUTED_GOTO_SAVE_SPACE ?= 1
|
CIRCUITPY_COMPUTED_GOTO_SAVE_SPACE ?= 1
|
||||||
CIRCUITPY_COUNTIO ?= 0
|
CIRCUITPY_COUNTIO ?= 0
|
||||||
# Not enough RAM for framebuffers
|
# Not enough RAM for framebuffers
|
||||||
@ -42,6 +42,8 @@ CIRCUITPY_I2CTARGET ?= 0
|
|||||||
CIRCUITPY_JSON ?= 0
|
CIRCUITPY_JSON ?= 0
|
||||||
CIRCUITPY_KEYPAD ?= 0
|
CIRCUITPY_KEYPAD ?= 0
|
||||||
CIRCUITPY_MSGPACK ?= 0
|
CIRCUITPY_MSGPACK ?= 0
|
||||||
|
CIRCUITPY_OS_GETENV ?= 0
|
||||||
|
CIRCUITPY_PIXELMAP ?= 0
|
||||||
CIRCUITPY_RE ?= 0
|
CIRCUITPY_RE ?= 0
|
||||||
CIRCUITPY_SDCARDIO ?= 0
|
CIRCUITPY_SDCARDIO ?= 0
|
||||||
CIRCUITPY_SYNTHIO ?= 0
|
CIRCUITPY_SYNTHIO ?= 0
|
||||||
@ -55,6 +57,7 @@ CIRCUITPY_ZLIB = 0
|
|||||||
|
|
||||||
ifeq ($(INTERNAL_FLASH_FILESYSTEM),1)
|
ifeq ($(INTERNAL_FLASH_FILESYSTEM),1)
|
||||||
CIRCUITPY_ONEWIREIO ?= 0
|
CIRCUITPY_ONEWIREIO ?= 0
|
||||||
|
CIRCUITPY_SAFEMODE_PY ?= 0
|
||||||
CIRCUITPY_USB_IDENTIFICATION ?= 0
|
CIRCUITPY_USB_IDENTIFICATION ?= 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -75,10 +78,8 @@ SUPEROPT_VM = 0
|
|||||||
|
|
||||||
CIRCUITPY_LTO_PARTITION = one
|
CIRCUITPY_LTO_PARTITION = one
|
||||||
|
|
||||||
ifeq ($(CIRCUITPY_FULL_BUILD),0)
|
# On smaller builds this saves about 180 bytes. On other boards, it may -increase- space used, so use with care.
|
||||||
# On the smallest boards, this saves about 180 bytes. On other boards, it may -increase- space used.
|
|
||||||
CFLAGS_BOARD = -fweb -frename-registers
|
CFLAGS_BOARD = -fweb -frename-registers
|
||||||
endif
|
|
||||||
|
|
||||||
endif # samd21
|
endif # samd21
|
||||||
######################################################################
|
######################################################################
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 57133eefeb077f73b5ac17ee044d9feaf566da8e
|
Subproject commit baca4c084334aa8625f525a4032d66a397199ea6
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user