Merge remote-tracking branch 'adafruit/main' into cp-flow

This commit is contained in:
Bernhard Boser 2021-01-27 09:22:41 -08:00
commit e285b5b98c
189 changed files with 7670 additions and 1144 deletions

View File

@ -177,6 +177,7 @@ jobs:
- "8086_commander" - "8086_commander"
- "ADM_B_NRF52840_1" - "ADM_B_NRF52840_1"
- "TG-Watch" - "TG-Watch"
- "adafruit_feather_rp2040"
- "aloriumtech_evo_m51" - "aloriumtech_evo_m51"
- "aramcon_badge_2019" - "aramcon_badge_2019"
- "arduino_mkr1300" - "arduino_mkr1300"
@ -294,6 +295,7 @@ jobs:
- "pyruler" - "pyruler"
- "qtpy_m0" - "qtpy_m0"
- "qtpy_m0_haxpress" - "qtpy_m0_haxpress"
- "raspberry_pi_pico"
- "raytac_mdbt50q-db-40" - "raytac_mdbt50q-db-40"
- "robohatmm1_m4" - "robohatmm1_m4"
- "sam32" - "sam32"
@ -315,6 +317,7 @@ jobs:
- "spresense" - "spresense"
- "stackrduino_m0_pro" - "stackrduino_m0_pro"
- "stm32f411ce_blackpill" - "stm32f411ce_blackpill"
- "stm32f411ce_blackpill_with_flash"
- "stm32f411ve_discovery" - "stm32f411ve_discovery"
- "stm32f412zg_discovery" - "stm32f412zg_discovery"
- "stm32f4_discovery" - "stm32f4_discovery"
@ -464,7 +467,7 @@ jobs:
id: idf-cache id: idf-cache
with: with:
path: ${{ github.workspace }}/.idf_tools path: ${{ github.workspace }}/.idf_tools
key: ${{ runner.os }}-idf-tools-${{ hashFiles('.git/modules/ports/esp32s2/esp-idf/HEAD') }}-20210114 key: ${{ runner.os }}-idf-tools-${{ hashFiles('.git/modules/ports/esp32s2/esp-idf/HEAD') }}-20210122
- name: Clone IDF submodules - name: Clone IDF submodules
run: | run: |
(cd $IDF_PATH && git submodule update --init) (cd $IDF_PATH && git submodule update --init)

3
.gitmodules vendored
View File

@ -171,3 +171,6 @@
[submodule "frozen/Adafruit_CircuitPython_LC709203F"] [submodule "frozen/Adafruit_CircuitPython_LC709203F"]
path = frozen/Adafruit_CircuitPython_LC709203F path = frozen/Adafruit_CircuitPython_LC709203F
url = https://github.com/adafruit/Adafruit_CircuitPython_LC709203F url = https://github.com/adafruit/Adafruit_CircuitPython_LC709203F
[submodule "ports/raspberrypi/sdk"]
path = ports/raspberrypi/sdk
url = https://github.com/raspberrypi/pico-sdk.git

View File

@ -255,6 +255,7 @@ stubs:
@$(PYTHON) tools/extract_pyi.py shared-bindings/ $(STUBDIR) @$(PYTHON) tools/extract_pyi.py shared-bindings/ $(STUBDIR)
@$(PYTHON) tools/extract_pyi.py extmod/ulab/code/ $(STUBDIR)/ulab @$(PYTHON) tools/extract_pyi.py extmod/ulab/code/ $(STUBDIR)/ulab
@$(PYTHON) tools/extract_pyi.py ports/atmel-samd/bindings $(STUBDIR) @$(PYTHON) tools/extract_pyi.py ports/atmel-samd/bindings $(STUBDIR)
@$(PYTHON) tools/extract_pyi.py ports/raspberrypi/bindings $(STUBDIR)
@$(PYTHON) setup.py -q sdist @$(PYTHON) setup.py -q sdist
.PHONY: check-stubs .PHONY: check-stubs

View File

@ -125,7 +125,7 @@ Behavior
get back into normal mode. get back into normal mode.
- RGB status LED indicating CircuitPython state, and errors through a sequence of colored flashes. - RGB status LED indicating CircuitPython state, and errors through a sequence of colored flashes.
- Re-runs ``code.py`` or other main file after file system writes over USB mass storage. (Disable with - Re-runs ``code.py`` or other main file after file system writes over USB mass storage. (Disable with
``samd.disable_autoreload()``) ``supervisor.disable_autoreload()``)
- Entering the REPL after the main code is finished requires a key press which enters the REPL and - Entering the REPL after the main code is finished requires a key press which enters the REPL and
disables autoreload. disables autoreload.
- Main is one of these: ``code.txt``, ``code.py``, ``main.py``, - Main is one of these: ``code.txt``, ``code.py``, ``main.py``,

View File

@ -189,6 +189,7 @@ exclude_patterns = ["**/build*",
"ports/nrf/nrfx", "ports/nrf/nrfx",
"ports/nrf/peripherals", "ports/nrf/peripherals",
"ports/nrf/usb", "ports/nrf/usb",
"ports/raspberrypi/sdk",
"ports/stm/st_driver", "ports/stm/st_driver",
"ports/stm/packages", "ports/stm/packages",
"ports/stm/peripherals", "ports/stm/peripherals",

View File

@ -520,7 +520,9 @@ properties.
+-----------------------+-----------------------+-------------------------------------------------------------------------+ +-----------------------+-----------------------+-------------------------------------------------------------------------+
| ``temperature`` | float | degrees centigrade | | ``temperature`` | float | degrees centigrade |
+-----------------------+-----------------------+-------------------------------------------------------------------------+ +-----------------------+-----------------------+-------------------------------------------------------------------------+
| ``eCO2`` | float | equivalent CO2 in ppm | | ``CO2`` | float | measured CO2 in ppm |
+-----------------------+-----------------------+-------------------------------------------------------------------------+
| ``eCO2`` | float | equivalent/estimated CO2 in ppm (estimated from some other measurement) |
+-----------------------+-----------------------+-------------------------------------------------------------------------+ +-----------------------+-----------------------+-------------------------------------------------------------------------+
| ``TVOC`` | float | Total Volatile Organic Compounds in ppb | | ``TVOC`` | float | Total Volatile Organic Compounds in ppb |
+-----------------------+-----------------------+-------------------------------------------------------------------------+ +-----------------------+-----------------------+-------------------------------------------------------------------------+

View File

@ -1,9 +1,7 @@
:mod:`uerrno` -- system error codes :mod:`errno` -- system error codes
=================================== ===================================
.. include:: ../templates/unsupported_in_circuitpython.inc .. module:: errno
.. module:: uerrno
:synopsis: system error codes :synopsis: system error codes
|see_cpython_module| :mod:`cpython:errno`. |see_cpython_module| :mod:`cpython:errno`.
@ -22,7 +20,7 @@ Constants
try: try:
os.mkdir("my_dir") os.mkdir("my_dir")
except OSError as exc: except OSError as exc:
if exc.args[0] == uerrno.EEXIST: if exc.args[0] == errno.EEXIST:
print("Directory already exists") print("Directory already exists")
.. data:: errorcode .. data:: errorcode
@ -30,5 +28,5 @@ Constants
Dictionary mapping numeric error codes to strings with symbolic error Dictionary mapping numeric error codes to strings with symbolic error
code (see above):: code (see above)::
>>> print(uerrno.errorcode[uerrno.EEXIST]) >>> print(errno.errorcode[uerrno.EEXIST])
EEXIST EEXIST

View File

@ -1,85 +0,0 @@
:mod:`esp` --- functions related to the ESP8266
===============================================
.. include:: ../templates/unsupported_in_circuitpython.inc
.. module:: esp
:synopsis: functions related to the ESP8266
The ``esp`` module contains specific functions related to the ESP8266 module.
Functions
---------
.. function:: sleep_type([sleep_type])
Get or set the sleep type.
If the *sleep_type* parameter is provided, sets the sleep type to its
value. If the function is called without parameters, returns the current
sleep type.
The possible sleep types are defined as constants:
* ``SLEEP_NONE`` -- all functions enabled,
* ``SLEEP_MODEM`` -- modem sleep, shuts down the WiFi Modem circuit.
* ``SLEEP_LIGHT`` -- light sleep, shuts down the WiFi Modem circuit
and suspends the processor periodically.
The system enters the set sleep mode automatically when possible.
.. function:: deepsleep(time=0)
Enter deep sleep.
The whole module powers down, except for the RTC clock circuit, which can
be used to restart the module after the specified time if the pin 16 is
connected to the reset pin. Otherwise the module will sleep until manually
reset.
.. function:: flash_id()
Read the device ID of the flash memory.
.. function:: flash_read(byte_offset, length_or_buffer)
.. function:: flash_write(byte_offset, bytes)
.. function:: flash_erase(sector_no)
.. function:: set_native_code_location(start, length)
Set the location that native code will be placed for execution after it is
compiled. Native code is emitted when the ``@micropython.native``,
``@micropython.viper`` and ``@micropython.asm_xtensa`` decorators are applied
to a function. The ESP8266 must execute code from either iRAM or the lower
1MByte of flash (which is memory mapped), and this function controls the
location.
If *start* and *length* are both ``None`` then the native code location is
set to the unused portion of memory at the end of the iRAM1 region. The
size of this unused portion depends on the firmware and is typically quite
small (around 500 bytes), and is enough to store a few very small
functions. The advantage of using this iRAM1 region is that it does not
get worn out by writing to it.
If neither *start* nor *length* are ``None`` then they should be integers.
*start* should specify the byte offset from the beginning of the flash at
which native code should be stored. *length* specifies how many bytes of
flash from *start* can be used to store native code. *start* and *length*
should be multiples of the sector size (being 4096 bytes). The flash will
be automatically erased before writing to it so be sure to use a region of
flash that is not otherwise used, for example by the firmware or the
filesystem.
When using the flash to store native code *start+length* must be less
than or equal to 1MByte. Note that the flash can be worn out if repeated
erasures (and writes) are made so use this feature sparingly.
In particular, native code needs to be recompiled and rewritten to flash
on each boot (including wake from deepsleep).
In both cases above, using iRAM1 or flash, if there is no more room left
in the specified region then the use of a native decorator on a function
will lead to `MemoryError` exception being raised during compilation of
that function.

View File

@ -6,35 +6,21 @@ MicroPython libraries
Python standard libraries and micro-libraries Python standard libraries and micro-libraries
--------------------------------------------- ---------------------------------------------
These libraries are inherited from MicroPython. The libraries below are inherited from MicroPython.
They are similar to the standard Python libraries with the same name They are similar to the standard Python libraries with the same name.
or with the "u" prefix dropped.
They implement a subset of or a variant of the corresponding They implement a subset of or a variant of the corresponding
standard Python library. standard Python library.
.. warning::
Though these MicroPython-based libraries are available in CircuitPython,
their functionality may change in the future, perhaps significantly.
As CircuitPython continues to develop, new versions of these libraries will
be created that are more compliant with the standard Python libraries.
You may need to change your code later if you rely
on any non-standard functionality they currently provide.
CircuitPython's long-term goal is that code written in CircuitPython CircuitPython's long-term goal is that code written in CircuitPython
using Python standard libraries will be runnable on CPython without changes. using Python standard libraries will be runnable on CPython without changes.
Some libraries below are not enabled on CircuitPython builds with These libraries are not enabled on CircuitPython builds with
limited flash memory, usually on non-Express builds: limited flash memory, usually on non-Express builds:
``uerrno``, ``ure``. ``binascii``, ``errno``, ``json``, ``re``.
Some libraries are not currently enabled in any CircuitPython build, but may be in the future: These libraries are not currently enabled in any CircuitPython build, but may be in the future,
``uio``, ``ujson``, ``uzlib``. with the ``u`` prefix dropped:
``uctypes``, ``uhashlib``, ``uzlib``.
Some libraries are only enabled only WiFi-capable ports (ESP8266, nRF)
because they are typically used for network software:
``binascii``, ``hashlib``, ``uheapq``, ``uselect``, ``ussl``.
Not all of these are enabled on all WiFi-capable ports.
.. toctree:: .. toctree::
:maxdepth: 1 :maxdepth: 1
@ -44,13 +30,14 @@ Not all of these are enabled on all WiFi-capable ports.
array.rst array.rst
binascii.rst binascii.rst
collections.rst collections.rst
errno.rst
gc.rst gc.rst
hashlib.rst hashlib.rst
io.rst
json.rst
re.rst
sys.rst sys.rst
uerrno.rst uctypes.rst
uio.rst
ujson.rst
ure.rst
uselect.rst uselect.rst
usocket.rst usocket.rst
ussl.rst ussl.rst
@ -59,8 +46,8 @@ Not all of these are enabled on all WiFi-capable ports.
Omitted functions in the ``string`` library Omitted functions in the ``string`` library
------------------------------------------- -------------------------------------------
A few string operations are not enabled on CircuitPython A few string operations are not enabled on small builds
M0 non-Express builds, due to limited flash memory: (usually non-Express), due to limited flash memory:
``string.center()``, ``string.partition()``, ``string.splitlines()``, ``string.center()``, ``string.partition()``, ``string.splitlines()``,
``string.reversed()``. ``string.reversed()``.
@ -78,15 +65,3 @@ versions of CircuitPython.
btree.rst btree.rst
framebuf.rst framebuf.rst
micropython.rst micropython.rst
network.rst
uctypes.rst
Libraries specific to the ESP8266
---------------------------------
The following libraries are specific to the ESP8266.
.. toctree::
:maxdepth: 2
esp.rst

View File

@ -1,9 +1,7 @@
:mod:`uio` -- input/output streams :mod:`io` -- input/output streams
================================== ==================================
.. include:: ../templates/unsupported_in_circuitpython.inc .. module:: io
.. module:: uio
:synopsis: input/output streams :synopsis: input/output streams
|see_cpython_module| :mod:`cpython:io`. |see_cpython_module| :mod:`cpython:io`.

View File

@ -1,9 +1,7 @@
:mod:`ujson` -- JSON encoding and decoding :mod:`json` -- JSON encoding and decoding
========================================== ==========================================
.. include:: ../templates/unsupported_in_circuitpython.inc .. module:: json
.. module:: ujson
:synopsis: JSON encoding and decoding :synopsis: JSON encoding and decoding
|see_cpython_module| :mod:`cpython:json`. |see_cpython_module| :mod:`cpython:json`.

View File

@ -1,278 +0,0 @@
****************************************
:mod:`network` --- network configuration
****************************************
.. include:: ../templates/unsupported_in_circuitpython.inc
.. module:: network
:noindex:
:synopsis: network configuration
This module provides network drivers and routing configuration. To use this
module, a MicroPython variant/build with network capabilities must be installed.
Network drivers for specific hardware are available within this module and are
used to configure hardware network interface(s). Network services provided
by configured interfaces are then available for use via the :mod:`usocket`
module.
For example::
# connect/ show IP config a specific network interface
# see below for examples of specific drivers
import network
import utime
nic = network.Driver(...)
if not nic.isconnected():
nic.connect()
print("Waiting for connection...")
while not nic.isconnected():
utime.sleep(1)
print(nic.ifconfig())
# now use usocket as usual
import usocket as socket
addr = socket.getaddrinfo('micropython.org', 80)[0][-1]
s = socket.socket()
s.connect(addr)
s.send(b'GET / HTTP/1.1\r\nHost: micropython.org\r\n\r\n')
data = s.recv(1000)
s.close()
Common network adapter interface
================================
This section describes an (implied) abstract base class for all network
interface classes implemented by ``MicroPython ports <MicroPython port>``
for different hardware. This means that MicroPython does not actually
provide ``AbstractNIC`` class, but any actual NIC class, as described
in the following sections, implements methods as described here.
.. class:: AbstractNIC(id=None, ...)
Instantiate a network interface object. Parameters are network interface
dependent. If there are more than one interface of the same type, the first
parameter should be `id`.
.. method:: active([is_active])
Activate ("up") or deactivate ("down") the network interface, if
a boolean argument is passed. Otherwise, query current state if
no argument is provided. Most other methods require an active
interface (behavior of calling them on inactive interface is
undefined).
.. method:: connect([service_id, key=None, \*, ...])
Connect the interface to a network. This method is optional, and
available only for interfaces which are not "always connected".
If no parameters are given, connect to the default (or the only)
service. If a single parameter is given, it is the primary identifier
of a service to connect to. It may be accompanied by a key
(password) required to access said service. There can be further
arbitrary keyword-only parameters, depending on the networking medium
type and/or particular device. Parameters can be used to: a)
specify alternative service identifier types; b) provide additional
connection parameters. For various medium types, there are different
sets of predefined/recommended parameters, among them:
* WiFi: *bssid* keyword to connect to a specific BSSID (MAC address)
.. method:: disconnect()
Disconnect from network.
.. method:: isconnected()
Returns ``True`` if connected to network, otherwise returns ``False``.
.. method:: scan(\*, ...)
Scan for the available network services/connections. Returns a
list of tuples with discovered service parameters. For various
network media, there are different variants of predefined/
recommended tuple formats, among them:
* WiFi: (ssid, bssid, channel, RSSI, authmode, hidden). There
may be further fields, specific to a particular device.
The function may accept additional keyword arguments to filter scan
results (e.g. scan for a particular service, on a particular channel,
for services of a particular set, etc.), and to affect scan
duration and other parameters. Where possible, parameter names
should match those in connect().
.. method:: status()
Return detailed status of the interface, values are dependent
on the network medium/technology.
.. method:: ifconfig([(ip, subnet, gateway, dns)])
Get/set IP-level network interface parameters: IP address, subnet mask,
gateway and DNS server. When called with no arguments, this method returns
a 4-tuple with the above information. To set the above values, pass a
4-tuple with the required information. For example::
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
.. method:: config('param')
config(param=value, ...)
Get or set general network interface parameters. These methods allow to work
with additional parameters beyond standard IP configuration (as dealt with by
`ifconfig()`). These include network-specific and hardware-specific
parameters and status values. For setting parameters, the keyword argument
syntax should be used, and multiple parameters can be set at once. For
querying, a parameter name should be quoted as a string, and only one
parameter can be queried at a time::
# Set WiFi access point name (formally known as ESSID) and WiFi channel
ap.config(essid='My AP', channel=11)
# Query params one by one
print(ap.config('essid'))
print(ap.config('channel'))
# Extended status information also available this way
print(sta.config('rssi'))
.. _network.WLAN:
Functions
=========
.. function:: phy_mode([mode])
Get or set the PHY mode.
If the *mode* parameter is provided, sets the mode to its value. If
the function is called without parameters, returns the current mode.
The possible modes are defined as constants:
* ``MODE_11B`` -- IEEE 802.11b,
* ``MODE_11G`` -- IEEE 802.11g,
* ``MODE_11N`` -- IEEE 802.11n.
class WLAN
==========
This class provides a driver for WiFi network processor in the ESP8266. Example usage::
import network
# enable station interface and connect to WiFi access point
nic = network.WLAN(network.STA_IF)
nic.active(True)
nic.connect('your-ssid', 'your-password')
# now use sockets as usual
Constructors
------------
.. class:: WLAN(interface_id)
Create a WLAN network interface object. Supported interfaces are
``network.STA_IF`` (station aka client, connects to upstream WiFi access
points) and ``network.AP_IF`` (access point, allows other WiFi clients to
connect). Availability of the methods below depends on interface type.
For example, only STA interface may `connect()` to an access point.
Methods
-------
.. method:: wlan.active([is_active])
Activate ("up") or deactivate ("down") network interface, if boolean
argument is passed. Otherwise, query current state if no argument is
provided. Most other methods require active interface.
.. method:: wlan.connect(ssid=None, password=None, \*, bssid=None)
Connect to the specified wireless network, using the specified password.
If *bssid* is given then the connection will be restricted to the
access-point with that MAC address (the *ssid* must also be specified
in this case).
.. method:: wlan.disconnect()
Disconnect from the currently connected wireless network.
.. method:: wlan.scan()
Scan for the available wireless networks.
Scanning is only possible on STA interface. Returns list of tuples with
the information about WiFi access points:
(ssid, bssid, channel, RSSI, authmode, hidden)
*bssid* is hardware address of an access point, in binary form, returned as
bytes object. You can use `binascii.hexlify()` to convert it to ASCII form.
There are five values for authmode:
* 0 -- open
* 1 -- WEP
* 2 -- WPA-PSK
* 3 -- WPA2-PSK
* 4 -- WPA/WPA2-PSK
and two for hidden:
* 0 -- visible
* 1 -- hidden
.. method:: wlan.status()
Return the current status of the wireless connection.
The possible statuses are defined as constants:
* ``STAT_IDLE`` -- no connection and no activity,
* ``STAT_CONNECTING`` -- connecting in progress,
* ``STAT_WRONG_PASSWORD`` -- failed due to incorrect password,
* ``STAT_NO_AP_FOUND`` -- failed because no access point replied,
* ``STAT_CONNECT_FAIL`` -- failed due to other problems,
* ``STAT_GOT_IP`` -- connection successful.
.. method:: wlan.isconnected()
In case of STA mode, returns ``True`` if connected to a WiFi access
point and has a valid IP address. In AP mode returns ``True`` when a
station is connected. Returns ``False`` otherwise.
.. method:: wlan.ifconfig([(ip, subnet, gateway, dns)])
Get/set IP-level network interface parameters: IP address, subnet mask,
gateway and DNS server. When called with no arguments, this method returns
a 4-tuple with the above information. To set the above values, pass a
4-tuple with the required information. For example::
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
.. method:: wlan.config('param')
wlan.config(param=value, ...)
Get or set general network interface parameters. These methods allow to work
with additional parameters beyond standard IP configuration (as dealt with by
`wlan.ifconfig()`). These include network-specific and hardware-specific
parameters. For setting parameters, keyword argument syntax should be used,
multiple parameters can be set at once. For querying, parameters name should
be quoted as a string, and only one parameter can be queries at time::
# Set WiFi access point name (formally known as ESSID) and WiFi channel
ap.config(essid='My AP', channel=11)
# Query params one by one
print(ap.config('essid'))
print(ap.config('channel'))
Following are commonly supported parameters (availability of a specific parameter
depends on network technology type, driver, and ``MicroPython port``).
============= ===========
Parameter Description
============= ===========
mac MAC address (bytes)
essid WiFi access point name (string)
channel WiFi channel (integer)
hidden Whether ESSID is hidden (boolean)
authmode Authentication mode supported (enumeration, see module constants)
password Access password (string)
dhcp_hostname The DHCP hostname to use
============= ===========

View File

@ -1,9 +1,7 @@
:mod:`ure` -- simple regular expressions :mod:`re` -- simple regular expressions
======================================== ========================================
.. include:: ../templates/unsupported_in_circuitpython.inc .. module:: re
.. module:: ure
:synopsis: regular expressions :synopsis: regular expressions
|see_cpython_module| :mod:`cpython:re`. |see_cpython_module| :mod:`cpython:re`.
@ -77,7 +75,7 @@ Regex objects
------------- -------------
Compiled regular expression. Instances of this class are created using Compiled regular expression. Instances of this class are created using
`ure.compile()`. `re.compile()`.
.. method:: regex.match(string) .. method:: regex.match(string)
regex.search(string) regex.search(string)

View File

@ -30,7 +30,7 @@ import sys
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
SUPPORTED_PORTS = ['atmel-samd', 'esp32s2', 'litex', 'mimxrt10xx', 'nrf', 'stm'] SUPPORTED_PORTS = ['atmel-samd', 'cxd56', 'esp32s2', 'litex', 'mimxrt10xx', 'nrf', 'raspberrypi', 'stm']
def get_circuitpython_root_dir(): def get_circuitpython_root_dir():
""" The path to the root './circuitpython' directory """ The path to the root './circuitpython' directory
@ -44,7 +44,7 @@ def get_shared_bindings():
""" Get a list of modules in shared-bindings based on folder names """ Get a list of modules in shared-bindings based on folder names
""" """
shared_bindings_dir = get_circuitpython_root_dir() / "shared-bindings" shared_bindings_dir = get_circuitpython_root_dir() / "shared-bindings"
return [item.name for item in shared_bindings_dir.iterdir()] + ["ulab"] return [item.name for item in shared_bindings_dir.iterdir()] + ["binascii", "errno", "json", "re", "ulab"]
def read_mpconfig(): def read_mpconfig():

View File

@ -13,8 +13,9 @@ is limited.
../ports/atmel-samd/README ../ports/atmel-samd/README
../ports/cxd56/README ../ports/cxd56/README
../ports/esp32s2/README
../ports/litex/README ../ports/litex/README
../ports/mimxrt10xx/README ../ports/mimxrt10xx/README
../ports/nrf/README ../ports/nrf/README
../ports/raspberrypi/README
../ports/stm/README ../ports/stm/README
../ports/esp32s2/README

View File

@ -71,6 +71,7 @@ mp_vfs_mount_t *mp_vfs_lookup_path(const char *path, const char **path_out) {
STATIC mp_vfs_mount_t *lookup_path(mp_obj_t path_in, mp_obj_t *path_out) { STATIC mp_vfs_mount_t *lookup_path(mp_obj_t path_in, mp_obj_t *path_out) {
const char *path = mp_obj_str_get_str(path_in); const char *path = mp_obj_str_get_str(path_in);
const char *p_out; const char *p_out;
*path_out = mp_const_none;
mp_vfs_mount_t *vfs = mp_vfs_lookup_path(path, &p_out); mp_vfs_mount_t *vfs = mp_vfs_lookup_path(path, &p_out);
if (vfs != MP_VFS_NONE && vfs != MP_VFS_ROOT) { if (vfs != MP_VFS_NONE && vfs != MP_VFS_ROOT) {
*path_out = mp_obj_new_str_of_type(mp_obj_get_type(path_in), *path_out = mp_obj_new_str_of_type(mp_obj_get_type(path_in),
@ -329,7 +330,7 @@ mp_obj_t mp_vfs_ilistdir(size_t n_args, const mp_obj_t *args) {
path_in = MP_OBJ_NEW_QSTR(MP_QSTR_); path_in = MP_OBJ_NEW_QSTR(MP_QSTR_);
} }
mp_obj_t path_out; mp_obj_t path_out = mp_const_none;
mp_vfs_mount_t *vfs = lookup_path(path_in, &path_out); mp_vfs_mount_t *vfs = lookup_path(path_in, &path_out);
if (vfs == MP_VFS_ROOT) { if (vfs == MP_VFS_ROOT) {
@ -359,7 +360,7 @@ mp_obj_t mp_vfs_listdir(size_t n_args, const mp_obj_t *args) {
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_vfs_listdir_obj, 0, 1, mp_vfs_listdir); MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_vfs_listdir_obj, 0, 1, mp_vfs_listdir);
mp_obj_t mp_vfs_mkdir(mp_obj_t path_in) { mp_obj_t mp_vfs_mkdir(mp_obj_t path_in) {
mp_obj_t path_out; mp_obj_t path_out = mp_const_none;
mp_vfs_mount_t *vfs = lookup_path(path_in, &path_out); mp_vfs_mount_t *vfs = lookup_path(path_in, &path_out);
if (vfs == MP_VFS_ROOT || (vfs != MP_VFS_NONE && !strcmp(mp_obj_str_get_str(path_out), "/"))) { if (vfs == MP_VFS_ROOT || (vfs != MP_VFS_NONE && !strcmp(mp_obj_str_get_str(path_out), "/"))) {
mp_raise_OSError(MP_EEXIST); mp_raise_OSError(MP_EEXIST);

@ -1 +1 @@
Subproject commit 902c16f49197a8baf5e71ec924a812a86e733a74 Subproject commit 5e925cea7a55273e375a6129761cb29b4e750d4f

@ -1 +1 @@
Subproject commit cfcffe94ce62f5ef1fb5aef4641924d64dc4b1c0 Subproject commit 045674745afa59028fbeed6dac5cb5a9c4a6033e

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2021-01-03 05:29+0000\n" "PO-Revision-Date: 2021-01-15 19:49+0000\n"
"Last-Translator: oon arfiandwi <oon.arfiandwi@gmail.com>\n" "Last-Translator: oon arfiandwi <oon.arfiandwi@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: ID\n" "Language: ID\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.4.1-dev\n" "X-Generator: Weblate 4.5-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -48,6 +48,10 @@ msgstr " File \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " File \"%q\", baris %d" msgstr " File \"%q\", baris %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr "output:\n" msgstr "output:\n"
@ -869,6 +873,10 @@ msgstr "Channel EXTINT sedang digunakan"
msgid "Error in regex" msgid "Error in regex"
msgstr "Error pada regex" msgstr "Error pada regex"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1261,10 +1269,18 @@ msgstr "security_mode tidak valid"
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "Suara tidak valid" msgstr "Suara tidak valid"
@ -1281,6 +1297,10 @@ msgstr "File wave tidak valid"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "Panjang kata/bit tidak valid" msgstr "Panjang kata/bit tidak valid"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 "Panjang kunci harus 16, 24, atau 32 byte" msgstr "Panjang kunci harus 16, 24, atau 32 byte"
@ -1569,7 +1589,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -2054,38 +2074,41 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
#, c-format #, c-format
msgid "Unknown gatt error: 0x%04x" msgid "Unknown gatt error: 0x%04x"
msgstr "" msgstr "Kesalahan gatt tidak dikenal: 0x%04x"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "Unknown reason." msgid "Unknown reason."
msgstr "" msgstr "Alasan yang tidak diketahui."
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
#, c-format #, c-format
msgid "Unknown security error: 0x%04x" msgid "Unknown security error: 0x%04x"
msgstr "" msgstr "Kesalahan keamanan tidak dikenal: 0x%04x"
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
#, c-format #, c-format
msgid "Unknown soft device error: %04x" msgid "Unknown soft device error: %04x"
msgstr "" msgstr "Kesalahan perangkat lunak tidak dikenal: %04x"
#: shared-bindings/_pixelbuf/PixelBuf.c #: shared-bindings/_pixelbuf/PixelBuf.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 "Jumlah item pada RHS tidak cocok (diharapkan %d, didapatkan %d)."
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
msgid "" msgid ""
"Unspecified issue. Can be that the pairing prompt on the other device was " "Unspecified issue. Can be that the pairing prompt on the other device was "
"declined or ignored." "declined or ignored."
msgstr "" msgstr ""
"Masalah yang tidak ditentukan. Bisa jadi permintaan pemasangan pada "
"perangkat lain ditolak atau diabaikan."
#: ports/atmel-samd/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/I2C.c #: ports/atmel-samd/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/I2C.c
#: ports/esp32s2/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c #: ports/esp32s2/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c
@ -2099,15 +2122,15 @@ msgstr "Baudrate tidak didukung"
#: shared-module/audiocore/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr "Format tidak didukung"
#: py/moduerrno.c #: py/moduerrno.c
msgid "Unsupported operation" msgid "Unsupported operation"
msgstr "" msgstr "Operasi yang tidak didukung"
#: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/digitalio/DigitalInOut.c
msgid "Unsupported pull value." msgid "Unsupported pull value."
msgstr "" msgstr "Nilai tarikan yang tidak didukung."
#: ports/esp32s2/common-hal/dualbank/__init__.c #: ports/esp32s2/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
@ -2116,12 +2139,12 @@ msgstr ""
#: ports/nrf/common-hal/_bleio/Characteristic.c #: ports/nrf/common-hal/_bleio/Characteristic.c
#: ports/nrf/common-hal/_bleio/Descriptor.c #: ports/nrf/common-hal/_bleio/Descriptor.c
msgid "Value length != required fixed length" msgid "Value length != required fixed length"
msgstr "" msgstr "Panjang nilai != Panjang tetap yang dibutuhkan"
#: ports/nrf/common-hal/_bleio/Characteristic.c #: ports/nrf/common-hal/_bleio/Characteristic.c
#: ports/nrf/common-hal/_bleio/Descriptor.c #: ports/nrf/common-hal/_bleio/Descriptor.c
msgid "Value length > max_length" msgid "Value length > max_length"
msgstr "" msgstr "Panjang nilai > max_length"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Version was invalid" msgid "Version was invalid"
@ -2129,11 +2152,11 @@ msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "Viper functions don't currently support more than 4 arguments" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "" msgstr "Fungsi Viper saat ini tidak mendukung lebih dari 4 argumen"
#: ports/stm/common-hal/microcontroller/Processor.c #: ports/stm/common-hal/microcontroller/Processor.c
msgid "Voltage read timed out" msgid "Voltage read timed out"
msgstr "" msgstr "Tegangan baca habis waktu"
#: main.c #: main.c
msgid "WARNING: Your code filename has two extensions\n" msgid "WARNING: Your code filename has two extensions\n"
@ -2185,11 +2208,11 @@ msgstr ""
#: ports/nrf/common-hal/_bleio/PacketBuffer.c #: ports/nrf/common-hal/_bleio/PacketBuffer.c
msgid "Writes not supported on Characteristic" msgid "Writes not supported on Characteristic"
msgstr "" msgstr "Menulis tidak didukung pada Karakteristik"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "You are in safe mode: something unanticipated happened.\n" msgid "You are in safe mode: something unanticipated happened.\n"
msgstr "" msgstr "Anda berada dalam mode aman: sesuatu yang tidak terduga terjadi.\n"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "You requested starting safe mode by " msgid "You requested starting safe mode by "
@ -2197,7 +2220,7 @@ msgstr "Anda mengajukan untuk memulai mode aman pada (safe mode) pada "
#: py/objtype.c #: py/objtype.c
msgid "__init__() should return None" msgid "__init__() should return None"
msgstr "" msgstr "__init __() harus mengembalikan None"
#: py/objtype.c #: py/objtype.c
msgid "__init__() should return None, not '%q'" msgid "__init__() should return None, not '%q'"
@ -2205,7 +2228,7 @@ msgstr ""
#: py/objobject.c #: py/objobject.c
msgid "__new__ arg must be a user-type" msgid "__new__ arg must be a user-type"
msgstr "" msgstr "__new__ arg harus berupa user-type"
#: extmod/modubinascii.c extmod/moduhashlib.c py/objarray.c #: extmod/modubinascii.c extmod/moduhashlib.c py/objarray.c
msgid "a bytes-like object is required" msgid "a bytes-like object is required"
@ -2222,19 +2245,19 @@ msgstr "alamat %08x tidak selaras dengan %d bytes"
#: shared-bindings/i2cperipheral/I2CPeripheral.c #: shared-bindings/i2cperipheral/I2CPeripheral.c
msgid "address out of bounds" msgid "address out of bounds"
msgstr "" msgstr "alamat di luar batas"
#: shared-bindings/i2cperipheral/I2CPeripheral.c #: shared-bindings/i2cperipheral/I2CPeripheral.c
msgid "addresses is empty" msgid "addresses is empty"
msgstr "" msgstr "alamatnya kosong"
#: py/modbuiltins.c #: py/modbuiltins.c
msgid "arg is an empty sequence" msgid "arg is an empty sequence"
msgstr "" msgstr "arg berisi urutan kosong"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "argsort argument must be an ndarray" msgid "argsort argument must be an ndarray"
msgstr "" msgstr "Argumen argsort harus berupa ndarray"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "argsort is not implemented for flattened arrays" msgid "argsort is not implemented for flattened arrays"
@ -2242,7 +2265,7 @@ msgstr ""
#: py/runtime.c #: py/runtime.c
msgid "argument has wrong type" msgid "argument has wrong type"
msgstr "" msgstr "argumen memiliki tipe yang salah"
#: extmod/ulab/code/linalg/linalg.c #: extmod/ulab/code/linalg/linalg.c
msgid "argument must be ndarray" msgid "argument must be ndarray"
@ -2255,11 +2278,11 @@ msgstr "argumen num/types tidak cocok"
#: py/runtime.c #: py/runtime.c
msgid "argument should be a '%q' not a '%q'" msgid "argument should be a '%q' not a '%q'"
msgstr "" msgstr "argumen harus berupa '%q' bukan '%q'"
#: extmod/ulab/code/linalg/linalg.c extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/linalg/linalg.c extmod/ulab/code/numerical/numerical.c
msgid "arguments must be ndarrays" msgid "arguments must be ndarrays"
msgstr "" msgstr "argumen harus berupa ndarrays"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "array and index length must be equal" msgid "array and index length must be equal"
@ -2268,7 +2291,7 @@ msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
msgstr "" msgstr "diperlukan array/byte di sisi kanan"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "attempt to get (arg)min/(arg)max of empty sequence" msgid "attempt to get (arg)min/(arg)max of empty sequence"
@ -2276,11 +2299,11 @@ msgstr ""
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "attempt to get argmin/argmax of an empty sequence" msgid "attempt to get argmin/argmax of an empty sequence"
msgstr "" msgstr "berusaha mendapatkan argmin/argmax dari urutan kosong"
#: py/objstr.c #: py/objstr.c
msgid "attributes not supported yet" msgid "attributes not supported yet"
msgstr "" msgstr "atribut belum didukung"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "axis is out of bounds" msgid "axis is out of bounds"
@ -2300,7 +2323,7 @@ msgstr "mode compile buruk"
#: py/objstr.c #: py/objstr.c
msgid "bad conversion specifier" msgid "bad conversion specifier"
msgstr "" msgstr "specifier salah konversi"
#: py/objstr.c #: py/objstr.c
msgid "bad format string" msgid "bad format string"
@ -2326,10 +2349,18 @@ msgstr ""
msgid "branch not in range" msgid "branch not in range"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
#, fuzzy #, fuzzy
msgid "buffer size must match format" msgid "buffer size must match format"
@ -3332,6 +3363,10 @@ msgstr ""
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3388,6 +3423,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
#, fuzzy #, fuzzy
msgid "offset out of bounds" msgid "offset out of bounds"
@ -3944,6 +3983,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr ""

View File

@ -43,6 +43,10 @@ msgstr ""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr "" msgstr ""
@ -54,7 +58,8 @@ msgstr ""
#: shared-bindings/rgbmatrix/RGBMatrix.c #: shared-bindings/rgbmatrix/RGBMatrix.c
#, c-format #, c-format
msgid "%d address pins and %d rgb pins indicate a height of %d, not %d" msgid ""
"%d address pins, %d rgb pins and %d tiles indicate a height of %d, not %d"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/sdioio/SDCard.c #: ports/atmel-samd/common-hal/sdioio/SDCard.c
@ -512,7 +517,6 @@ msgstr ""
msgid "Buffer must be a multiple of 512 bytes" msgid "Buffer must be a multiple of 512 bytes"
msgstr "" msgstr ""
#: shared-bindings/adafruit_bus_device/I2CDevice.c
#: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c
msgid "Buffer must be at least length 1" msgid "Buffer must be at least length 1"
msgstr "" msgstr ""
@ -527,6 +531,7 @@ msgid "Buffer too short by %d bytes"
msgstr "" msgstr ""
#: ports/atmel-samd/common-hal/displayio/ParallelBus.c #: ports/atmel-samd/common-hal/displayio/ParallelBus.c
#: ports/esp32s2/common-hal/displayio/ParallelBus.c
#: ports/nrf/common-hal/displayio/ParallelBus.c #: ports/nrf/common-hal/displayio/ParallelBus.c
#, c-format #, c-format
msgid "Bus pin %d is already in use" msgid "Bus pin %d is already in use"
@ -796,6 +801,10 @@ msgstr ""
msgid "Data 0 pin must be byte aligned" msgid "Data 0 pin must be byte aligned"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/displayio/ParallelBus.c
msgid "Data 0 pin must be byte aligned."
msgstr ""
#: shared-module/audiocore/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Data chunk must follow fmt chunk" msgid "Data chunk must follow fmt chunk"
msgstr "" msgstr ""
@ -850,6 +859,10 @@ msgstr ""
msgid "Error in regex" msgid "Error in regex"
msgstr "" msgstr ""
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1240,10 +1253,18 @@ msgstr ""
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "" msgstr ""
@ -1260,6 +1281,10 @@ msgstr ""
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 ""
@ -1542,7 +1567,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -1564,7 +1589,6 @@ msgid ""
"PWM frequency not writable when variable_frequency is False on construction." "PWM frequency not writable when variable_frequency is False on construction."
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/displayio/ParallelBus.c
#: ports/mimxrt10xx/common-hal/displayio/ParallelBus.c #: ports/mimxrt10xx/common-hal/displayio/ParallelBus.c
#: ports/stm/common-hal/displayio/ParallelBus.c #: ports/stm/common-hal/displayio/ParallelBus.c
msgid "ParallelBus not yet supported" msgid "ParallelBus not yet supported"
@ -3300,6 +3324,10 @@ msgstr ""
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3694,6 +3722,10 @@ msgstr ""
msgid "threshold must be in the range 0-65536" msgid "threshold must be in the range 0-65536"
msgstr "" msgstr ""
#: shared-bindings/rgbmatrix/RGBMatrix.c
msgid "tile must be greater than zero"
msgstr ""
#: shared-bindings/time/__init__.c #: shared-bindings/time/__init__.c
msgid "time.struct_time() takes a 9-sequence" msgid "time.struct_time() takes a 9-sequence"
msgstr "" msgstr ""
@ -3914,6 +3946,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr ""

View File

@ -46,6 +46,10 @@ msgstr " Soubor \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " Soubor \"%q\", řádek %d" msgstr " Soubor \"%q\", řádek %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " výstup:\n" msgstr " výstup:\n"
@ -853,6 +857,10 @@ msgstr ""
msgid "Error in regex" msgid "Error in regex"
msgstr "" msgstr ""
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1243,10 +1251,18 @@ msgstr ""
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "" msgstr ""
@ -1263,6 +1279,10 @@ msgstr ""
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 ""
@ -1545,7 +1565,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -2016,7 +2036,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
@ -2281,10 +2302,18 @@ msgstr ""
msgid "branch not in range" msgid "branch not in range"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "" msgstr ""
@ -3286,6 +3315,10 @@ msgstr ""
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3342,6 +3375,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "" msgstr ""
@ -3896,6 +3933,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr ""

View File

@ -47,6 +47,10 @@ msgstr " Datei \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " Datei \"%q\", Zeile %d" msgstr " Datei \"%q\", Zeile %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " Ausgabe:\n" msgstr " Ausgabe:\n"
@ -865,6 +869,10 @@ msgstr "EXTINT Kanal ist schon in Benutzung"
msgid "Error in regex" msgid "Error in regex"
msgstr "Fehler in regex" msgstr "Fehler in regex"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1260,10 +1268,18 @@ msgstr "Ungültiger security_mode"
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "Ungültige Stimme" msgstr "Ungültige Stimme"
@ -1280,6 +1296,10 @@ msgstr "Ungültige wave Datei"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "Ungültige Wort- / Bitlänge" msgstr "Ungültige Wort- / Bitlänge"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 "Der Schlüssel muss 16, 24 oder 32 Byte lang sein" msgstr "Der Schlüssel muss 16, 24 oder 32 Byte lang sein"
@ -1570,7 +1590,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -2058,7 +2078,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
@ -2338,10 +2359,18 @@ msgstr "Es müssen 8 oder 16 bits_per_sample sein"
msgid "branch not in range" msgid "branch not in range"
msgstr "Zweig ist außerhalb der Reichweite" msgstr "Zweig ist außerhalb der Reichweite"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "Puffer muss ein bytes-artiges Objekt sein" msgstr "Puffer muss ein bytes-artiges Objekt sein"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "Die Puffergröße muss zum Format passen" msgstr "Die Puffergröße muss zum Format passen"
@ -3363,6 +3392,10 @@ msgstr "Nicht genügend Argumente für den Formatierungs-String"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "Die Anzahl der Punkte muss mindestens 2 betragen" msgstr "Die Anzahl der Punkte muss mindestens 2 betragen"
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3419,6 +3452,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "offset außerhalb der Grenzen" msgstr "offset außerhalb der Grenzen"
@ -3983,6 +4020,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "Fenster muss <= Intervall sein" msgstr "Fenster muss <= Intervall sein"

View File

@ -43,6 +43,10 @@ msgstr ""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr "" msgstr ""
@ -850,6 +854,10 @@ msgstr ""
msgid "Error in regex" msgid "Error in regex"
msgstr "" msgstr ""
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1240,10 +1248,18 @@ msgstr ""
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "" msgstr ""
@ -1260,6 +1276,10 @@ msgstr ""
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 ""
@ -1542,7 +1562,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -2013,7 +2033,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
@ -2278,10 +2299,18 @@ msgstr ""
msgid "branch not in range" msgid "branch not in range"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "" msgstr ""
@ -3283,6 +3312,10 @@ msgstr ""
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3339,6 +3372,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "" msgstr ""
@ -3893,6 +3930,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr ""

View File

@ -48,6 +48,10 @@ msgstr " Archivo \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " Archivo \"%q\", línea %d" msgstr " Archivo \"%q\", línea %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " salida:\n" msgstr " salida:\n"
@ -868,6 +872,10 @@ msgstr "El canal EXTINT ya está siendo utilizado"
msgid "Error in regex" msgid "Error in regex"
msgstr "Error en regex" msgstr "Error en regex"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1261,10 +1269,18 @@ msgstr "'security_mode' no válido"
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "Voz inválida" msgstr "Voz inválida"
@ -1281,6 +1297,10 @@ msgstr "Archivo wave inválido"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "Tamaño no válido de palabra/bit" msgstr "Tamaño no válido de palabra/bit"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 "La llave debe tener 16, 24 o 32 bytes de longitud" msgstr "La llave debe tener 16, 24 o 32 bytes de longitud"
@ -1569,7 +1589,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "Se acabaron los enchufes" msgstr "Se acabaron los enchufes"
@ -2063,8 +2083,9 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "Error no manejado de ESP TLS %d %d %x %d" msgstr "Error no manejado de ESP TLS %d %d %x %d"
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgstr "Fallo desconocido" msgid "Unknown failure %d"
msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
#, c-format #, c-format
@ -2339,10 +2360,18 @@ msgstr "bits_per_sample debe ser 8 ó 16"
msgid "branch not in range" msgid "branch not in range"
msgstr "la rama no está dentro del rango" msgstr "la rama no está dentro del rango"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "buffer debe de ser un objeto bytes-like" msgstr "buffer debe de ser un objeto bytes-like"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "el tamaño del buffer debe de coincidir con el formato" msgstr "el tamaño del buffer debe de coincidir con el formato"
@ -3357,6 +3386,10 @@ msgstr "no suficientes argumentos para format string"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "el número de puntos debe ser al menos 2" msgstr "el número de puntos debe ser al menos 2"
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "objeto '%q' no es tupla o lista" msgstr "objeto '%q' no es tupla o lista"
@ -3413,6 +3446,10 @@ msgstr "offset es demasiado grande"
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "offset fuera de límites" msgstr "offset fuera de límites"
@ -3970,6 +4007,10 @@ msgstr "el tiempo de espera del perro guardián debe ser mayor a 0"
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "el ancho debe ser mayor que cero" msgstr "el ancho debe ser mayor que cero"
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "la ventana debe ser <= intervalo" msgstr "la ventana debe ser <= intervalo"
@ -4034,6 +4075,9 @@ msgstr "zi debe ser de tipo flotante"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi debe ser una forma (n_section,2)" msgstr "zi debe ser una forma (n_section,2)"
#~ msgid "Unknown failure"
#~ msgstr "Fallo desconocido"
#~ msgid "input argument must be an integer or a 2-tuple" #~ msgid "input argument must be an integer or a 2-tuple"
#~ msgstr "el argumento de entrada debe ser un entero o una tupla de par" #~ msgstr "el argumento de entrada debe ser un entero o una tupla de par"

View File

@ -42,6 +42,10 @@ msgstr " File \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " File \"%q\", line %d" msgstr " File \"%q\", line %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " output:\n" msgstr " output:\n"
@ -861,6 +865,10 @@ msgstr "Ginagamit na ang EXTINT channel"
msgid "Error in regex" msgid "Error in regex"
msgstr "May pagkakamali sa REGEX" msgstr "May pagkakamali sa REGEX"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1255,10 +1263,18 @@ msgstr ""
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "" msgstr ""
@ -1275,6 +1291,10 @@ msgstr "May hindi tama sa wave file"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 ""
@ -1560,7 +1580,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -2034,7 +2054,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
@ -2308,10 +2329,18 @@ msgstr "bits_per_sample ay dapat 8 o 16"
msgid "branch not in range" msgid "branch not in range"
msgstr "branch wala sa range" msgstr "branch wala sa range"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "buffer ay dapat bytes-like object" msgstr "buffer ay dapat bytes-like object"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
#, fuzzy #, fuzzy
msgid "buffer size must match format" msgid "buffer size must match format"
@ -3330,6 +3359,10 @@ msgstr "kulang sa arguments para sa format string"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3386,6 +3419,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
#, fuzzy #, fuzzy
msgid "offset out of bounds" msgid "offset out of bounds"
@ -3946,6 +3983,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr ""

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: 0.1\n" "Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2021-01-13 16:07+0000\n" "PO-Revision-Date: 2021-01-17 12:55+0000\n"
"Last-Translator: Hugo Dahl <hugo@code-jedi.com>\n" "Last-Translator: Hugo Dahl <hugo@code-jedi.com>\n"
"Language: fr\n" "Language: fr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.4.1-dev\n" "X-Generator: Weblate 4.5-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -52,6 +52,10 @@ msgstr " Fichier \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " Fichier \"%q\", ligne %d" msgstr " Fichier \"%q\", ligne %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " sortie :\n" msgstr " sortie :\n"
@ -646,7 +650,7 @@ msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/digitalio/DigitalInOut.c
msgid "Cannot set value when direction is input." msgid "Cannot set value when direction is input."
msgstr "" msgstr ""
"Impossible d'affecter une valeur quand la direction est entrentre ('input')." "Impossible d'affecter une valeur quand la direction est entrante ('input')."
#: ports/esp32s2/common-hal/busio/UART.c #: ports/esp32s2/common-hal/busio/UART.c
#: ports/mimxrt10xx/common-hal/busio/UART.c #: ports/mimxrt10xx/common-hal/busio/UART.c
@ -882,6 +886,10 @@ msgstr "Canal EXTINT déjà utilisé"
msgid "Error in regex" msgid "Error in regex"
msgstr "Erreur dans l'expression régulière" msgstr "Erreur dans l'expression régulière"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1277,10 +1285,18 @@ msgstr "'security_mode' invalide"
msgid "Invalid size" msgid "Invalid size"
msgstr "Taille invalide" msgstr "Taille invalide"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "État invalide" msgstr "État invalide"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "Voix invalide" msgstr "Voix invalide"
@ -1297,6 +1313,10 @@ msgstr "Fichier WAVE invalide"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "Longueur de mot / bit invalide" msgstr "Longueur de mot / bit invalide"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 "La clé doit comporter 16, 24 ou 32 octets" msgstr "La clé doit comporter 16, 24 ou 32 octets"
@ -1585,7 +1605,7 @@ msgstr "Timeout de l'opération"
msgid "Out of memory" msgid "Out of memory"
msgstr "Hors de mémoire" msgstr "Hors de mémoire"
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "Plus de sockets" msgstr "Plus de sockets"
@ -2085,8 +2105,9 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "Erreur ESP TLS non gérée %d %d %x %d" msgstr "Erreur ESP TLS non gérée %d %d %x %d"
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgstr "Echec inconnu" msgid "Unknown failure %d"
msgstr "Échec inconnu %d"
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
#, c-format #, c-format
@ -2363,10 +2384,18 @@ msgstr "'bits_per_sample' doivent être 8 ou 16"
msgid "branch not in range" msgid "branch not in range"
msgstr "branche hors-bornes" msgstr "branche hors-bornes"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr "tampon est plus petit que la taille demandée"
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "le tampon doit être un objet bytes-like" msgstr "le tampon doit être un objet bytes-like"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr "taille du tampon doit être un multiple de la taille de l'élement"
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "la taille du tampon doit correspondre au format" msgstr "la taille du tampon doit correspondre au format"
@ -3390,6 +3419,10 @@ msgstr "pas assez d'arguments pour la chaîne de format"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "le nombre de points doit être d'au moins 2" msgstr "le nombre de points doit être d'au moins 2"
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "l'objet '%q' n'est pas un tuple ou une list" msgstr "l'objet '%q' n'est pas un tuple ou une list"
@ -3446,6 +3479,10 @@ msgstr "offset est trop large"
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "offset doit être >= 0" msgstr "offset doit être >= 0"
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr "offset doit être non-négatif, et au plus la taille du tampon"
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "décalage hors limites" msgstr "décalage hors limites"
@ -4006,6 +4043,10 @@ msgstr "watchdog timeout doit être supérieur à 0"
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "width doit être plus grand que zero" msgstr "width doit être plus grand que zero"
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "la fenêtre (window) doit être <= intervalle (interval)" msgstr "la fenêtre (window) doit être <= intervalle (interval)"
@ -4070,6 +4111,9 @@ msgstr "zi doit être de type float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi doit être de forme (n_section, 2)" msgstr "zi doit être de forme (n_section, 2)"
#~ msgid "Unknown failure"
#~ msgstr "Echec inconnu"
#~ msgid "Only one alarm.touch alarm can be set." #~ msgid "Only one alarm.touch alarm can be set."
#~ msgstr "Seulement une alarme alarm.touch peut être réglée." #~ msgstr "Seulement une alarme alarm.touch peut être réglée."

View File

@ -43,6 +43,10 @@ msgstr ""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr "" msgstr ""
@ -850,6 +854,10 @@ msgstr ""
msgid "Error in regex" msgid "Error in regex"
msgstr "" msgstr ""
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1240,10 +1248,18 @@ msgstr ""
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "" msgstr ""
@ -1260,6 +1276,10 @@ msgstr ""
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 ""
@ -1542,7 +1562,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -2013,7 +2033,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
@ -2278,10 +2299,18 @@ msgstr ""
msgid "branch not in range" msgid "branch not in range"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "" msgstr ""
@ -3283,6 +3312,10 @@ msgstr ""
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3339,6 +3372,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "" msgstr ""
@ -3893,6 +3930,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr ""

View File

@ -42,6 +42,10 @@ msgstr " File \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " File \"%q\", riga %d" msgstr " File \"%q\", riga %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " output:\n" msgstr " output:\n"
@ -861,6 +865,10 @@ msgstr "Canale EXTINT già in uso"
msgid "Error in regex" msgid "Error in regex"
msgstr "Errore nella regex" msgstr "Errore nella regex"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1257,10 +1265,18 @@ msgstr ""
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "" msgstr ""
@ -1278,6 +1294,10 @@ msgstr "File wave non valido"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 ""
@ -1565,7 +1585,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -2046,7 +2066,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
@ -2314,10 +2335,18 @@ msgstr "i bit devono essere 7, 8 o 9"
msgid "branch not in range" msgid "branch not in range"
msgstr "argomento di chr() non è in range(256)" msgstr "argomento di chr() non è in range(256)"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
#, fuzzy #, fuzzy
msgid "buffer size must match format" msgid "buffer size must match format"
@ -3336,6 +3365,10 @@ msgstr "argomenti non sufficienti per la stringa di formattazione"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3392,6 +3425,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
#, fuzzy #, fuzzy
msgid "offset out of bounds" msgid "offset out of bounds"
@ -3954,6 +3991,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr ""

View File

@ -48,6 +48,10 @@ msgstr " ファイル \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " ファイル \"%q\", 行 %d" msgstr " ファイル \"%q\", 行 %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " 出力:\n" msgstr " 出力:\n"
@ -861,6 +865,10 @@ msgstr "EXTINTチャネルはすでに使用されています"
msgid "Error in regex" msgid "Error in regex"
msgstr "正規表現にエラーがあります" msgstr "正規表現にエラーがあります"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1253,10 +1261,18 @@ msgstr "不正なsecurity_mode"
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "不正なボイス" msgstr "不正なボイス"
@ -1273,6 +1289,10 @@ msgstr "不正なwaveファイル"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "不正なワード/ビット長" msgstr "不正なワード/ビット長"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 "Keyの長さは、16, 24, 32バイトのいずれかでなければなりません" msgstr "Keyの長さは、16, 24, 32バイトのいずれかでなければなりません"
@ -1557,7 +1577,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -2036,7 +2056,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
@ -2301,10 +2322,18 @@ msgstr "bits_per_sampleは8または16でなければなりません"
msgid "branch not in range" msgid "branch not in range"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "バッファはbytes-likeオブジェクトでなければなりません" msgstr "バッファはbytes-likeオブジェクトでなければなりません"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "" msgstr ""
@ -3311,6 +3340,10 @@ msgstr "書式化文字列への引数が足りません"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "オブジェクト'%q'がタプルやリストでありません" msgstr "オブジェクト'%q'がタプルやリストでありません"
@ -3367,6 +3400,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "" msgstr ""
@ -3924,6 +3961,10 @@ msgstr "watchdogのtimeoutは0以上でなければなりません"
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "windowはinterval以下でなければなりません" msgstr "windowはinterval以下でなければなりません"

View File

@ -44,6 +44,10 @@ msgstr " 파일 \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " 파일 \"%q\", 라인 %d" msgstr " 파일 \"%q\", 라인 %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " 산출:\n" msgstr " 산출:\n"
@ -853,6 +857,10 @@ msgstr ""
msgid "Error in regex" msgid "Error in regex"
msgstr "Regex에 오류가 있습니다." msgstr "Regex에 오류가 있습니다."
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1243,10 +1251,18 @@ msgstr ""
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "" msgstr ""
@ -1263,6 +1279,10 @@ msgstr ""
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 ""
@ -1545,7 +1565,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -2017,7 +2037,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
@ -2282,10 +2303,18 @@ msgstr "bits_per_sample은 8 또는 16이어야합니다."
msgid "branch not in range" msgid "branch not in range"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "" msgstr ""
@ -3287,6 +3316,10 @@ msgstr ""
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "" msgstr ""
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3343,6 +3376,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "" msgstr ""
@ -3897,6 +3934,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr ""

View File

@ -46,6 +46,10 @@ msgstr " Bestand"
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " Bestand \"%q\", regel %d" msgstr " Bestand \"%q\", regel %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " uitvoer:\n" msgstr " uitvoer:\n"
@ -861,6 +865,10 @@ msgstr "EXTINT kanaal al in gebruik"
msgid "Error in regex" msgid "Error in regex"
msgstr "Fout in regex" msgstr "Fout in regex"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1254,10 +1262,18 @@ msgstr "Ongeldige security_mode"
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "Ongeldige stem" msgstr "Ongeldige stem"
@ -1274,6 +1290,10 @@ msgstr "Ongeldig wave bestand"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "Ongeldig woord/bit lengte" msgstr "Ongeldig woord/bit lengte"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 "Sleutel moet 16, 24, of 32 bytes lang zijn" msgstr "Sleutel moet 16, 24, of 32 bytes lang zijn"
@ -1562,7 +1582,7 @@ msgstr ""
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "Geen sockets meer beschikbaar" msgstr "Geen sockets meer beschikbaar"
@ -2055,8 +2075,9 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "Niet behandelde ESP TLS fout %d %d %x %d" msgstr "Niet behandelde ESP TLS fout %d %d %x %d"
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgstr "Onbekende fout" msgid "Unknown failure %d"
msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
#, c-format #, c-format
@ -2331,10 +2352,18 @@ msgstr "bits_per_sample moet 8 of 16 zijn"
msgid "branch not in range" msgid "branch not in range"
msgstr "pad (branch) niet binnen bereik" msgstr "pad (branch) niet binnen bereik"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "buffer moet een byte-achtig object zijn" msgstr "buffer moet een byte-achtig object zijn"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "grootte van de buffer moet overeenkomen met het formaat" msgstr "grootte van de buffer moet overeenkomen met het formaat"
@ -3344,6 +3373,10 @@ msgstr "niet genoeg argumenten om string te formatteren"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "aantal punten moet minimaal 2 zijn" msgstr "aantal punten moet minimaal 2 zijn"
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "object '%q' is geen tuple of lijst" msgstr "object '%q' is geen tuple of lijst"
@ -3400,6 +3433,10 @@ msgstr "compensatie is te groot"
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "compensatie moet groter of gelijk 0 zijn" msgstr "compensatie moet groter of gelijk 0 zijn"
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "offset buiten bereik" msgstr "offset buiten bereik"
@ -3957,6 +3994,10 @@ msgstr "watchdog time-out moet groter zijn dan 0"
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "breedte moet groter dan nul zijn" msgstr "breedte moet groter dan nul zijn"
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "window moet <= interval zijn" msgstr "window moet <= interval zijn"
@ -4021,6 +4062,9 @@ msgstr "zi moet van type float zijn"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi moet vorm (n_section, 2) hebben" msgstr "zi moet vorm (n_section, 2) hebben"
#~ msgid "Unknown failure"
#~ msgstr "Onbekende fout"
#~ msgid "input argument must be an integer or a 2-tuple" #~ msgid "input argument must be an integer or a 2-tuple"
#~ msgstr "invoerargument moet een integer of 2-tuple zijn" #~ msgstr "invoerargument moet een integer of 2-tuple zijn"

View File

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2020-12-02 20:29+0000\n" "PO-Revision-Date: 2021-01-20 02:40+0000\n"
"Last-Translator: Maciej Stankiewicz <tawezik@gmail.com>\n" "Last-Translator: Maciej Stankiewicz <tawezik@gmail.com>\n"
"Language-Team: pl\n" "Language-Team: pl\n"
"Language: pl\n" "Language: pl\n"
@ -16,7 +16,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n" "|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.4-dev\n" "X-Generator: Weblate 4.5-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -48,6 +48,10 @@ msgstr " Plik \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " Plik \"%q\", linia %d" msgstr " Plik \"%q\", linia %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " wyjście:\n" msgstr " wyjście:\n"
@ -770,7 +774,7 @@ msgstr "Nie można rozpocząć przerwania, RX jest zajęty"
#: shared-module/audiomp3/MP3Decoder.c #: shared-module/audiomp3/MP3Decoder.c
msgid "Couldn't allocate decoder" msgid "Couldn't allocate decoder"
msgstr "" msgstr "Nie udało się przydzielić dekodera"
#: shared-module/audiocore/WaveFile.c shared-module/audiomixer/Mixer.c #: shared-module/audiocore/WaveFile.c shared-module/audiomixer/Mixer.c
#: shared-module/audiomp3/MP3Decoder.c #: shared-module/audiomp3/MP3Decoder.c
@ -861,6 +865,10 @@ msgstr "Kanał EXTINT w użyciu"
msgid "Error in regex" msgid "Error in regex"
msgstr "Błąd w regex" msgstr "Błąd w regex"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr ""
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1070,7 +1078,7 @@ msgstr "Niewłaściwa wielkość bufora"
#: ports/esp32s2/common-hal/watchdog/WatchDogTimer.c #: ports/esp32s2/common-hal/watchdog/WatchDogTimer.c
msgid "Initialization failed due to lack of memory" msgid "Initialization failed due to lack of memory"
msgstr "" msgstr "Inicjalizacja nie powiodła się z powodu braku pamięci"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/atmel-samd/common-hal/pulseio/PulseIn.c
msgid "Input taking too long" msgid "Input taking too long"
@ -1251,10 +1259,18 @@ msgstr "Nieprawidłowy security_mode"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid size" msgid "Invalid size"
msgstr "Nieprawidłowy rozmiar"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr "" msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "Nieprawidłowy stan"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr "" msgstr ""
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
@ -1273,6 +1289,10 @@ msgstr "Zły plik wave"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "Niepoprawna długość słowa/bitu" msgstr "Niepoprawna długość słowa/bitu"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
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 "Klucz musi mieć długość 16, 24 lub 32 bajtów" msgstr "Klucz musi mieć długość 16, 24 lub 32 bajtów"
@ -1554,9 +1574,9 @@ msgstr ""
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr "Brak pamięci"
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "" msgstr ""
@ -1707,7 +1727,7 @@ msgstr "Obiekt tylko do odczytu"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Received response was invalid" msgid "Received response was invalid"
msgstr "" msgstr "Otrzymana odpowiedź była nieprawidłowa"
#: shared-bindings/displayio/EPaperDisplay.c #: shared-bindings/displayio/EPaperDisplay.c
msgid "Refresh too soon" msgid "Refresh too soon"
@ -1723,7 +1743,7 @@ msgstr "Żądany tryb AES nie jest obsługiwany"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Requested resource not found" msgid "Requested resource not found"
msgstr "" msgstr "Nie znaleziono żądanego zasobu"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c #: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Right channel unsupported" msgid "Right channel unsupported"
@ -2027,7 +2047,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "" msgstr ""
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgid "Unknown failure %d"
msgstr "" msgstr ""
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
@ -2298,10 +2319,18 @@ msgstr "bits_per_sample musi być 8 lub 16"
msgid "branch not in range" msgid "branch not in range"
msgstr "skok poza zakres" msgstr "skok poza zakres"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr ""
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "bufor mysi być typu bytes" msgstr "bufor mysi być typu bytes"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr ""
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "wielkość bufora musi pasować do formatu" msgstr "wielkość bufora musi pasować do formatu"
@ -3304,6 +3333,10 @@ msgstr "nie dość argumentów przy formatowaniu"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "liczba punktów musi wynosić co najmniej 2" msgstr "liczba punktów musi wynosić co najmniej 2"
#: py/builtinhelp.c
msgid "object "
msgstr ""
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "" msgstr ""
@ -3360,6 +3393,10 @@ msgstr ""
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr ""
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr ""
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "offset poza zakresem" msgstr "offset poza zakresem"
@ -3916,6 +3953,10 @@ msgstr ""
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "" msgstr ""
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr ""
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr ""

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2021-01-13 02:19+0000\n" "PO-Revision-Date: 2021-01-22 15:30+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n" "Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: pt_BR\n" "Language: pt_BR\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.4.1-dev\n" "X-Generator: Weblate 4.5-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -50,6 +50,10 @@ msgstr " Arquivo \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " Arquivo \"%q\", linha %d" msgstr " Arquivo \"%q\", linha %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr " é do tipo %q\n"
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " saída:\n" msgstr " saída:\n"
@ -877,6 +881,10 @@ msgstr "Canal EXTINT em uso"
msgid "Error in regex" msgid "Error in regex"
msgstr "Erro no regex" msgstr "Erro no regex"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr "Erro: Falha na vinculação"
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1270,10 +1278,18 @@ msgstr "O Security_mode é inválido"
msgid "Invalid size" msgid "Invalid size"
msgstr "Tamanho inválido" msgstr "Tamanho inválido"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr "Soquete inválido para o TLS"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "Estado inválido" msgstr "Estado inválido"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr "Uso inválido do soquete TLS"
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
msgstr "A voz é inválida" msgstr "A voz é inválida"
@ -1290,6 +1306,10 @@ msgstr "Aqruivo de ondas inválido"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "O comprimento do bit/palavra são inválidos" msgstr "O comprimento do bit/palavra são inválidos"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
msgstr "Problema na configuração do SO_REUSEADDR"
#: 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 "A chave deve ter 16, 24 ou 32 bytes de comprimento" msgstr "A chave deve ter 16, 24 ou 32 bytes de comprimento"
@ -1577,7 +1597,7 @@ msgstr "A operação expirou"
msgid "Out of memory" msgid "Out of memory"
msgstr "Sem memória" msgstr "Sem memória"
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "Sem soquetes" msgstr "Sem soquetes"
@ -2078,8 +2098,9 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "Erro não tratado do ESP TLS %d %d %x %d" msgstr "Erro não tratado do ESP TLS %d %d %x %d"
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgstr "Falha desconhecida" msgid "Unknown failure %d"
msgstr "Falha desconhecida %d"
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
#, c-format #, c-format
@ -2355,10 +2376,18 @@ msgstr "bits_per_sample deve ser 8 ou 16"
msgid "branch not in range" msgid "branch not in range"
msgstr "ramo fora do alcance" msgstr "ramo fora do alcance"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr "o tamanho do buffer é menor do que o tamanho que foi solicitado"
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "o buffer deve ser um objeto como bytes" msgstr "o buffer deve ser um objeto como bytes"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr "o tamanho do buffer deve ser um múltiplo do tamanho do elemento"
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "o tamanho do buffer deve coincidir com o formato" msgstr "o tamanho do buffer deve coincidir com o formato"
@ -3375,6 +3404,10 @@ msgstr "argumentos insuficientes para o formato da string"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "a quantidade dos pontos deve ser pelo menos 2" msgstr "a quantidade dos pontos deve ser pelo menos 2"
#: py/builtinhelp.c
msgid "object "
msgstr "objeto "
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "o objeto '%q' não é uma tupla ou uma lista" msgstr "o objeto '%q' não é uma tupla ou uma lista"
@ -3431,6 +3464,10 @@ msgstr "o offset é muito grande"
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "o offset deve ser >= 0" msgstr "o offset deve ser >= 0"
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr "o offset deve ser positivo e não maior do que o comprimento do buffer"
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "desvio fora dos limites" msgstr "desvio fora dos limites"
@ -3992,6 +4029,10 @@ msgstr "o tempo limite do watchdog deve ser maior que 0"
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "a largura deve ser maior que zero" msgstr "a largura deve ser maior que zero"
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr "o wifi não está ativo"
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "a janela deve ser <= intervalo" msgstr "a janela deve ser <= intervalo"
@ -4056,6 +4097,9 @@ msgstr "zi deve ser de um tipo float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi deve estar na forma (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)"
#~ msgid "Unknown failure"
#~ msgstr "Falha desconhecida"
#~ msgid "Only one alarm.touch alarm can be set." #~ msgid "Only one alarm.touch alarm can be set."
#~ msgstr "Apenas um alarme alarm.touch pode ser definido." #~ msgstr "Apenas um alarme alarm.touch pode ser definido."

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2021-01-05 21:03+0000\n" "PO-Revision-Date: 2021-01-25 19:32+0000\n"
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n" "Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: sv\n" "Language: sv\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.4.1-dev\n" "X-Generator: Weblate 4.5-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -50,6 +50,10 @@ msgstr " Filen \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " Fil \"%q\", rad %d" msgstr " Fil \"%q\", rad %d"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr " är av typen %q\n"
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " utdata:\n" msgstr " utdata:\n"
@ -123,7 +127,7 @@ msgstr "%q() kräver %d positionsargument men %d gavs"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
#, c-format #, c-format
msgid "%s error 0x%x" msgid "%s error 0x%x"
msgstr "" msgstr "%s fel 0x%x"
#: py/argcheck.c #: py/argcheck.c
msgid "'%q' argument required" msgid "'%q' argument required"
@ -289,7 +293,7 @@ msgstr "3-arguments pow() stöds inte"
#: shared-module/msgpack/__init__.c #: shared-module/msgpack/__init__.c
msgid "64 bit types" msgid "64 bit types"
msgstr "" msgstr "64-bitars typer"
#: ports/atmel-samd/common-hal/countio/Counter.c #: ports/atmel-samd/common-hal/countio/Counter.c
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c #: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
@ -555,7 +559,7 @@ msgstr "CBC-block måste vara multiplar om 16 byte"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "CRC or checksum was invalid" msgid "CRC or checksum was invalid"
msgstr "" msgstr "CRC eller checksumma var ogiltig"
#: py/objtype.c #: py/objtype.c
msgid "Call super().__init__() before accessing native object." msgid "Call super().__init__() before accessing native object."
@ -866,6 +870,10 @@ msgstr "EXTINT-kanalen används redan"
msgid "Error in regex" msgid "Error in regex"
msgstr "Fel i regex" msgstr "Fel i regex"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr "Fel: Bind misslyckades"
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -1014,7 +1022,7 @@ msgstr "Funktion kräver lås"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Generic Failure" msgid "Generic Failure"
msgstr "" msgstr "Generiskt fel"
#: shared-bindings/displayio/Display.c #: shared-bindings/displayio/Display.c
#: shared-bindings/displayio/EPaperDisplay.c #: shared-bindings/displayio/EPaperDisplay.c
@ -1256,11 +1264,19 @@ msgstr "Ogiltigt säkerhetsläge"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr "Ogiltig storlek"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr "Ogiltig socket för TLS"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr "Ogiltigt tillstånd"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr "Ogiltig användning av TLS Socket"
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
@ -1278,6 +1294,10 @@ msgstr "Ogiltig wave-fil"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "Ogiltig word-/bitlängd" msgstr "Ogiltig word-/bitlängd"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
msgstr "Misslyckades att sätta SO_REUSEADDR"
#: 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 "Nyckeln måste vara 16, 24 eller 32 byte lång" msgstr "Nyckeln måste vara 16, 24 eller 32 byte lång"
@ -1304,7 +1324,7 @@ msgstr "Length måste vara positiv"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "MAC address was invalid" msgid "MAC address was invalid"
msgstr "" msgstr "MAC-adressen var ogiltig"
#: shared-module/bitbangio/SPI.c #: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed." msgid "MISO pin init failed."
@ -1540,7 +1560,7 @@ msgstr ""
#: ports/esp32s2/common-hal/alarm/touch/TouchAlarm.c #: ports/esp32s2/common-hal/alarm/touch/TouchAlarm.c
msgid "Only one TouchAlarm can be set in deep sleep." msgid "Only one TouchAlarm can be set in deep sleep."
msgstr "" msgstr "Endast ett TouchAlarm kan ställas in för djupsömn."
#: ports/esp32s2/common-hal/alarm/time/TimeAlarm.c #: ports/esp32s2/common-hal/alarm/time/TimeAlarm.c
msgid "Only one alarm.time alarm can be set." msgid "Only one alarm.time alarm can be set."
@ -1556,17 +1576,17 @@ msgstr "Endast raw int stöds för ip"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr "Operation eller funktion stöds inte"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Operation timed out" msgid "Operation timed out"
msgstr "" msgstr "Åtgärden orsakade timeout"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr "Slut på minne"
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "Slut på sockets" msgstr "Slut på sockets"
@ -1576,7 +1596,7 @@ msgstr "Översampling måste vara multipel av 8."
#: shared-bindings/audiobusio/PDMIn.c #: shared-bindings/audiobusio/PDMIn.c
msgid "PDMIn not available" msgid "PDMIn not available"
msgstr "" msgstr "PDMIn inte tillgänglig"
#: shared-bindings/pwmio/PWMOut.c #: shared-bindings/pwmio/PWMOut.c
msgid "" msgid ""
@ -1598,7 +1618,7 @@ msgstr "ParallelBus stöds ännu inte"
#: ports/esp32s2/common-hal/audiobusio/__init__.c #: ports/esp32s2/common-hal/audiobusio/__init__.c
msgid "Peripheral in use" msgid "Peripheral in use"
msgstr "" msgstr "Periferi i bruk"
#: py/moduerrno.c #: py/moduerrno.c
msgid "Permission denied" msgid "Permission denied"
@ -1728,7 +1748,7 @@ msgstr "Skrivskyddat objekt"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Received response was invalid" msgid "Received response was invalid"
msgstr "" msgstr "Mottaget svar var ogiltigt"
#: shared-bindings/displayio/EPaperDisplay.c #: shared-bindings/displayio/EPaperDisplay.c
msgid "Refresh too soon" msgid "Refresh too soon"
@ -1744,7 +1764,7 @@ msgstr "Det begärda AES-läget stöds inte"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Requested resource not found" msgid "Requested resource not found"
msgstr "" msgstr "Begärd resurs hittades inte"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c #: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Right channel unsupported" msgid "Right channel unsupported"
@ -2058,8 +2078,9 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "Ej hanterat ESP TLS-fel %d-%d-%x-%d" msgstr "Ej hanterat ESP TLS-fel %d-%d-%x-%d"
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgstr "Okänt fel" msgid "Unknown failure %d"
msgstr "Okänt fel %d"
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
#, c-format #, c-format
@ -2130,7 +2151,7 @@ msgstr "Värdets längd > max_length"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Version was invalid" msgid "Version was invalid"
msgstr "" msgstr "Versionen var ogiltig"
#: py/emitnative.c #: py/emitnative.c
msgid "Viper functions don't currently support more than 4 arguments" msgid "Viper functions don't currently support more than 4 arguments"
@ -2331,10 +2352,18 @@ msgstr "bits_per_sample måste vara 8 eller 16"
msgid "branch not in range" msgid "branch not in range"
msgstr "branch utanför räckvidd" msgstr "branch utanför räckvidd"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr "bufferten är mindre än begärd storlek"
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "buffer måste vara en byte-liknande objekt" msgstr "buffer måste vara en byte-liknande objekt"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr "buffertstorlek måste vara en multipel av elementstorlek"
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "buffertstorleken måste matcha formatet" msgstr "buffertstorleken måste matcha formatet"
@ -2544,7 +2573,7 @@ msgstr "circle kan endast registreras i en förälder"
#: shared-bindings/msgpack/ExtType.c #: shared-bindings/msgpack/ExtType.c
msgid "code outside range 0~127" msgid "code outside range 0~127"
msgstr "" msgstr "kod utanför intervallet 0~127"
#: shared-bindings/displayio/Palette.c #: shared-bindings/displayio/Palette.c
msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)" msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"
@ -2632,7 +2661,7 @@ msgstr "standard \"except\" måste ligga sist"
#: shared-bindings/msgpack/__init__.c #: shared-bindings/msgpack/__init__.c
msgid "default is not a function" msgid "default is not a function"
msgstr "" msgstr "default är inte en funktion"
#: shared-bindings/audiobusio/PDMIn.c #: shared-bindings/audiobusio/PDMIn.c
msgid "" msgid ""
@ -2738,7 +2767,7 @@ msgstr "förväntar nyckel:värde för dict"
#: shared-bindings/msgpack/__init__.c #: shared-bindings/msgpack/__init__.c
msgid "ext_hook is not a function" msgid "ext_hook is not a function"
msgstr "" msgstr "ext_hook är inte en funktion"
#: py/argcheck.c #: py/argcheck.c
msgid "extra keyword arguments given" msgid "extra keyword arguments given"
@ -3277,7 +3306,7 @@ msgstr "ingen bindning för ickelokal hittad"
#: shared-module/msgpack/__init__.c #: shared-module/msgpack/__init__.c
msgid "no default packer" msgid "no default packer"
msgstr "" msgstr "ingen standardpackare"
#: py/builtinimport.c #: py/builtinimport.c
msgid "no module named '%q'" msgid "no module named '%q'"
@ -3344,6 +3373,10 @@ msgstr "inte tillräckligt med argument för formatsträng"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "antal punkter måste vara minst 2" msgstr "antal punkter måste vara minst 2"
#: py/builtinhelp.c
msgid "object "
msgstr "objekt "
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "objektet '%q' är inte en tuple eller list" msgstr "objektet '%q' är inte en tuple eller list"
@ -3400,6 +3433,10 @@ msgstr "offset är för stor"
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "offset måste vara >= 0" msgstr "offset måste vara >= 0"
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr "offset måste vara icke-negativt och inte längre än buffertlängd"
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
msgstr "offset utanför gränserna" msgstr "offset utanför gränserna"
@ -3619,7 +3656,7 @@ msgstr "shape måste vara en tuple"
#: shared-module/msgpack/__init__.c #: shared-module/msgpack/__init__.c
msgid "short read" msgid "short read"
msgstr "" msgstr "kort läsning"
#: py/objstr.c #: py/objstr.c
msgid "sign not allowed in string format specifier" msgid "sign not allowed in string format specifier"
@ -3957,6 +3994,10 @@ msgstr "watchdog timeout måste vara större än 0"
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "width måste vara större än noll" msgstr "width måste vara större än noll"
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr "wifi är inte aktiverat"
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "window måste vara <= interval" msgstr "window måste vara <= interval"
@ -3995,7 +4036,7 @@ msgstr "x-värde utanför intervall"
#: ports/esp32s2/common-hal/audiobusio/__init__.c #: ports/esp32s2/common-hal/audiobusio/__init__.c
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr "xTaskCreate misslyckades"
#: shared-bindings/displayio/Shape.c #: shared-bindings/displayio/Shape.c
msgid "y should be an int" msgid "y should be an int"
@ -4021,6 +4062,9 @@ msgstr "zi måste vara av typ float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi måste vara i formen (n_section, 2)" msgstr "zi måste vara i formen (n_section, 2)"
#~ msgid "Unknown failure"
#~ msgstr "Okänt fel"
#~ msgid "Only one alarm.touch alarm can be set." #~ msgid "Only one alarm.touch alarm can be set."
#~ msgstr "Endast ett larm av typ alarm.touch kan ställas in." #~ msgstr "Endast ett larm av typ alarm.touch kan ställas in."

View File

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: circuitpython-cn\n" "Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2020-11-19 01:28+0000\n" "PO-Revision-Date: 2021-01-25 19:32+0000\n"
"Last-Translator: hexthat <hexthat@gmail.com>\n" "Last-Translator: hexthat <hexthat@gmail.com>\n"
"Language-Team: Chinese Hanyu Pinyin\n" "Language-Team: Chinese Hanyu Pinyin\n"
"Language: zh_Latn_pinyin\n" "Language: zh_Latn_pinyin\n"
@ -15,19 +15,23 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.4-dev\n" "X-Generator: Weblate 4.5-dev\n"
#: main.c #: main.c
msgid "" msgid ""
"\n" "\n"
"Code done running.\n" "Code done running.\n"
msgstr "" msgstr ""
"\n"
"Dàimǎ yùnxíng wánbì.\n"
#: main.c #: main.c
msgid "" msgid ""
"\n" "\n"
"Code stopped by auto-reload.\n" "Code stopped by auto-reload.\n"
msgstr "" msgstr ""
"\n"
"zì dòng chóng xīn jiā zǎi tíng zhǐ de dài mǎ.\n"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
@ -47,6 +51,10 @@ msgstr " Wénjiàn \"%q\""
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr " Wénjiàn \"%q\", dì %d xíng" msgstr " Wénjiàn \"%q\", dì %d xíng"
#: py/builtinhelp.c
msgid " is of type %q\n"
msgstr " shì %q lèi xíng\n"
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr " shūchū:\n" msgstr " shūchū:\n"
@ -121,7 +129,7 @@ msgstr "%q() cǎiyòng %d wèizhì cānshù, dàn gěi chū %d"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
#, c-format #, c-format
msgid "%s error 0x%x" msgid "%s error 0x%x"
msgstr "" msgstr "%s cuò wù 0x%x"
#: py/argcheck.c #: py/argcheck.c
msgid "'%q' argument required" msgid "'%q' argument required"
@ -287,7 +295,7 @@ msgstr "bù zhīchí 3-arg pow ()"
#: shared-module/msgpack/__init__.c #: shared-module/msgpack/__init__.c
msgid "64 bit types" msgid "64 bit types"
msgstr "" msgstr "64 wèi lèi xíng"
#: ports/atmel-samd/common-hal/countio/Counter.c #: ports/atmel-samd/common-hal/countio/Counter.c
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c #: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
@ -553,7 +561,7 @@ msgstr "CBC kuài bì xū shì 16 zì jié de bèi shù"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "CRC or checksum was invalid" msgid "CRC or checksum was invalid"
msgstr "" msgstr "CRC huò jiào yàn hé wú xiào"
#: py/objtype.c #: py/objtype.c
msgid "Call super().__init__() before accessing native object." msgid "Call super().__init__() before accessing native object."
@ -561,15 +569,17 @@ msgstr "Zài fǎngwèn běn jī wùjiàn zhīqián diàoyòng super().__init__()
#: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c #: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c
msgid "Can only alarm on RTC IO from deep sleep." msgid "Can only alarm on RTC IO from deep sleep."
msgstr "" msgstr "zhǐ néng zài RTC Io shàng cóng shēn dù shuì mián zhōng bào jǐng."
#: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c #: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c
msgid "Can only alarm on one low pin while others alarm high from deep sleep." msgid "Can only alarm on one low pin while others alarm high from deep sleep."
msgstr "" msgstr ""
"Zhǐ néng zài yīgè dī diàn píng yǐn jiǎo shàng fāchū jǐngbào, ér qítā yǐn "
"jiǎo cóng shēndù shuìmián zhōng fāchū gāo diàn píng jǐngbào."
#: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c #: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c
msgid "Can only alarm on two low pins from deep sleep." msgid "Can only alarm on two low pins from deep sleep."
msgstr "" msgstr "zhǐ néng cóng shēn dù shuì mián zhōng bào jǐng liǎng gè dī yǐn jiǎo."
#: ports/nrf/common-hal/_bleio/Characteristic.c #: ports/nrf/common-hal/_bleio/Characteristic.c
msgid "Can't set CCCD on local Characteristic" msgid "Can't set CCCD on local Characteristic"
@ -605,7 +615,7 @@ msgstr "Wúfǎ shūchū tóng yīgè yǐn jiǎo shàng de liǎng gè píndào"
#: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c #: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot pull on input-only pin." msgid "Cannot pull on input-only pin."
msgstr "" msgstr "wú fǎ lā dòng jǐn shū rù yǐn jiǎo."
#: shared-module/bitbangio/SPI.c #: shared-module/bitbangio/SPI.c
msgid "Cannot read without MISO pin." msgid "Cannot read without MISO pin."
@ -652,7 +662,7 @@ msgstr "Wúfǎ gēnggǎi yǐ zài shǐyòng de jìshí qì shàng de pínlǜ"
#: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c #: ports/esp32s2/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge. Only level." msgid "Cannot wake on pin edge. Only level."
msgstr "" msgstr "wú fǎ zài yǐn jiǎo biān yuán huàn xǐng. jǐn jí bié."
#: shared-module/bitbangio/SPI.c #: shared-module/bitbangio/SPI.c
msgid "Cannot write without MOSI pin." msgid "Cannot write without MOSI pin."
@ -859,6 +869,10 @@ msgstr "EXTINT píndào yǐjīng shǐyòng"
msgid "Error in regex" msgid "Error in regex"
msgstr "Zhèngzé biǎodá shì cuòwù" msgstr "Zhèngzé biǎodá shì cuòwù"
#: shared-bindings/socketpool/Socket.c
msgid "Error: Failure to bind"
msgstr "cuò wù: bǎng dìng shī bài"
#: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c #: py/enum.c shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c #: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/neopixel_write/__init__.c
@ -894,7 +908,7 @@ msgstr "Qídài yīgè dìzhǐ"
#: shared-bindings/alarm/__init__.c #: shared-bindings/alarm/__init__.c
msgid "Expected an alarm" msgid "Expected an alarm"
msgstr "" msgstr "yù qī yǒu jǐng bào"
#: shared-module/_pixelbuf/PixelBuf.c #: shared-module/_pixelbuf/PixelBuf.c
#, c-format #, c-format
@ -911,7 +925,7 @@ msgstr "FFT jǐn wéi ndarrays dìng yì"
#: extmod/ulab/code/fft/fft.c #: extmod/ulab/code/fft/fft.c
msgid "FFT is implemented for linear arrays only" msgid "FFT is implemented for linear arrays only"
msgstr "" msgstr "FFT jǐn shì yòng yú xiàn xìng zhèn liè"
#: ports/esp32s2/common-hal/socketpool/Socket.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Failed SSL handshake" msgid "Failed SSL handshake"
@ -985,7 +999,7 @@ msgstr "guò lǜ qì tài fù zá"
#: ports/esp32s2/common-hal/dualbank/__init__.c #: ports/esp32s2/common-hal/dualbank/__init__.c
msgid "Firmware image is invalid" msgid "Firmware image is invalid"
msgstr "" msgstr "gù jiàn yìng xiàng wú xiào"
#: ports/cxd56/common-hal/camera/Camera.c #: ports/cxd56/common-hal/camera/Camera.c
msgid "Format not supported" msgid "Format not supported"
@ -1007,7 +1021,7 @@ msgstr "Hánshù xūyào suǒdìng"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Generic Failure" msgid "Generic Failure"
msgstr "" msgstr "tōng yòng gù zhàng"
#: shared-bindings/displayio/Display.c #: shared-bindings/displayio/Display.c
#: shared-bindings/displayio/EPaperDisplay.c #: shared-bindings/displayio/EPaperDisplay.c
@ -1047,7 +1061,7 @@ msgstr "I2SOut bù kě yòng"
#: ports/esp32s2/common-hal/alarm/pin/__init__.c #: ports/esp32s2/common-hal/alarm/pin/__init__.c
msgid "IOs 0, 2 & 4 do not support internal pullup in sleep" msgid "IOs 0, 2 & 4 do not support internal pullup in sleep"
msgstr "" msgstr "IOS 0, 2 + 4 bù zhī chí shuì mián zhōng de nèi bù shàng lā"
#: shared-bindings/aesio/aes.c #: shared-bindings/aesio/aes.c
#, c-format #, c-format
@ -1135,7 +1149,7 @@ msgstr "Wúxiào de PWM pínlǜ"
#: ports/esp32s2/common-hal/analogio/AnalogIn.c #: ports/esp32s2/common-hal/analogio/AnalogIn.c
msgid "Invalid Pin" msgid "Invalid Pin"
msgstr "" msgstr "wú xiào yǐn jiǎo"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
#: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c
@ -1249,11 +1263,19 @@ msgstr "Ānquán móshì wúxiào"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid size" msgid "Invalid size"
msgstr "" msgstr "dà xiǎo wú xiào"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid socket for TLS"
msgstr "TLS de chā zuò wú xiào"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Invalid state" msgid "Invalid state"
msgstr "" msgstr "wú xiào zhuàng tài"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Invalid use of TLS Socket"
msgstr "TLS tào jiē zì de wú xiào shǐ yòng"
#: shared-bindings/audiomixer/Mixer.c #: shared-bindings/audiomixer/Mixer.c
msgid "Invalid voice" msgid "Invalid voice"
@ -1271,6 +1293,10 @@ msgstr "Wúxiào de làng làngcháo wénjiàn"
msgid "Invalid word/bit length" msgid "Invalid word/bit length"
msgstr "Wúxiào de zì/wèi chángdù" msgstr "Wúxiào de zì/wèi chángdù"
#: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Issue setting SO_REUSEADDR"
msgstr "wèn tí shè zhì SO_REUSEADDR"
#: 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 "mì yào bì xū wéi 16, 24 huò 32 zì jié cháng" msgstr "mì yào bì xū wéi 16, 24 huò 32 zì jié cháng"
@ -1297,7 +1323,7 @@ msgstr "Chángdù bìxū shìfēi fùshù"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "MAC address was invalid" msgid "MAC address was invalid"
msgstr "" msgstr "MAC dì zhǐ wú xiào"
#: shared-module/bitbangio/SPI.c #: shared-module/bitbangio/SPI.c
msgid "MISO pin init failed." msgid "MISO pin init failed."
@ -1347,7 +1373,7 @@ msgstr "bì xū shǐ yòng 6 RGB yǐn jiǎo de bèi shù, ér bù shì %d"
#: ports/esp32s2/common-hal/nvm/ByteArray.c #: ports/esp32s2/common-hal/nvm/ByteArray.c
msgid "NVS Error" msgid "NVS Error"
msgstr "" msgstr "NVS cuò wù"
#: py/parse.c #: py/parse.c
msgid "Name too long" msgid "Name too long"
@ -1370,7 +1396,7 @@ msgstr "Wèi zhǎodào DMA píndào"
#: shared-module/adafruit_bus_device/I2CDevice.c #: shared-module/adafruit_bus_device/I2CDevice.c
#, c-format #, c-format
msgid "No I2C device at address: %x" msgid "No I2C device at address: %x"
msgstr "" msgstr "dì zhǐ wú I2C shè bèi: %x"
#: ports/esp32s2/common-hal/busio/SPI.c ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/esp32s2/common-hal/busio/SPI.c ports/mimxrt10xx/common-hal/busio/SPI.c
#: ports/stm/common-hal/busio/SPI.c #: ports/stm/common-hal/busio/SPI.c
@ -1511,7 +1537,7 @@ msgstr "Jǐn zhīchí IPv4 dìzhǐ"
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/SocketPool.c
msgid "Only IPv4 sockets supported" msgid "Only IPv4 sockets supported"
msgstr "" msgstr "jǐn zhī chí IPv4 tào jiē zì"
#: shared-module/displayio/OnDiskBitmap.c #: shared-module/displayio/OnDiskBitmap.c
#, c-format #, c-format
@ -1532,11 +1558,11 @@ msgstr ""
#: ports/esp32s2/common-hal/alarm/touch/TouchAlarm.c #: ports/esp32s2/common-hal/alarm/touch/TouchAlarm.c
msgid "Only one TouchAlarm can be set in deep sleep." msgid "Only one TouchAlarm can be set in deep sleep."
msgstr "" msgstr "zhǐ yǒu yí gè chù mō bì kě yǐ shè zhì zài shēn dù shuì mián."
#: ports/esp32s2/common-hal/alarm/time/TimeAlarm.c #: ports/esp32s2/common-hal/alarm/time/TimeAlarm.c
msgid "Only one alarm.time alarm can be set." msgid "Only one alarm.time alarm can be set."
msgstr "" msgstr "zhǐ néng shè zhì yí gè bào jǐng."
#: shared-module/displayio/ColorConverter.c #: shared-module/displayio/ColorConverter.c
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
@ -1548,17 +1574,17 @@ msgstr "Ip jǐn zhīchí raw int"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr "bù zhī chí cāo zuò huò gōng néng"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Operation timed out" msgid "Operation timed out"
msgstr "" msgstr "cāo zuò yǐ fēn shí"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Out of memory" msgid "Out of memory"
msgstr "" msgstr "nèi cún bù zú"
#: ports/esp32s2/common-hal/socketpool/SocketPool.c #: ports/esp32s2/common-hal/socketpool/Socket.c
msgid "Out of sockets" msgid "Out of sockets"
msgstr "tào jiē zì wài" msgstr "tào jiē zì wài"
@ -1568,7 +1594,7 @@ msgstr "Guò cǎiyàng bìxū shì 8 de bèishù."
#: shared-bindings/audiobusio/PDMIn.c #: shared-bindings/audiobusio/PDMIn.c
msgid "PDMIn not available" msgid "PDMIn not available"
msgstr "" msgstr "PDMIn bù kě yòng"
#: shared-bindings/pwmio/PWMOut.c #: shared-bindings/pwmio/PWMOut.c
msgid "" msgid ""
@ -1589,7 +1615,7 @@ msgstr "Shàng bù zhīchí ParallelBus"
#: ports/esp32s2/common-hal/audiobusio/__init__.c #: ports/esp32s2/common-hal/audiobusio/__init__.c
msgid "Peripheral in use" msgid "Peripheral in use"
msgstr "" msgstr "shǐ yòng zhōng de wài shè"
#: py/moduerrno.c #: py/moduerrno.c
msgid "Permission denied" msgid "Permission denied"
@ -1658,11 +1684,13 @@ msgstr "Qiánzhuì huǎnchōng qū bìxū zài duī shàng"
#: main.c #: main.c
msgid "Press any key to enter the REPL. Use CTRL-D to reload.\n" msgid "Press any key to enter the REPL. Use CTRL-D to reload.\n"
msgstr "" msgstr "àn rèn hé jiàn jìn rù REPL. shǐ yòng CTRL-D zhòng xīn jiā zǎi .\n"
#: main.c #: main.c
msgid "Pretending to deep sleep until alarm, CTRL-C or file write.\n" msgid "Pretending to deep sleep until alarm, CTRL-C or file write.\n"
msgstr "" msgstr ""
"jiǎ zhuāng shēn dù shuì mián , zhí dào bào jǐng , CTRL-C huò wén jiàn xiě "
"rù .\n"
#: 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."
@ -1714,7 +1742,7 @@ msgstr "Zhǐ dú duìxiàng"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Received response was invalid" msgid "Received response was invalid"
msgstr "" msgstr "shōu dào de xiǎng yìng wú xiào"
#: shared-bindings/displayio/EPaperDisplay.c #: shared-bindings/displayio/EPaperDisplay.c
msgid "Refresh too soon" msgid "Refresh too soon"
@ -1730,7 +1758,7 @@ msgstr "Qǐngqiú de AES móshì bù shòu zhīchí"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Requested resource not found" msgid "Requested resource not found"
msgstr "" msgstr "wèi zhǎo dào qǐng qiú de zī yuán"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c #: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "Right channel unsupported" msgid "Right channel unsupported"
@ -1842,7 +1870,7 @@ msgstr "Dìngyì zhìshǎo yīgè UART yǐn jiǎo"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time" msgid "Supply one of monotonic_time or epoch_time"
msgstr "" msgstr "tí gòng qí zhōng yī monotonic_time huò epoch_time"
#: shared-bindings/gnss/GNSS.c #: shared-bindings/gnss/GNSS.c
msgid "System entry must be gnss.SatelliteSystem" msgid "System entry must be gnss.SatelliteSystem"
@ -1916,7 +1944,7 @@ msgstr "Píng pū kuāndù bìxū huàfēn wèi tú kuāndù"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "Time is in the past." msgid "Time is in the past."
msgstr "" msgstr "shí jiān yǐ jīng guò qù."
#: ports/nrf/common-hal/_bleio/Adapter.c #: ports/nrf/common-hal/_bleio/Adapter.c
#, c-format #, c-format
@ -2031,7 +2059,7 @@ msgstr "Wúfǎ xiě rù nvm."
#: shared-bindings/alarm/SleepMemory.c #: shared-bindings/alarm/SleepMemory.c
msgid "Unable to write to sleep_memory." msgid "Unable to write to sleep_memory."
msgstr "" msgstr "wú fǎ xiě rù sleep_memory。"
#: ports/nrf/common-hal/_bleio/UUID.c #: ports/nrf/common-hal/_bleio/UUID.c
msgid "Unexpected nrfx uuid type" msgid "Unexpected nrfx uuid type"
@ -2043,8 +2071,9 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
msgstr "Wèi chǔlǐ de ESP TLS cuòwù %d %d %x %d" msgstr "Wèi chǔlǐ de ESP TLS cuòwù %d %d %x %d"
#: shared-bindings/wifi/Radio.c #: shared-bindings/wifi/Radio.c
msgid "Unknown failure" #, c-format
msgstr "Wèizhī gùzhàng" msgid "Unknown failure %d"
msgstr "wèi zhī gù zhàng %d"
#: ports/nrf/common-hal/_bleio/__init__.c #: ports/nrf/common-hal/_bleio/__init__.c
#, c-format #, c-format
@ -2101,7 +2130,7 @@ msgstr "Bù zhīchí de lādòng zhí."
#: ports/esp32s2/common-hal/dualbank/__init__.c #: ports/esp32s2/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr "gēng xīn shī bài"
#: ports/nrf/common-hal/_bleio/Characteristic.c #: ports/nrf/common-hal/_bleio/Characteristic.c
#: ports/nrf/common-hal/_bleio/Descriptor.c #: ports/nrf/common-hal/_bleio/Descriptor.c
@ -2115,7 +2144,7 @@ msgstr "Zhí chángdù > zuìdà chángdù"
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c #: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
msgid "Version was invalid" msgid "Version was invalid"
msgstr "" msgstr "bǎn běn wú xiào"
#: py/emitnative.c #: py/emitnative.c
msgid "Viper functions don't currently support more than 4 arguments" msgid "Viper functions don't currently support more than 4 arguments"
@ -2172,7 +2201,7 @@ msgstr "WiFi mìmǎ bìxū jiè yú 8 dào 63 gè zìfú zhī jiān"
#: main.c #: main.c
msgid "Woken up by alarm.\n" msgid "Woken up by alarm.\n"
msgstr "" msgstr "bèi jǐng bào chǎo xǐng.\n"
#: ports/nrf/common-hal/_bleio/PacketBuffer.c #: ports/nrf/common-hal/_bleio/PacketBuffer.c
msgid "Writes not supported on Characteristic" msgid "Writes not supported on Characteristic"
@ -2229,7 +2258,7 @@ msgstr "argsort cānshù bìxū shì ndarray"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "argsort is not implemented for flattened arrays" msgid "argsort is not implemented for flattened arrays"
msgstr "" msgstr "wèi wéi pīn hé shù zǔ shí xiàn argsort"
#: py/runtime.c #: py/runtime.c
msgid "argument has wrong type" msgid "argument has wrong type"
@ -2254,7 +2283,7 @@ msgstr "cānshù bìxū shì ndarrays"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr "shù zǔ hé suǒ yǐn cháng dù bì xū xiāng děng"
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
@ -2263,7 +2292,7 @@ msgstr "yòu cè xūyào shùzǔ/zì jié"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "attempt to get (arg)min/(arg)max of empty sequence" msgid "attempt to get (arg)min/(arg)max of empty sequence"
msgstr "" msgstr "cháng shì huò qǔ (arg) zuì xiǎo zhí /(arg) zuì dà kōng xù liè"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "attempt to get argmin/argmax of an empty sequence" msgid "attempt to get argmin/argmax of an empty sequence"
@ -2275,15 +2304,15 @@ msgstr "shǔxìng shàngwèi zhīchí"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "axis is out of bounds" msgid "axis is out of bounds"
msgstr "" msgstr "zhóu chāo chū biān jiè"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "axis must be None, or an integer" msgid "axis must be None, or an integer"
msgstr "" msgstr "zhóu bì xū wéi \" wú \" huò zhěng shù"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "axis too long" msgid "axis too long"
msgstr "" msgstr "zhóu tài cháng"
#: py/builtinevex.c #: py/builtinevex.c
msgid "bad compile mode" msgid "bad compile mode"
@ -2317,10 +2346,18 @@ msgstr "měi jiàn yàngběn bìxū wèi 8 huò 16"
msgid "branch not in range" msgid "branch not in range"
msgstr "fēnzhī bùzài fànwéi nèi" msgstr "fēnzhī bùzài fànwéi nèi"
#: extmod/ulab/code/ulab_create.c
msgid "buffer is smaller than requested size"
msgstr "huǎn chōng qū xiǎo yú qǐng qiú de dà xiǎo"
#: shared-bindings/audiocore/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "huǎnchōng qū bìxū shì zì jié lèi duìxiàng" msgstr "huǎnchōng qū bìxū shì zì jié lèi duìxiàng"
#: extmod/ulab/code/ulab_create.c
msgid "buffer size must be a multiple of element size"
msgstr "huǎn chōng qū dà xiǎo bì xū shì yuán sù dà xiǎo de bèi shù"
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "buffer size must match format" msgid "buffer size must match format"
msgstr "huǎnchōng qū dàxiǎo bìxū pǐpèi géshì" msgstr "huǎnchōng qū dàxiǎo bìxū pǐpèi géshì"
@ -2488,7 +2525,7 @@ msgstr "wúfǎ cóng shǒudòng zìduàn guīgé qiēhuàn dào zìdòng zìduà
#: extmod/ulab/code/ndarray_operators.c #: extmod/ulab/code/ndarray_operators.c
msgid "cannot cast output with casting rule" msgid "cannot cast output with casting rule"
msgstr "" msgstr "wú fǎ shǐ yòng qiáng zhì zhuǎn huàn guī zé qiáng zhì zhuǎn huàn shū chū"
#: py/objtype.c #: py/objtype.c
msgid "cannot create '%q' instances" msgid "cannot create '%q' instances"
@ -2528,7 +2565,7 @@ msgstr "quānzi zhǐ néng zài yī wèi jiāzhǎng zhōng zhùcè"
#: shared-bindings/msgpack/ExtType.c #: shared-bindings/msgpack/ExtType.c
msgid "code outside range 0~127" msgid "code outside range 0~127"
msgstr "" msgstr "dài mǎ chāo chū fàn wéi 0~127"
#: shared-bindings/displayio/Palette.c #: shared-bindings/displayio/Palette.c
msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)" msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)"
@ -2595,7 +2632,7 @@ msgstr "wúfǎ quèdìng SD kǎ bǎnběn"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "cross is defined for 1D arrays of length 3" msgid "cross is defined for 1D arrays of length 3"
msgstr "" msgstr "duì yú cháng dù wéi 3 de 1D shù zǔ dìng yì cross"
#: extmod/ulab/code/approx/approx.c #: extmod/ulab/code/approx/approx.c
msgid "data must be iterable" msgid "data must be iterable"
@ -2607,7 +2644,7 @@ msgstr "shùjù chángdù bìxū xiāngděng"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "data type not understood" msgid "data type not understood"
msgstr "" msgstr "wèi lǐ jiě de shù jù lèi xíng"
#: py/parsenum.c #: py/parsenum.c
msgid "decimal numbers not supported" msgid "decimal numbers not supported"
@ -2619,7 +2656,7 @@ msgstr "mòrèn 'except' bìxū shì zuìhòu yīgè"
#: shared-bindings/msgpack/__init__.c #: shared-bindings/msgpack/__init__.c
msgid "default is not a function" msgid "default is not a function"
msgstr "" msgstr "mò rèn zhí bú shì hán shù"
#: shared-bindings/audiobusio/PDMIn.c #: shared-bindings/audiobusio/PDMIn.c
msgid "" msgid ""
@ -2646,7 +2683,7 @@ msgstr "bùtóng de cānshù bìxū shì ndarray"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "differentiation order out of range" msgid "differentiation order out of range"
msgstr "" msgstr "chā yì shùn xù fàn wéi"
#: py/modmath.c py/objfloat.c py/objint_longlong.c py/objint_mpz.c py/runtime.c #: py/modmath.c py/objfloat.c py/objint_longlong.c py/objint_mpz.c py/runtime.c
#: shared-bindings/math/__init__.c #: shared-bindings/math/__init__.c
@ -2679,7 +2716,7 @@ msgstr "jiéwěi_x yīnggāi shì yīgè zhěngshù"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr "epoch_time bǎn bù zhī chí cǐ bǎn běn"
#: ports/nrf/common-hal/busio/UART.c #: ports/nrf/common-hal/busio/UART.c
#, c-format #, c-format
@ -2724,7 +2761,7 @@ msgstr "qídài guānjiàn: Zìdiǎn de jiàzhí"
#: shared-bindings/msgpack/__init__.c #: shared-bindings/msgpack/__init__.c
msgid "ext_hook is not a function" msgid "ext_hook is not a function"
msgstr "" msgstr "ext_hook bú shì hán shù"
#: py/argcheck.c #: py/argcheck.c
msgid "extra keyword arguments given" msgid "extra keyword arguments given"
@ -2773,7 +2810,7 @@ msgstr "dì yīgè cānshù bìxū shì yī gè hánshù"
#: extmod/ulab/code/ulab_create.c #: extmod/ulab/code/ulab_create.c
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr "dì yī gè cān shù bì xū shì yí gè yuán zǔ ndarrays"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "first argument must be an iterable" msgid "first argument must be an iterable"
@ -2830,7 +2867,7 @@ msgstr "hánshù zài jiàngé mòwěi jùyǒu xiāngtóng de fúhào"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "function is defined for ndarrays only" msgid "function is defined for ndarrays only"
msgstr "" msgstr "hán shù jǐn wéi ndarrays dìng yì"
#: py/argcheck.c #: py/argcheck.c
#, c-format #, c-format
@ -2926,11 +2963,11 @@ msgstr "nèi lián jíhé bìxū shì yīgè hánshù"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "input and output shapes are not compatible" msgid "input and output shapes are not compatible"
msgstr "" msgstr "shū rù hé shū chū xíng zhuàng bù jiān róng"
#: extmod/ulab/code/ulab_create.c #: extmod/ulab/code/ulab_create.c
msgid "input argument must be an integer, a tuple, or a list" msgid "input argument must be an integer, a tuple, or a list"
msgstr "" msgstr "shū rù cān shù bì xū shì zhěng shù, yuán zǔ huò liè biǎo"
#: extmod/ulab/code/fft/fft.c #: extmod/ulab/code/fft/fft.c
msgid "input array length must be power of 2" msgid "input array length must be power of 2"
@ -2938,7 +2975,7 @@ msgstr "shūrù shùzǔ de chángdù bìxū shì 2 de mì"
#: extmod/ulab/code/ulab_create.c #: extmod/ulab/code/ulab_create.c
msgid "input arrays are not compatible" msgid "input arrays are not compatible"
msgstr "" msgstr "shū rù shù zǔ bù jiān róng"
#: extmod/ulab/code/poly/poly.c #: extmod/ulab/code/poly/poly.c
msgid "input data must be an iterable" msgid "input data must be an iterable"
@ -2954,19 +2991,19 @@ msgstr "shūrù jǔzhèn shì qíyì de"
#: extmod/ulab/code/user/user.c #: extmod/ulab/code/user/user.c
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr "shū rù bì xū shì mì jí de ndarray"
#: extmod/ulab/code/ulab_create.c #: extmod/ulab/code/ulab_create.c
msgid "input must be a tensor of rank 2" msgid "input must be a tensor of rank 2"
msgstr "" msgstr "shū rù bì xū shì děng jí 2 de zhāng liàng"
#: extmod/ulab/code/ulab_create.c extmod/ulab/code/user/user.c #: extmod/ulab/code/ulab_create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr "shū rù bì xū shì ndarray"
#: extmod/ulab/code/filter/filter.c #: extmod/ulab/code/filter/filter.c
msgid "input must be one-dimensional" msgid "input must be one-dimensional"
msgstr "" msgstr "shū rù bì xū shì yì wéi de"
#: extmod/ulab/code/linalg/linalg.c #: extmod/ulab/code/linalg/linalg.c
msgid "input must be square matrix" msgid "input must be square matrix"
@ -2982,7 +3019,7 @@ msgstr "shūrù xiàngliàng de chángdù bìxū xiāngděng"
#: extmod/ulab/code/poly/poly.c #: extmod/ulab/code/poly/poly.c
msgid "inputs are not iterable" msgid "inputs are not iterable"
msgstr "" msgstr "shū rù bù kě yí dòng"
#: py/parsenum.c #: py/parsenum.c
msgid "int() arg 2 must be >= 2 and <= 36" msgid "int() arg 2 must be >= 2 and <= 36"
@ -3056,7 +3093,7 @@ msgstr "wúxiào de hàomǎ yǔfǎ"
#: ports/esp32s2/common-hal/alarm/pin/__init__.c #: ports/esp32s2/common-hal/alarm/pin/__init__.c
msgid "io must be rtc io" msgid "io must be rtc io"
msgstr "" msgstr "IO bì xū shì RTC IO"
#: py/objtype.c #: py/objtype.c
msgid "issubclass() arg 1 must be a class" msgid "issubclass() arg 1 must be a class"
@ -3155,11 +3192,11 @@ msgstr "Dāng gùdìng chángdù wèi %s shí, zuìdà chángdù bìxū wèi 0-%
#: shared-bindings/_bleio/Characteristic.c shared-bindings/_bleio/Descriptor.c #: shared-bindings/_bleio/Characteristic.c shared-bindings/_bleio/Descriptor.c
msgid "max_length must be >= 0" msgid "max_length must be >= 0"
msgstr "" msgstr "zuì dà cháng dù bì xū >= 0"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is 4"
msgstr "" msgstr "zuì dà chǐ cùn shù wéi 4"
#: py/runtime.c #: py/runtime.c
msgid "maximum recursion depth exceeded" msgid "maximum recursion depth exceeded"
@ -3175,7 +3212,7 @@ msgstr "maxiter yìng wéi > 0"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "median argument must be an ndarray" msgid "median argument must be an ndarray"
msgstr "" msgstr "zhōng wèi shù cān shù bì xū shì ndarray"
#: py/runtime.c #: py/runtime.c
#, c-format #, c-format
@ -3261,7 +3298,7 @@ msgstr "zhǎo bù dào fēi běndì de bǎng dìng"
#: shared-module/msgpack/__init__.c #: shared-module/msgpack/__init__.c
msgid "no default packer" msgid "no default packer"
msgstr "" msgstr "wú mò rèn bāo zhuāng jī"
#: py/builtinimport.c #: py/builtinimport.c
msgid "no module named '%q'" msgid "no module named '%q'"
@ -3302,15 +3339,15 @@ msgstr "guānjiàn zì cānshù zhīhòu de fēi guānjiàn zì cānshù"
#: ports/nrf/common-hal/_bleio/Adapter.c #: ports/nrf/common-hal/_bleio/Adapter.c
msgid "non-zero timeout must be > 0.01" msgid "non-zero timeout must be > 0.01"
msgstr "" msgstr "fēi líng chāo shí bì xū > 0.01"
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "non-zero timeout must be >= interval" msgid "non-zero timeout must be >= interval"
msgstr "" msgstr "fēi líng chāo shí bì xū wéi >= jiàn gé"
#: extmod/ulab/code/linalg/linalg.c #: extmod/ulab/code/linalg/linalg.c
msgid "norm is defined for 1D and 2D arrays" msgid "norm is defined for 1D and 2D arrays"
msgstr "" msgstr "wéi 1D hé 2D shù zǔ dìng yì guī fàn"
#: shared-bindings/_bleio/UUID.c #: shared-bindings/_bleio/UUID.c
msgid "not a 128-bit UUID" msgid "not a 128-bit UUID"
@ -3328,6 +3365,10 @@ msgstr "géshì zìfú chuàn cān shǔ bùzú"
msgid "number of points must be at least 2" msgid "number of points must be at least 2"
msgstr "diǎnshù bìxū zhìshǎo wèi 2" msgstr "diǎnshù bìxū zhìshǎo wèi 2"
#: py/builtinhelp.c
msgid "object "
msgstr "duì xiàng "
#: py/obj.c #: py/obj.c
msgid "object '%q' is not a tuple or list" msgid "object '%q' is not a tuple or list"
msgstr "duìxiàng '%q' bùshì yuán zǔ huò lièbiǎo" msgstr "duìxiàng '%q' bùshì yuán zǔ huò lièbiǎo"
@ -3378,11 +3419,15 @@ msgstr "jīshù zìfú chuàn"
#: extmod/ulab/code/ulab_create.c #: extmod/ulab/code/ulab_create.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr "piān yí tài dà"
#: shared-bindings/dualbank/__init__.c #: shared-bindings/dualbank/__init__.c
msgid "offset must be >= 0" msgid "offset must be >= 0"
msgstr "" msgstr "piān yí liàng bì xū >= 0"
#: extmod/ulab/code/ulab_create.c
msgid "offset must be non-negative and no greater than buffer length"
msgstr "piān yí liàng bì xū wéi fēi fù shù qiě bù dà yú huǎn chōng qū cháng dù"
#: py/objstr.c py/objstrunicode.c #: py/objstr.c py/objstrunicode.c
msgid "offset out of bounds" msgid "offset out of bounds"
@ -3408,7 +3453,7 @@ msgstr "cāozuò shǔ bùnéng yīqǐ guǎngbò"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "operation is implemented for 1D Boolean arrays only" msgid "operation is implemented for 1D Boolean arrays only"
msgstr "" msgstr "jǐn duì 1D bù ěr shù zǔ shí xiàn cāo zuò"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "operation is not implemented on ndarrays" msgid "operation is not implemented on ndarrays"
@ -3548,7 +3593,7 @@ msgstr "qǐngqiú chángdù %d dàn duìxiàng chángdù %d"
#: extmod/ulab/code/ndarray_operators.c #: extmod/ulab/code/ndarray_operators.c
msgid "results cannot be cast to specified type" msgid "results cannot be cast to specified type"
msgstr "" msgstr "wú fǎ jiāng jié guǒ qiáng zhì zhuǎn huàn dào zhǐ dìng lèi xíng"
#: py/compile.c #: py/compile.c
msgid "return annotation must be an identifier" msgid "return annotation must be an identifier"
@ -3570,7 +3615,7 @@ msgstr "rgb_pins[%d] yǔ shízhōng bùzài tóng yīgè duānkǒu shàng"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "roll argument must be an ndarray" msgid "roll argument must be an ndarray"
msgstr "" msgstr "gǔn dòng cān shù bì xū shì ndarray"
#: py/objstr.c #: py/objstr.c
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
@ -3598,11 +3643,11 @@ msgstr "bù zhīchí jiǎoběn biānyì"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "shape must be a tuple" msgid "shape must be a tuple"
msgstr "" msgstr "xíng zhuàng bì xū shì yí gè yuán zǔ"
#: shared-module/msgpack/__init__.c #: shared-module/msgpack/__init__.c
msgid "short read" msgid "short read"
msgstr "" msgstr "duǎn dú"
#: py/objstr.c #: py/objstr.c
msgid "sign not allowed in string format specifier" msgid "sign not allowed in string format specifier"
@ -3735,7 +3780,7 @@ msgstr "Chāo shí shíjiān bìxū wèi 0.0 Dào 100.0 Miǎo"
#: ports/nrf/common-hal/_bleio/Adapter.c #: ports/nrf/common-hal/_bleio/Adapter.c
msgid "timeout must be < 655.35 secs" msgid "timeout must be < 655.35 secs"
msgstr "" msgstr "chāo shí bì xū < 655.35 miǎo"
#: shared-bindings/_bleio/CharacteristicBuffer.c #: shared-bindings/_bleio/CharacteristicBuffer.c
msgid "timeout must be >= 0.0" msgid "timeout must be >= 0.0"
@ -3755,7 +3800,7 @@ msgstr "time_t shíjiān chuō chāochū píngtái fànwéi"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "tobytes can be invoked for dense arrays only" msgid "tobytes can be invoked for dense arrays only"
msgstr "" msgstr "tobytes zhǐ néng duì mì jí shù zǔ diào yòng"
#: shared-module/struct/__init__.c #: shared-module/struct/__init__.c
msgid "too many arguments provided with the given format" msgid "too many arguments provided with the given format"
@ -3763,7 +3808,7 @@ msgstr "tígōng jǐ dìng géshì de cānshù tài duō"
#: extmod/ulab/code/ulab_create.c #: extmod/ulab/code/ulab_create.c
msgid "too many dimensions" msgid "too many dimensions"
msgstr "" msgstr "chǐ cùn tài duō"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "too many indices" msgid "too many indices"
@ -3776,7 +3821,7 @@ msgstr "dǎkāi tài duō zhí (yùqí %d)"
#: extmod/ulab/code/approx/approx.c #: extmod/ulab/code/approx/approx.c
msgid "trapz is defined for 1D arrays" msgid "trapz is defined for 1D arrays"
msgstr "" msgstr "wéi 1D shù zǔ dìng yì xiàn jǐng"
#: extmod/ulab/code/approx/approx.c #: extmod/ulab/code/approx/approx.c
msgid "trapz is defined for 1D arrays of equal length" msgid "trapz is defined for 1D arrays of equal length"
@ -3784,7 +3829,7 @@ msgstr "Trapz shì wèi děng zhǎng de 1D shùzǔ dìngyì de"
#: ports/esp32s2/common-hal/alarm/pin/__init__.c #: ports/esp32s2/common-hal/alarm/pin/__init__.c
msgid "trigger level must be 0 or 1" msgid "trigger level must be 0 or 1"
msgstr "" msgstr "chù fā jí bié bì xū wéi 0 huò 1"
#: py/obj.c #: py/obj.c
msgid "tuple/list has wrong length" msgid "tuple/list has wrong length"
@ -3926,7 +3971,7 @@ msgstr "xiàngliàng bìxū jùyǒu xiāngtóng de chángdù"
#: ports/esp32s2/common-hal/alarm/pin/__init__.c #: ports/esp32s2/common-hal/alarm/pin/__init__.c
msgid "wakeup conflict" msgid "wakeup conflict"
msgstr "" msgstr "huàn xǐng chōng tū"
#: ports/esp32s2/common-hal/watchdog/WatchDogTimer.c #: ports/esp32s2/common-hal/watchdog/WatchDogTimer.c
msgid "watchdog not initialized" msgid "watchdog not initialized"
@ -3940,17 +3985,21 @@ msgstr "kān mén gǒu chāoshí bìxū dàyú 0"
msgid "width must be greater than zero" msgid "width must be greater than zero"
msgstr "kuāndù bìxū dàyú líng" msgstr "kuāndù bìxū dàyú líng"
#: ports/esp32s2/common-hal/wifi/Radio.c
msgid "wifi is not enabled"
msgstr "wèi qǐ yòng WIFI"
#: shared-bindings/_bleio/Adapter.c #: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "Chuāngkǒu bìxū shì <= jiàngé" msgstr "Chuāngkǒu bìxū shì <= jiàngé"
#: extmod/ulab/code/numerical/numerical.c #: extmod/ulab/code/numerical/numerical.c
msgid "wrong axis index" msgid "wrong axis index"
msgstr "" msgstr "cuò wù de zhóu suǒ yǐn"
#: extmod/ulab/code/ulab_create.c #: extmod/ulab/code/ulab_create.c
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr "zhǐ dìng de zhóu cuò wù"
#: extmod/ulab/code/vector/vectorise.c #: extmod/ulab/code/vector/vectorise.c
msgid "wrong input type" msgid "wrong input type"
@ -3978,7 +4027,7 @@ msgstr "x zhí chāochū biānjiè"
#: ports/esp32s2/common-hal/audiobusio/__init__.c #: ports/esp32s2/common-hal/audiobusio/__init__.c
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr "xTaskCreate shī bài"
#: shared-bindings/displayio/Shape.c #: shared-bindings/displayio/Shape.c
msgid "y should be an int" msgid "y should be an int"
@ -4004,6 +4053,9 @@ msgstr "zi bìxū wèi fú diǎn xíng"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)" msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)"
#~ msgid "Unknown failure"
#~ msgstr "Wèizhī gùzhàng"
#~ msgid "input argument must be an integer or a 2-tuple" #~ msgid "input argument must be an integer or a 2-tuple"
#~ msgstr "shūrù cānshù bìxū shì zhěngshù huò 2 yuán zǔ" #~ msgstr "shūrù cānshù bìxū shì zhěngshù huò 2 yuán zǔ"

9
main.c
View File

@ -317,7 +317,7 @@ STATIC bool run_code_py(safe_mode_t safe_mode) {
// Program has finished running. // Program has finished running.
bool serial_connected_before_animation = serial_connected(); bool printed_press_any_key = false;
#if CIRCUITPY_DISPLAYIO #if CIRCUITPY_DISPLAYIO
bool refreshed_epaper_display = false; bool refreshed_epaper_display = false;
#endif #endif
@ -364,7 +364,7 @@ STATIC bool run_code_py(safe_mode_t safe_mode) {
} }
#endif #endif
if (!serial_connected_before_animation && serial_connected()) { if (!printed_press_any_key && serial_connected()) {
if (!serial_connected_at_start) { if (!serial_connected_at_start) {
print_code_py_status_message(safe_mode); print_code_py_status_message(safe_mode);
} }
@ -372,11 +372,12 @@ STATIC bool run_code_py(safe_mode_t safe_mode) {
print_safe_mode_message(safe_mode); print_safe_mode_message(safe_mode);
serial_write("\n"); serial_write("\n");
serial_write_compressed(translate("Press any key to enter the REPL. Use CTRL-D to reload.\n")); serial_write_compressed(translate("Press any key to enter the REPL. Use CTRL-D to reload.\n"));
printed_press_any_key = true;
} }
if (serial_connected_before_animation && !serial_connected()) { if (!serial_connected()) {
serial_connected_at_start = false; serial_connected_at_start = false;
printed_press_any_key = false;
} }
serial_connected_before_animation = serial_connected();
// Refresh the ePaper display if we have one. That way it'll show an error message. // Refresh the ePaper display if we have one. That way it'll show an error message.
#if CIRCUITPY_DISPLAYIO #if CIRCUITPY_DISPLAYIO

View File

@ -22,7 +22,6 @@ CIRCUITPY_GAMEPAD = 1
CIRCUITPY_BUSDEVICE = 1 CIRCUITPY_BUSDEVICE = 1
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_HID FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_HID
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD
#FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_ADXL34x #FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_ADXL34x

View File

@ -10,3 +10,4 @@ INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = NONE LONGINT_IMPL = NONE
CIRCUITPY_FULL_BUILD = 0 CIRCUITPY_FULL_BUILD = 0
SUPEROPT_GC = 0 SUPEROPT_GC = 0
SUPEROPT_VM = 0

View File

@ -11,3 +11,5 @@ LONGINT_IMPL = NONE
CIRCUITPY_FULL_BUILD = 0 CIRCUITPY_FULL_BUILD = 0
SUPEROPT_GC = 0 SUPEROPT_GC = 0
SUPEROPT_VM = 0
CFLAGS_INLINE_LIMIT = 40

View File

@ -16,6 +16,7 @@ CIRCUITPY_COUNTIO = 0
CIRCUITPY_FREQUENCYIO = 0 CIRCUITPY_FREQUENCYIO = 0
CIRCUITPY_I2CPERIPHERAL = 0 CIRCUITPY_I2CPERIPHERAL = 0
CIRCUITPY_VECTORIO = 0 CIRCUITPY_VECTORIO = 0
CIRCUITPY_BUSDEVICE = 0
MICROPY_PY_ASYNC_AWAIT = 0 MICROPY_PY_ASYNC_AWAIT = 0
SUPEROPT_GC = 0 SUPEROPT_GC = 0

View File

@ -22,7 +22,6 @@ SUPEROPT_GC = 0
CFLAGS_INLINE_LIMIT = 55 CFLAGS_INLINE_LIMIT = 55
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_CircuitPlayground FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_CircuitPlayground
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_HID FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_HID
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH

View File

@ -22,11 +22,10 @@ CIRCUITPY_ROTARYIO = 0
CIRCUITPY_RTC = 0 CIRCUITPY_RTC = 0
SUPEROPT_GC = 0 SUPEROPT_GC = 0
CFLAGS_INLINE_LIMIT = 50 CFLAGS_INLINE_LIMIT = 40
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_CircuitPlayground FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_CircuitPlayground
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Crickit FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Crickit
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH

View File

@ -43,5 +43,3 @@
// USB is always used internally so skip the pin objects for it. // USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1 #define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1 #define IGNORE_PIN_PA25 1
#define MICROPY_PY_URE 0

View File

@ -18,6 +18,7 @@ CIRCUITPY_FREQUENCYIO = 0
CIRCUITPY_I2CPERIPHERAL = 0 CIRCUITPY_I2CPERIPHERAL = 0
CIRCUITPY_MSGPACK = 0 CIRCUITPY_MSGPACK = 0
CIRCUITPY_PIXELBUF = 0 CIRCUITPY_PIXELBUF = 0
CIRCUITPY_RE = 0
CIRCUITPY_ROTARYIO = 0 CIRCUITPY_ROTARYIO = 0
CIRCUITPY_RTC = 0 CIRCUITPY_RTC = 0
# So not all of displayio, sorry! # So not all of displayio, sorry!
@ -27,7 +28,6 @@ SUPEROPT_GC = 0
CFLAGS_INLINE_LIMIT = 55 CFLAGS_INLINE_LIMIT = 55
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_CircuitPlayground FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_CircuitPlayground
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

View File

@ -11,3 +11,4 @@ LONGINT_IMPL = NONE
CIRCUITPY_FULL_BUILD = 0 CIRCUITPY_FULL_BUILD = 0
SUPEROPT_GC = 0 SUPEROPT_GC = 0
SUPEROPT_VM = 0

View File

@ -21,7 +21,6 @@ CFLAGS_INLINE_LIMIT = 50
CIRCUITPY_MSGPACK = 0 CIRCUITPY_MSGPACK = 0
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Crickit FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Crickit
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Motor FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Motor
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

View File

@ -28,5 +28,4 @@ CFLAGS_INLINE_LIMIT = 35
SUPEROPT_GC = 0 SUPEROPT_GC = 0
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_RFM69 FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_RFM69

View File

@ -29,5 +29,4 @@ CFLAGS_INLINE_LIMIT = 35
SUPEROPT_GC = 0 SUPEROPT_GC = 0
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_RFM9x FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_RFM9x

View File

@ -20,4 +20,5 @@ endif
ifeq ($(TRANSLATION), de_DE) ifeq ($(TRANSLATION), de_DE)
RELEASE_NEEDS_CLEAN_BUILD = 1 RELEASE_NEEDS_CLEAN_BUILD = 1
CFLAGS_INLINE_LIMIT = 35 CFLAGS_INLINE_LIMIT = 35
SUPEROPT_VM = 0
endif endif

View File

@ -27,7 +27,6 @@ CFLAGS_INLINE_LIMIT = 55
SUPEROPT_GC = 0 SUPEROPT_GC = 0
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

View File

@ -12,7 +12,7 @@
// These are pins not to reset. // These are pins not to reset.
// QSPI Data pins // QSPI Data pins
#define MICROPY_PORT_A (PORT_PA08 | PORT_PA09 | PORT_PA10 | PORT_PA11) #define MICROPY_PORT_A (PORT_PA08 | PORT_PA09 | PORT_PA10 | PORT_PA11)
// DotStar pins, QSPI CS, and QSPI SCK // DotStar SCK, DotStar MOSI, QSPI SCK, and QSPI CS
#define MICROPY_PORT_B (PORT_PB02 | PORT_PB03 | PORT_PB10 | PORT_PB11) #define MICROPY_PORT_B (PORT_PB02 | PORT_PB03 | PORT_PB10 | PORT_PB11)
#define MICROPY_PORT_C (0) #define MICROPY_PORT_C (0)
#define MICROPY_PORT_D (0) #define MICROPY_PORT_D (0)

View File

@ -10,3 +10,5 @@ QSPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 3 EXTERNAL_FLASH_DEVICE_COUNT = 3
EXTERNAL_FLASH_DEVICES = "S25FL116K, S25FL216K, GD25Q16C" EXTERNAL_FLASH_DEVICES = "S25FL116K, S25FL216K, GD25Q16C"
LONGINT_IMPL = MPZ LONGINT_IMPL = MPZ
CIRCUITPY__EVE = 1

View File

@ -21,7 +21,6 @@ CIRCUITPY_GAMEPAD = 0
CIRCUITPY_RGBMATRIX = 0 CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_PS2IO = 0 CIRCUITPY_PS2IO = 0
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Register FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Register
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD

View File

@ -21,7 +21,6 @@ CIRCUITPY_GAMEPAD = 0
CIRCUITPY_RGBMATRIX = 0 CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_PS2IO = 0 CIRCUITPY_PS2IO = 0
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Register FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Register
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD

View File

@ -11,14 +11,6 @@ LONGINT_IMPL = NONE
CIRCUITPY_FULL_BUILD = 0 CIRCUITPY_FULL_BUILD = 0
SUPEROPT_GC = 0 SUPEROPT_GC = 0
SUPEROPT_VM = 0
CFLAGS_BOARD = --param max-inline-insns-auto=15 CFLAGS_BOARD = --param max-inline-insns-auto=15
ifeq ($(TRANSLATION), zh_Latn_pinyin)
RELEASE_NEEDS_CLEAN_BUILD = 1
CFLAGS_INLINE_LIMIT = 35
endif
ifeq ($(TRANSLATION), de_DE)
RELEASE_NEEDS_CLEAN_BUILD = 1
CFLAGS_INLINE_LIMIT = 35
SUPEROPT_VM = 0
endif

View File

@ -13,5 +13,4 @@ LONGINT_IMPL = MPZ
CIRCUITPY_AUDIOBUSIO = 0 CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_USTACK = 1 CIRCUITPY_USTACK = 1
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

View File

@ -14,6 +14,7 @@ LONGINT_IMPL = NONE
CIRCUITPY_AUDIOBUSIO = 0 CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_FREQUENCYIO = 0 CIRCUITPY_FREQUENCYIO = 0
CIRCUITPY_GAMEPAD = 0 CIRCUITPY_GAMEPAD = 0
CIRCUITPY_BUSDEVICE = 0
SUPEROPT_GC = 0 SUPEROPT_GC = 0

View File

@ -14,6 +14,7 @@ LONGINT_IMPL = MPZ
CIRCUITPY_AUDIOIO = 0 CIRCUITPY_AUDIOIO = 0
CIRCUITPY_AUDIOBUSIO = 0 CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_VECTORIO = 0 CIRCUITPY_VECTORIO = 0
CIRCUITPY_BUSDEVICE = 0
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_DotStar FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_DotStar

View File

@ -10,4 +10,10 @@ INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = NONE LONGINT_IMPL = NONE
CIRCUITPY_FULL_BUILD = 0 CIRCUITPY_FULL_BUILD = 0
ifeq ($(TRANSLATION),de_DE)
RELEASE_NEEDS_CLEAN_BUILD = 1
CFLAGS_INLINE_LIMIT = 35
SUPEROPT_VM = 0
endif
SUPEROPT_GC = 0 SUPEROPT_GC = 0

View File

@ -28,6 +28,7 @@ CIRCUITPY_RTC = 0
CIRCUITPY_TOUCHIO = 0 CIRCUITPY_TOUCHIO = 0
CIRCUITPY_USB_HID = 0 CIRCUITPY_USB_HID = 0
CIRCUITPY_USB_MIDI = 0 CIRCUITPY_USB_MIDI = 0
CIRCUITPY_BUSDEVICE = 0
FROZEN_MPY_DIRS += $(TOP)/frozen/circuitpython-stage/ugame10 FROZEN_MPY_DIRS += $(TOP)/frozen/circuitpython-stage/ugame10

View File

@ -24,4 +24,3 @@ CIRCUITPY_TOUCHIO=0
CIRCUITPY_BUSDEVICE=1 CIRCUITPY_BUSDEVICE=1
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice

View File

@ -27,5 +27,4 @@ CIRCUITPY_COUNTIO=0
CIRCUITPY_BUSDEVICE=1 CIRCUITPY_BUSDEVICE=1
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD

View File

@ -45,11 +45,7 @@
#define MICROPY_PY_BUILTINS_COMPLEX (0) #define MICROPY_PY_BUILTINS_COMPLEX (0)
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0) #define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0)
#define MICROPY_PY_FUNCTION_ATTRS (0) #define MICROPY_PY_FUNCTION_ATTRS (0)
// MICROPY_PY_UJSON depends on MICROPY_PY_IO
#define MICROPY_PY_IO (0)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (0) #define MICROPY_PY_REVERSE_SPECIAL_METHODS (0)
#define MICROPY_PY_UBINASCII (0)
#define MICROPY_PY_UJSON (0)
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (0) #define MICROPY_PY_COLLECTIONS_ORDEREDDICT (0)
#define MICROPY_PY_UERRNO_LIST \ #define MICROPY_PY_UERRNO_LIST \
X(EPERM) \ X(EPERM) \
@ -84,9 +80,6 @@
#define SPI_FLASH_MAX_BAUDRATE 24000000 #define SPI_FLASH_MAX_BAUDRATE 24000000
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1) #define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1)
#define MICROPY_PY_FUNCTION_ATTRS (1) #define MICROPY_PY_FUNCTION_ATTRS (1)
// MICROPY_PY_UJSON depends on MICROPY_PY_IO
#define MICROPY_PY_IO (1)
#define MICROPY_PY_UJSON (1)
// MICROPY_PY_UERRNO_LIST - Use the default // MICROPY_PY_UERRNO_LIST - Use the default
#endif // SAM_D5X_E5X #endif // SAM_D5X_E5X

View File

@ -20,26 +20,16 @@ endif
# Put samd21-only choices here. # Put samd21-only choices here.
ifeq ($(CHIP_FAMILY),samd21) ifeq ($(CHIP_FAMILY),samd21)
# frequencyio not yet verified as working on SAMD21, though make it possible to override.
ifndef CIRCUITPY_AUDIOMIXER
CIRCUITPY_AUDIOMIXER = 0
endif
ifndef CIRCUITPY_AUDIOMP3 # The ?='s allow overriding in mpconfigboard.mk.
CIRCUITPY_AUDIOMP3 = 0
endif
ifndef CIRCUITPY_BUILTINS_POW3 CIRCUITPY_AUDIOMIXER ?= 0
CIRCUITPY_BUILTINS_POW3 = 0 CIRCUITPY_BINASCII ?= 0
endif CIRCUITPY_AUDIOMP3 ?= 0
CIRCUITPY_BUILTINS_POW3 ?= 0
ifndef CIRCUITPY_FREQUENCYIO CIRCUITPY_FREQUENCYIO ?= 0
CIRCUITPY_FREQUENCYIO = 0 CIRCUITPY_JSON ?= 0
endif CIRCUITPY_TOUCHIO_USE_NATIVE ?= 1
ifndef CIRCUITPY_TOUCHIO_USE_NATIVE
CIRCUITPY_TOUCHIO_USE_NATIVE = 1
endif
# No room for HCI _bleio on SAMD21. # No room for HCI _bleio on SAMD21.
CIRCUITPY_BLEIO_HCI = 0 CIRCUITPY_BLEIO_HCI = 0
@ -71,27 +61,13 @@ ifeq ($(CHIP_FAMILY),samd51)
# No native touchio on SAMD51. # No native touchio on SAMD51.
CIRCUITPY_TOUCHIO_USE_NATIVE = 0 CIRCUITPY_TOUCHIO_USE_NATIVE = 0
# The ifndef's allow overriding in mpconfigboard.mk. # The ?='s allow overriding in mpconfigboard.mk.
ifndef CIRCUITPY_NETWORK CIRCUITPY_NETWORK ?= 0
CIRCUITPY_NETWORK = 0 CIRCUITPY_PS2IO ?= 1
endif CIRCUITPY_SAMD ?= 1
CIRCUITPY_RGBMATRIX ?= $(CIRCUITPY_FULL_BUILD)
ifndef CIRCUITPY_PS2IO CIRCUITPY_FRAMEBUFFERIO ?= $(CIRCUITPY_FULL_BUILD)
CIRCUITPY_PS2IO = 1
endif
ifndef CIRCUITPY_SAMD
CIRCUITPY_SAMD = 1
endif
ifndef CIRCUITPY_RGBMATRIX
CIRCUITPY_RGBMATRIX = $(CIRCUITPY_FULL_BUILD)
endif
ifndef CIRCUITPY_FRAMEBUFFERIO
CIRCUITPY_FRAMEBUFFERIO = $(CIRCUITPY_FULL_BUILD)
endif
endif # samd51 endif # samd51

View File

@ -75,7 +75,7 @@ Bootloader information:
* You have to accept the End User License Agreement to be able to download and use the Spresense bootloader binary. * You have to accept the End User License Agreement to be able to download and use the Spresense bootloader binary.
Download the spresense binaries zip archive from: [Spresense firmware v2-0-000](https://developer.sony.com/file/download/download-spresense-firmware-v2-0-000) Download the spresense binaries zip archive from: [Spresense firmware v2-0-002](https://developer.sony.com/file/download/download-spresense-firmware-v2-0-002)
Extract spresense binaries in your PC to ports/spresense/spresense-exported-sdk/firmware/ Extract spresense binaries in your PC to ports/spresense/spresense-exported-sdk/firmware/

View File

@ -165,6 +165,7 @@ CONFIG_USBDEV=y
CONFIG_USBDEV_DMA=y CONFIG_USBDEV_DMA=y
CONFIG_USBDEV_DUALSPEED=y CONFIG_USBDEV_DUALSPEED=y
CONFIG_USEC_PER_TICK=1000 CONFIG_USEC_PER_TICK=1000
CONFIG_USERMAIN_STACKSIZE=8192
CONFIG_USER_ENTRYPOINT="spresense_main" CONFIG_USER_ENTRYPOINT="spresense_main"
CONFIG_VIDEO_ISX012=y CONFIG_VIDEO_ISX012=y
CONFIG_VIDEO_STREAM=y CONFIG_VIDEO_STREAM=y

@ -1 +1 @@
Subproject commit 752c4cd56dd0a270a559c28272ceb61ddcb7806c Subproject commit 2ec2a1538362696118dc3fdf56f33dacaf8f4067

View File

@ -30,10 +30,10 @@
/* Prototypes for Remote API */ /* Prototypes for Remote API */
int FM_RawWrite(uint32_t offset, const void *buf, uint32_t size); int fw_fm_rawwrite(uint32_t offset, const void *buf, uint32_t size);
int FM_RawVerifyWrite(uint32_t offset, const void *buf, uint32_t size); int fw_fm_rawverifywrite(uint32_t offset, const void *buf, uint32_t size);
int FM_RawRead(uint32_t offset, void *buf, uint32_t size); int fw_fm_rawread(uint32_t offset, void *buf, uint32_t size);
int FM_RawEraseSector(uint32_t sector); int fw_fm_rawerasesector(uint32_t sector);
#define CXD56_SPIFLASHSIZE (16 * 1024 * 1024) #define CXD56_SPIFLASHSIZE (16 * 1024 * 1024)
@ -64,8 +64,8 @@ void port_internal_flash_flush(void) {
return; return;
} }
FM_RawEraseSector(flash_sector); fw_fm_rawerasesector(flash_sector);
FM_RawWrite(flash_sector << SECTOR_SHIFT, flash_cache, SECTOR_SIZE); fw_fm_rawwrite(flash_sector << SECTOR_SHIFT, flash_cache, SECTOR_SIZE);
flash_sector = NO_SECTOR; flash_sector = NO_SECTOR;
} }
@ -73,7 +73,7 @@ void port_internal_flash_flush(void) {
mp_uint_t supervisor_flash_read_blocks(uint8_t *dest, uint32_t block, uint32_t num_blocks) { mp_uint_t supervisor_flash_read_blocks(uint8_t *dest, uint32_t block, uint32_t num_blocks) {
supervisor_flash_flush(); supervisor_flash_flush();
if (FM_RawRead(block << PAGE_SHIFT, dest, num_blocks << PAGE_SHIFT) < 0) { if (fw_fm_rawread(block << PAGE_SHIFT, dest, num_blocks << PAGE_SHIFT) < 0) {
return 1; return 1;
} }
@ -92,7 +92,7 @@ mp_uint_t supervisor_flash_write_blocks(const uint8_t *src, uint32_t lba, uint32
if (sector != flash_sector) { if (sector != flash_sector) {
supervisor_flash_flush(); supervisor_flash_flush();
if (FM_RawRead(sector << SECTOR_SHIFT, flash_cache, SECTOR_SIZE) < 0) { if (fw_fm_rawread(sector << SECTOR_SHIFT, flash_cache, SECTOR_SIZE) < 0) {
return 1; return 1;
} }

View File

@ -33,35 +33,196 @@
#include "shared-bindings/digitalio/DigitalInOut.h" #include "shared-bindings/digitalio/DigitalInOut.h"
#include "shared-bindings/microcontroller/__init__.h" #include "shared-bindings/microcontroller/__init__.h"
/*
* Current pin limitations for ESP32-S2 ParallelBus:
* - data0 pin must be byte aligned
*/
void common_hal_displayio_parallelbus_construct(displayio_parallelbus_obj_t* self, void common_hal_displayio_parallelbus_construct(displayio_parallelbus_obj_t* self,
const mcu_pin_obj_t* data0, const mcu_pin_obj_t* command, const mcu_pin_obj_t* chip_select, const mcu_pin_obj_t* data0, const mcu_pin_obj_t* command, const mcu_pin_obj_t* chip_select,
const mcu_pin_obj_t* write, const mcu_pin_obj_t* read, const mcu_pin_obj_t* reset) { const mcu_pin_obj_t* write, const mcu_pin_obj_t* read, const mcu_pin_obj_t* reset) {
mp_raise_NotImplementedError(translate("ParallelBus not yet supported")); uint8_t data_pin = data0->number;
if (data_pin % 8 != 0) {
mp_raise_ValueError(translate("Data 0 pin must be byte aligned."));
}
for (uint8_t i = 0; i < 8; i++) {
if (!pin_number_is_free(data_pin + i)) {
mp_raise_ValueError_varg(translate("Bus pin %d is already in use"), i);
}
}
gpio_dev_t *g = &GPIO; // this is the GPIO registers, see "extern gpio_dev_t GPIO" from file:gpio_struct.h
// Setup the pins as "Simple GPIO outputs" see section 19.3.3 of the ESP32-S2 Reference Manual
// Enable pins with "enable_w1ts"
for (uint8_t i = 0; i < 8; i++) {
g->enable_w1ts = (0x1 << (data_pin + i));
g->func_out_sel_cfg[data_pin + i].val= 256; /* setup output pin for simple GPIO Output, (0x100 = 256) */
}
/* From my understanding, there is a limitation of the ESP32-S2 that does not allow single-byte writes
* into the GPIO registers. See section 10.3.3 regarding "non-aligned writes" into the registers.
*/
if (data_pin < 31) {
self->bus = (uint32_t*) &g->out; //pointer to GPIO output register (for pins 0-31)
} else {
self->bus = (uint32_t*) &g->out1.val; //pointer to GPIO output register (for pins >= 32)
}
/* SNIP - common setup of command, chip select, write and read pins, same as from SAMD and NRF ports */
self->command.base.type = &digitalio_digitalinout_type;
common_hal_digitalio_digitalinout_construct(&self->command, command);
common_hal_digitalio_digitalinout_switch_to_output(&self->command, true, DRIVE_MODE_PUSH_PULL);
self->chip_select.base.type = &digitalio_digitalinout_type;
common_hal_digitalio_digitalinout_construct(&self->chip_select, chip_select);
common_hal_digitalio_digitalinout_switch_to_output(&self->chip_select, true, DRIVE_MODE_PUSH_PULL);
self->write.base.type = &digitalio_digitalinout_type;
common_hal_digitalio_digitalinout_construct(&self->write, write);
common_hal_digitalio_digitalinout_switch_to_output(&self->write, true, DRIVE_MODE_PUSH_PULL);
self->read.base.type = &digitalio_digitalinout_type;
common_hal_digitalio_digitalinout_construct(&self->read, read);
common_hal_digitalio_digitalinout_switch_to_output(&self->read, true, DRIVE_MODE_PUSH_PULL);
self->data0_pin = data_pin;
if (write->number < 32) {
self->write_clear_register = (uint32_t*) &g->out_w1tc;
self->write_set_register = (uint32_t*) &g->out_w1ts;
} else {
self->write_clear_register = (uint32_t*) &g->out1_w1tc.val;
self->write_set_register = (uint32_t*) &g->out1_w1ts.val;
}
// Check to see if the data and write pins are on the same register:
if ( ( ((self->data0_pin < 32) && (write->number < 32)) ) ||
( ((self->data0_pin > 31) && (write->number > 31)) ) ) {
self->data_write_same_register = true; // data pins and write pin are on the same register
} else {
self->data_write_same_register = false; // data pins and write pins are on different registers
}
self->write_mask = 1 << (write->number % 32); /* the write pin triggers the LCD to latch the data */
/* SNIP - common setup of the reset pin, same as from SAMD and NRF ports */
self->reset.base.type = &mp_type_NoneType;
if (reset != NULL) {
self->reset.base.type = &digitalio_digitalinout_type;
common_hal_digitalio_digitalinout_construct(&self->reset, reset);
common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL);
never_reset_pin_number(reset->number);
common_hal_displayio_parallelbus_reset(self);
}
never_reset_pin_number(command->number);
never_reset_pin_number(chip_select->number);
never_reset_pin_number(write->number);
never_reset_pin_number(read->number);
for (uint8_t i = 0; i < 8; i++) {
never_reset_pin_number(data_pin + i);
}
} }
void common_hal_displayio_parallelbus_deinit(displayio_parallelbus_obj_t* self) { void common_hal_displayio_parallelbus_deinit(displayio_parallelbus_obj_t* self) {
/* SNIP - same as from SAMD and NRF ports */
for (uint8_t i = 0; i < 8; i++) {
reset_pin_number(self->data0_pin + i);
}
reset_pin_number(self->command.pin->number);
reset_pin_number(self->chip_select.pin->number);
reset_pin_number(self->write.pin->number);
reset_pin_number(self->read.pin->number);
reset_pin_number(self->reset.pin->number);
} }
bool common_hal_displayio_parallelbus_reset(mp_obj_t obj) { bool common_hal_displayio_parallelbus_reset(mp_obj_t obj) {
return false; /* SNIP - same as from SAMD and NRF ports */
displayio_parallelbus_obj_t* self = MP_OBJ_TO_PTR(obj);
if (self->reset.base.type == &mp_type_NoneType) {
return false;
}
common_hal_digitalio_digitalinout_set_value(&self->reset, false);
common_hal_mcu_delay_us(4);
common_hal_digitalio_digitalinout_set_value(&self->reset, true);
return true;
} }
bool common_hal_displayio_parallelbus_bus_free(mp_obj_t obj) { bool common_hal_displayio_parallelbus_bus_free(mp_obj_t obj) {
return false; /* SNIP - same as from SAMD and NRF ports */
return true;
} }
bool common_hal_displayio_parallelbus_begin_transaction(mp_obj_t obj) { bool common_hal_displayio_parallelbus_begin_transaction(mp_obj_t obj) {
/* SNIP - same as from SAMD and NRF ports */
return false; displayio_parallelbus_obj_t* self = MP_OBJ_TO_PTR(obj);
common_hal_digitalio_digitalinout_set_value(&self->chip_select, false);
return true;
} }
void common_hal_displayio_parallelbus_send(mp_obj_t obj, display_byte_type_t byte_type, void common_hal_displayio_parallelbus_send(mp_obj_t obj, display_byte_type_t byte_type,
display_chip_select_behavior_t chip_select, const uint8_t *data, uint32_t data_length) { display_chip_select_behavior_t chip_select, const uint8_t *data, uint32_t data_length) {
displayio_parallelbus_obj_t* self = MP_OBJ_TO_PTR(obj);
common_hal_digitalio_digitalinout_set_value(&self->command, byte_type == DISPLAY_DATA);
uint32_t* clear_write = self->write_clear_register;
uint32_t* set_write = self->write_set_register;
const uint32_t mask = self->write_mask;
/* Setup structures for data writing. The ESP32-S2 port differs from the SAMD and NRF ports
* because I have not found a way to write a single byte into the ESP32-S2 registers.
* For the ESP32-S2, I create a 32-bit data_buffer that is used to transfer the data bytes.
*/
*clear_write = mask; // Clear the write pin to prepare the registers before storing the
// register value into data_buffer
const uint32_t data_buffer = *self->bus; // store the initial output register values into the data output buffer
uint8_t* data_address = ((uint8_t*) &data_buffer) + (self->data0_pin / 8); /* address inside data_buffer where
* each data byte will be written to the data pin registers
*/
if ( self->data_write_same_register ) { // data and write pins are on the same register
for (uint32_t i = 0; i < data_length; i++) {
/* Note: If the write pin and data pins are controlled by the same GPIO register, we can eliminate
* the "clear_write" step below, since the write pin is cleared when the data_buffer is written
* to the bus.
*/
*(data_address) = data[i]; // stuff the data byte into the data_buffer at the correct offset byte location
*self->bus = data_buffer; // write the data to the output register
*set_write = mask; // set the write pin
}
}
else { // data and write pins are on different registers
for (uint32_t i = 0; i < data_length; i++) {
*clear_write = mask; // clear the write pin (See comment above, this may not be necessary).
*(data_address) = data[i]; // stuff the data byte into the data_buffer at the correct offset byte location
*self->bus = data_buffer; // write the data to the output register
*set_write = mask; // set the write pin
}
}
} }
void common_hal_displayio_parallelbus_end_transaction(mp_obj_t obj) { void common_hal_displayio_parallelbus_end_transaction(mp_obj_t obj) {
/* SNIP - same as from SAMD and NRF ports */
displayio_parallelbus_obj_t* self = MP_OBJ_TO_PTR(obj);
common_hal_digitalio_digitalinout_set_value(&self->chip_select, true);
} }

View File

@ -31,6 +31,17 @@
typedef struct { typedef struct {
mp_obj_base_t base; mp_obj_base_t base;
uint32_t* bus; // pointer where 8 bits of data are written to the display
digitalio_digitalinout_obj_t command;
digitalio_digitalinout_obj_t chip_select;
digitalio_digitalinout_obj_t reset;
digitalio_digitalinout_obj_t write;
digitalio_digitalinout_obj_t read;
uint8_t data0_pin; // pin number for the lowest number data pin. Must be 8-bit aligned
bool data_write_same_register; // if data and write pins are in the sare
uint32_t* write_set_register; // pointer to the write group for setting the write bit to latch the data on the LCD
uint32_t* write_clear_register; // pointer to the write group for clearing the write bit to latch the data on the LCD
uint32_t write_mask; // bit mask for the single bit for the write pin register
} displayio_parallelbus_obj_t; } displayio_parallelbus_obj_t;
#endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_DISPLAYIO_PARALLELBUS_H #endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_DISPLAYIO_PARALLELBUS_H

View File

@ -4,6 +4,7 @@
* The MIT License (MIT) * The MIT License (MIT)
* *
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries * Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
* Copyright (c) 2020 Lucian Copeland for Adafruit Industries
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal * of this software and associated documentation files (the "Software"), to deal
@ -37,25 +38,162 @@
#include "components/lwip/lwip/src/include/lwip/sys.h" #include "components/lwip/lwip/src/include/lwip/sys.h"
#include "components/lwip/lwip/src/include/lwip/netdb.h" #include "components/lwip/lwip/src/include/lwip/netdb.h"
STATIC socketpool_socket_obj_t * open_socket_handles[CONFIG_LWIP_MAX_SOCKETS]; // 4 on the wrover/wroom
void socket_reset(void) {
for (size_t i = 0; i < MP_ARRAY_SIZE(open_socket_handles); i++) {
if (open_socket_handles[i]) {
if (open_socket_handles[i]->num > 0) {
common_hal_socketpool_socket_close(open_socket_handles[i]);
open_socket_handles[i] = NULL;
} else {
// accidentally got a TCP socket in here, or something.
open_socket_handles[i] = NULL;
}
}
}
}
bool register_open_socket(socketpool_socket_obj_t* self) {
for (size_t i = 0; i < MP_ARRAY_SIZE(open_socket_handles); i++) {
if (open_socket_handles[i] == NULL) {
open_socket_handles[i] = self;
return true;
}
}
return false;
}
STATIC void _lazy_init_LWIP(socketpool_socket_obj_t* self) {
if (self->num != -1) {
return; //safe to call on existing socket
}
if (self->tls != NULL) {
mp_raise_RuntimeError(translate("Invalid use of TLS Socket"));
}
int socknum = -1;
socknum = lwip_socket(self->family, self->type, self->ipproto);
if (socknum < 0 || !register_open_socket(self)) {
mp_raise_RuntimeError(translate("Out of sockets"));
}
self->num = socknum;
lwip_fcntl(socknum, F_SETFL, O_NONBLOCK);
}
STATIC void _lazy_init_TLS(socketpool_socket_obj_t* self) {
if (self->type != SOCK_STREAM || self->num != -1) {
mp_raise_RuntimeError(translate("Invalid socket for TLS"));
}
esp_tls_t* tls_handle = esp_tls_init();
if (tls_handle == NULL) {
mp_raise_espidf_MemoryError();
}
self->tls = tls_handle;
}
void common_hal_socketpool_socket_settimeout(socketpool_socket_obj_t* self, mp_uint_t timeout_ms) { void common_hal_socketpool_socket_settimeout(socketpool_socket_obj_t* self, mp_uint_t timeout_ms) {
self->timeout_ms = timeout_ms; self->timeout_ms = timeout_ms;
} }
bool common_hal_socketpool_socket_connect(socketpool_socket_obj_t* self, const char* host, mp_uint_t hostlen, mp_int_t port) { bool common_hal_socketpool_socket_bind(socketpool_socket_obj_t* self,
const char* host, size_t hostlen, uint8_t port) {
_lazy_init_LWIP(self);
struct sockaddr_in bind_addr;
bind_addr.sin_addr.s_addr = inet_addr(host);
bind_addr.sin_family = AF_INET;
bind_addr.sin_port = htons(port);
int opt = 1;
int err = lwip_setsockopt(self->num, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
if (err != 0) {
mp_raise_RuntimeError(translate("Issue setting SO_REUSEADDR"));
}
int result = lwip_bind(self->num, (struct sockaddr *)&bind_addr, sizeof(bind_addr)) == 0;
return result;
}
bool common_hal_socketpool_socket_listen(socketpool_socket_obj_t* self, int backlog) {
return lwip_listen(self->num, backlog) == 0;
}
socketpool_socket_obj_t* common_hal_socketpool_socket_accept(socketpool_socket_obj_t* self,
uint8_t* ip, uint *port) {
struct sockaddr_in accept_addr;
socklen_t socklen = sizeof(accept_addr);
int newsoc = -1;
bool timed_out = false;
uint64_t start_ticks = supervisor_ticks_ms64();
if (self->timeout_ms != (uint)-1) {
mp_printf(&mp_plat_print, "will timeout");
} else {
mp_printf(&mp_plat_print, "won't timeout");
}
// Allow timeouts and interrupts
while (newsoc == -1 &&
!timed_out &&
!mp_hal_is_interrupted()) {
if (self->timeout_ms != (uint)-1) {
timed_out = supervisor_ticks_ms64() - start_ticks >= self->timeout_ms;
}
RUN_BACKGROUND_TASKS;
newsoc = lwip_accept(self->num, (struct sockaddr *)&accept_addr, &socklen);
// In non-blocking mode, fail instead of looping
if (newsoc == -1 && self->timeout_ms == 0) {
mp_raise_OSError(MP_EAGAIN);
}
}
if (!timed_out) {
// harmless on failure but avoiding memcpy is faster
memcpy((void *)ip, (void*)&accept_addr.sin_addr.s_addr, sizeof(accept_addr.sin_addr.s_addr));
*port = accept_addr.sin_port;
} else {
mp_raise_OSError(ETIMEDOUT);
}
if (newsoc > 0) {
// Create the socket
socketpool_socket_obj_t *sock = m_new_obj_with_finaliser(socketpool_socket_obj_t);
sock->base.type = &socketpool_socket_type;
sock->num = newsoc;
sock->tls = NULL;
sock->ssl_context = NULL;
sock->pool = self->pool;
if (!register_open_socket(sock)) {
mp_raise_OSError(MP_EBADF);
}
lwip_fcntl(newsoc, F_SETFL, O_NONBLOCK);
return sock;
} else {
mp_raise_OSError(MP_EBADF);
return NULL;
}
}
bool common_hal_socketpool_socket_connect(socketpool_socket_obj_t* self,
const char* host, mp_uint_t hostlen, mp_int_t port) {
// For simplicity we use esp_tls for all TCP connections. If it's not SSL, ssl_context will be // For simplicity we use esp_tls for all TCP connections. If it's not SSL, ssl_context will be
// NULL and should still work. This makes regular TCP connections more memory expensive but TLS // NULL and should still work. This makes regular TCP connections more memory expensive but TLS
// should become more and more common. Therefore, we optimize for the TLS case. // should become more and more common. Therefore, we optimize for the TLS case.
// Todo: move to SSL Wrapper and add lwip_connect()
_lazy_init_TLS(self);
esp_tls_cfg_t* tls_config = NULL; esp_tls_cfg_t* tls_config = NULL;
if (self->ssl_context != NULL) { if (self->ssl_context != NULL) {
tls_config = &self->ssl_context->ssl_config; tls_config = &self->ssl_context->ssl_config;
} }
int result = esp_tls_conn_new_sync(host, hostlen, port, tls_config, self->tcp); int result = esp_tls_conn_new_sync(host, hostlen, port, tls_config, self->tls);
self->connected = result >= 0; self->connected = result >= 0;
if (result < 0) { if (result < 0) {
int esp_tls_code; int esp_tls_code;
int flags; int flags;
esp_err_t err = esp_tls_get_and_clear_last_error(self->tcp->error_handle, &esp_tls_code, &flags); esp_err_t err = esp_tls_get_and_clear_last_error(self->tls->error_handle, &esp_tls_code, &flags);
if (err == ESP_ERR_MBEDTLS_SSL_SETUP_FAILED) { if (err == ESP_ERR_MBEDTLS_SSL_SETUP_FAILED) {
mp_raise_espidf_MemoryError(); mp_raise_espidf_MemoryError();
@ -70,7 +208,7 @@ bool common_hal_socketpool_socket_connect(socketpool_socket_obj_t* self, const c
// shouldn't hit this timeout because we try to only read available data. However, there is // shouldn't hit this timeout because we try to only read available data. However, there is
// always a chance that we try to read something that is used internally. // always a chance that we try to read something that is used internally.
int fd; int fd;
esp_tls_get_conn_sockfd(self->tcp, &fd); esp_tls_get_conn_sockfd(self->tls, &fd);
struct timeval tv; struct timeval tv;
tv.tv_sec = 2 * 60; // Two minutes tv.tv_sec = 2 * 60; // Two minutes
tv.tv_usec = 0; tv.tv_usec = 0;
@ -86,7 +224,15 @@ bool common_hal_socketpool_socket_get_connected(socketpool_socket_obj_t* self) {
} }
mp_uint_t common_hal_socketpool_socket_send(socketpool_socket_obj_t* self, const uint8_t* buf, mp_uint_t len) { mp_uint_t common_hal_socketpool_socket_send(socketpool_socket_obj_t* self, const uint8_t* buf, mp_uint_t len) {
size_t sent = esp_tls_conn_write(self->tcp, buf, len); int sent = -1;
if (self->num != -1) {
// LWIP Socket
// TODO: deal with potential failure/add timeout?
sent = lwip_send(self->num, buf, len, 0);
} else if (self->tls != NULL) {
// TLS Socket
sent = esp_tls_conn_write(self->tls, buf, len);
}
if (sent < 0) { if (sent < 0) {
mp_raise_OSError(MP_ENOTCONN); mp_raise_OSError(MP_ENOTCONN);
@ -95,45 +241,73 @@ mp_uint_t common_hal_socketpool_socket_send(socketpool_socket_obj_t* self, const
} }
mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self, const uint8_t* buf, mp_uint_t len) { mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self, const uint8_t* buf, mp_uint_t len) {
size_t received = 0; int received = 0;
int status = 0; bool timed_out = false;
uint64_t start_ticks = supervisor_ticks_ms64();
int sockfd; if (self->num != -1) {
esp_err_t err = esp_tls_get_conn_sockfd(self->tcp, &sockfd); // LWIP Socket
if (err != ESP_OK) { uint64_t start_ticks = supervisor_ticks_ms64();
received = -1;
while (received == -1 &&
!timed_out &&
!mp_hal_is_interrupted()) {
if (self->timeout_ms != (uint)-1) {
timed_out = supervisor_ticks_ms64() - start_ticks >= self->timeout_ms;
}
RUN_BACKGROUND_TASKS;
received = lwip_recv(self->num, (void*) buf, len - 1, 0);
// In non-blocking mode, fail instead of looping
if (received == -1 && self->timeout_ms == 0) {
mp_raise_OSError(MP_EAGAIN);
}
}
} else if (self->tls != NULL) {
// TLS Socket
int status = 0;
uint64_t start_ticks = supervisor_ticks_ms64();
int sockfd;
esp_err_t err = esp_tls_get_conn_sockfd(self->tls, &sockfd);
if (err != ESP_OK) {
mp_raise_OSError(MP_EBADF);
}
while (received == 0 &&
status >= 0 &&
!timed_out &&
!mp_hal_is_interrupted()) {
if (self->timeout_ms != (uint)-1) {
timed_out = self->timeout_ms == 0 || supervisor_ticks_ms64() - start_ticks >= self->timeout_ms;
}
RUN_BACKGROUND_TASKS;
size_t available = esp_tls_get_bytes_avail(self->tls);
if (available == 0) {
// This reads the raw socket buffer and is used for non-TLS connections
// and between encrypted TLS blocks.
status = lwip_ioctl(sockfd, FIONREAD, &available);
}
size_t remaining = len - received;
if (available > remaining) {
available = remaining;
}
if (available > 0) {
status = esp_tls_conn_read(self->tls, (void*) buf + received, available);
if (status == 0) {
// Reading zero when something is available indicates a closed
// connection. (The available bytes could have been TLS internal.)
break;
}
if (status > 0) {
received += status;
}
}
}
} else {
// Socket does not have a valid descriptor of either type
mp_raise_OSError(MP_EBADF); mp_raise_OSError(MP_EBADF);
} }
while (received == 0 &&
status >= 0 &&
(self->timeout_ms == 0 || supervisor_ticks_ms64() - start_ticks <= self->timeout_ms) &&
!mp_hal_is_interrupted()) {
RUN_BACKGROUND_TASKS;
size_t available = esp_tls_get_bytes_avail(self->tcp);
if (available == 0) {
// This reads the raw socket buffer and is used for non-TLS connections
// and between encrypted TLS blocks.
status = lwip_ioctl(sockfd, FIONREAD, &available);
}
size_t remaining = len - received;
if (available > remaining) {
available = remaining;
}
if (available > 0) {
status = esp_tls_conn_read(self->tcp, (void*) buf + received, available);
if (status == 0) {
// Reading zero when something is available indicates a closed
// connection. (The available bytes could have been TLS internal.)
break;
}
if (status > 0) {
received += status;
}
}
}
if (received == 0) { if (timed_out) {
// socket closed mp_raise_OSError(ETIMEDOUT);
common_hal_socketpool_socket_close(self);
} }
return received; return received;
} }
@ -141,6 +315,8 @@ mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self,
mp_uint_t common_hal_socketpool_socket_sendto(socketpool_socket_obj_t* self, mp_uint_t common_hal_socketpool_socket_sendto(socketpool_socket_obj_t* self,
const char* host, size_t hostlen, uint8_t port, const uint8_t* buf, mp_uint_t len) { const char* host, size_t hostlen, uint8_t port, const uint8_t* buf, mp_uint_t len) {
_lazy_init_LWIP(self);
// Get the IP address string // Get the IP address string
const struct addrinfo hints = { const struct addrinfo hints = {
.ai_family = AF_INET, .ai_family = AF_INET,
@ -151,17 +327,15 @@ mp_uint_t common_hal_socketpool_socket_sendto(socketpool_socket_obj_t* self,
if (error != 0 || result == NULL) { if (error != 0 || result == NULL) {
return 0; return 0;
} }
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-align"
struct in_addr *addr = &((struct sockaddr_in *)result->ai_addr)->sin_addr;
#pragma GCC diagnostic pop
char ip_str[IP4ADDR_STRLEN_MAX];
inet_ntoa_r(*addr, ip_str, IP4ADDR_STRLEN_MAX);
freeaddrinfo(result);
// Set parameters // Set parameters
struct sockaddr_in dest_addr; struct sockaddr_in dest_addr;
dest_addr.sin_addr.s_addr = inet_addr((const char *)ip_str); #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-align"
dest_addr.sin_addr.s_addr = ((struct sockaddr_in *)result->ai_addr)->sin_addr.s_addr;
#pragma GCC diagnostic pop
freeaddrinfo(result);
dest_addr.sin_family = AF_INET; dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(port); dest_addr.sin_port = htons(port);
@ -176,26 +350,50 @@ mp_uint_t common_hal_socketpool_socket_sendto(socketpool_socket_obj_t* self,
mp_uint_t common_hal_socketpool_socket_recvfrom_into(socketpool_socket_obj_t* self, mp_uint_t common_hal_socketpool_socket_recvfrom_into(socketpool_socket_obj_t* self,
uint8_t* buf, mp_uint_t len, uint8_t* ip, uint *port) { uint8_t* buf, mp_uint_t len, uint8_t* ip, uint *port) {
_lazy_init_LWIP(self);
struct sockaddr_in source_addr; struct sockaddr_in source_addr;
socklen_t socklen = sizeof(source_addr); socklen_t socklen = sizeof(source_addr);
int bytes_received = lwip_recvfrom(self->num, buf, len, 0, (struct sockaddr *)&source_addr, &socklen);
memcpy((void *)ip, (void*)&source_addr.sin_addr.s_addr, sizeof source_addr.sin_addr.s_addr); // LWIP Socket
*port = source_addr.sin_port; uint64_t start_ticks = supervisor_ticks_ms64();
int received = -1;
bool timed_out = false;
while (received == -1 &&
!timed_out &&
!mp_hal_is_interrupted()) {
if (self->timeout_ms != (uint)-1) {
timed_out = supervisor_ticks_ms64() - start_ticks >= self->timeout_ms;
}
RUN_BACKGROUND_TASKS;
received = lwip_recvfrom(self->num, buf, len, 0, (struct sockaddr *)&source_addr, &socklen);
if (bytes_received < 0) { // In non-blocking mode, fail instead of looping
if (received == -1 && self->timeout_ms == 0) {
mp_raise_OSError(MP_EAGAIN);
}
}
if (!timed_out) {
memcpy((void *)ip, (void*)&source_addr.sin_addr.s_addr, sizeof(source_addr.sin_addr.s_addr));
*port = source_addr.sin_port;
} else {
mp_raise_OSError(ETIMEDOUT);
}
if (received < 0) {
mp_raise_BrokenPipeError(); mp_raise_BrokenPipeError();
return 0; return 0;
} }
return bytes_received; return received;
} }
void common_hal_socketpool_socket_close(socketpool_socket_obj_t* self) { void common_hal_socketpool_socket_close(socketpool_socket_obj_t* self) {
self->connected = false; self->connected = false;
if (self->tcp != NULL) { if (self->tls != NULL) {
esp_tls_conn_destroy(self->tcp); esp_tls_conn_destroy(self->tls);
self->tcp = NULL; self->tls = NULL;
} }
if (self->num >= 0) { if (self->num >= 0) {
lwip_shutdown(self->num, 0); lwip_shutdown(self->num, 0);
@ -205,7 +403,7 @@ void common_hal_socketpool_socket_close(socketpool_socket_obj_t* self) {
} }
bool common_hal_socketpool_socket_get_closed(socketpool_socket_obj_t* self) { bool common_hal_socketpool_socket_get_closed(socketpool_socket_obj_t* self) {
return self->tcp == NULL && self->num < 0; return self->tls == NULL && self->num < 0;
} }

View File

@ -37,11 +37,17 @@
typedef struct { typedef struct {
mp_obj_base_t base; mp_obj_base_t base;
int num; int num;
int type;
int family;
int ipproto;
bool connected; bool connected;
esp_tls_t* tcp; esp_tls_t* tls;
ssl_sslcontext_obj_t* ssl_context; ssl_sslcontext_obj_t* ssl_context;
socketpool_socketpool_obj_t* pool; socketpool_socketpool_obj_t* pool;
mp_uint_t timeout_ms; mp_uint_t timeout_ms;
} socketpool_socket_obj_t; } socketpool_socket_obj_t;
void socket_reset(void);
bool register_open_socket(socketpool_socket_obj_t* self);
#endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_SOCKETPOOL_SOCKET_H #endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_SOCKETPOOL_SOCKET_H

View File

@ -65,25 +65,20 @@ socketpool_socket_obj_t* common_hal_socketpool_socket(socketpool_socketpool_obj_
mp_raise_NotImplementedError(translate("Only IPv4 sockets supported")); mp_raise_NotImplementedError(translate("Only IPv4 sockets supported"));
} }
int socknum = -1; // Consider LWIP and MbedTLS "variant" sockets to be incompatible (for now)
esp_tls_t* tcp_handle = NULL; // The variant of the socket is determined by whether the socket is wrapped
if (socket_type == SOCK_DGRAM || socket_type == SOCK_RAW) { // by SSL. If no TLS handle is set in sslcontext_wrap_socket, the first call
socknum = lwip_socket(addr_family, socket_type, ipproto); // of bind() or connect() will create a LWIP socket with a corresponding
} else { // socketnum.
tcp_handle = esp_tls_init(); // TODO: move MbedTLS to its own duplicate Socket or Server API, maybe?
if (tcp_handle == NULL) {
mp_raise_espidf_MemoryError();
}
}
if (socknum < 0 && tcp_handle == NULL) {
mp_raise_RuntimeError(translate("Out of sockets"));
}
socketpool_socket_obj_t *sock = m_new_obj_with_finaliser(socketpool_socket_obj_t); socketpool_socket_obj_t *sock = m_new_obj_with_finaliser(socketpool_socket_obj_t);
sock->base.type = &socketpool_socket_type; sock->base.type = &socketpool_socket_type;
sock->num = socknum; sock->num = -1;
sock->tcp = tcp_handle; sock->type = socket_type;
sock->family = addr_family;
sock->ipproto = ipproto;
sock->tls = NULL;
sock->ssl_context = NULL; sock->ssl_context = NULL;
sock->pool = self; sock->pool = self;
return sock; return sock;

View File

@ -72,7 +72,7 @@ void common_hal_wifi_radio_set_enabled(wifi_radio_obj_t *self, bool enabled) {
} }
if (!self->started && enabled) { if (!self->started && enabled) {
// esp_wifi_start() would default to soft-AP, thus setting it to station // esp_wifi_start() would default to soft-AP, thus setting it to station
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); start_station(self);
ESP_ERROR_CHECK(esp_wifi_start()); ESP_ERROR_CHECK(esp_wifi_start());
self->started = true; self->started = true;
return; return;
@ -89,7 +89,9 @@ mp_obj_t common_hal_wifi_radio_start_scanning_networks(wifi_radio_obj_t *self) {
if (self->current_scan != NULL) { if (self->current_scan != NULL) {
mp_raise_RuntimeError(translate("Already scanning for wifi networks")); mp_raise_RuntimeError(translate("Already scanning for wifi networks"));
} }
// check enabled if (!common_hal_wifi_radio_get_enabled(self)) {
mp_raise_RuntimeError(translate("wifi is not enabled"));
}
start_station(self); start_station(self);
wifi_scannednetworks_obj_t *scan = m_new_obj(wifi_scannednetworks_obj_t); wifi_scannednetworks_obj_t *scan = m_new_obj(wifi_scannednetworks_obj_t);
@ -126,7 +128,25 @@ void common_hal_wifi_radio_set_hostname(wifi_radio_obj_t *self, const char *host
} }
wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t* ssid, size_t ssid_len, uint8_t* password, size_t password_len, uint8_t channel, mp_float_t timeout, uint8_t* bssid, size_t bssid_len) { wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t* ssid, size_t ssid_len, uint8_t* password, size_t password_len, uint8_t channel, mp_float_t timeout, uint8_t* bssid, size_t bssid_len) {
// check enabled if (!common_hal_wifi_radio_get_enabled(self)) {
mp_raise_RuntimeError(translate("wifi is not enabled"));
}
EventBits_t bits;
// can't block since both bits are false after wifi_init
// both bits are true after an existing connection stops
bits = xEventGroupWaitBits(self->event_group_handle,
WIFI_CONNECTED_BIT | WIFI_DISCONNECTED_BIT,
pdTRUE,
pdTRUE,
0);
if (((bits & WIFI_CONNECTED_BIT) != 0) &&
!((bits & WIFI_DISCONNECTED_BIT) != 0)) {
return WIFI_RADIO_ERROR_NONE;
}
// explicitly clear bits since xEventGroupWaitBits may have timed out
xEventGroupClearBits(self->event_group_handle, WIFI_CONNECTED_BIT);
xEventGroupClearBits(self->event_group_handle, WIFI_DISCONNECTED_BIT);
start_station(self); start_station(self);
wifi_config_t* config = &self->sta_config; wifi_config_t* config = &self->sta_config;
@ -157,7 +177,6 @@ wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t
self->retries_left = 5; self->retries_left = 5;
esp_wifi_connect(); esp_wifi_connect();
EventBits_t bits;
do { do {
RUN_BACKGROUND_TASKS; RUN_BACKGROUND_TASKS;
bits = xEventGroupWaitBits(self->event_group_handle, bits = xEventGroupWaitBits(self->event_group_handle,

View File

@ -30,7 +30,6 @@
#define MICROPY_NLR_THUMB (0) #define MICROPY_NLR_THUMB (0)
#define MICROPY_PY_UJSON (1)
#define MICROPY_USE_INTERNAL_PRINTF (0) #define MICROPY_USE_INTERNAL_PRINTF (0)
#define MICROPY_PY_SYS_PLATFORM "Espressif ESP32-S2" #define MICROPY_PY_SYS_PLATFORM "Espressif ESP32-S2"

View File

@ -46,8 +46,13 @@ void peripherals_touch_init(const touch_pad_t touchpad) {
if (!touch_inited) { if (!touch_inited) {
touch_pad_init(); touch_pad_init();
touch_pad_set_fsm_mode(TOUCH_FSM_MODE_TIMER); touch_pad_set_fsm_mode(TOUCH_FSM_MODE_TIMER);
}
// touch_pad_config() must be done before touch_pad_fsm_start() the first time.
// Otherwise the calibration is wrong and we get maximum raw values if there is
// a trace of any significant length on the pin.
touch_pad_config(touchpad);
if (!touch_inited) {
touch_pad_fsm_start(); touch_pad_fsm_start();
touch_inited = true; touch_inited = true;
} }
touch_pad_config(touchpad);
} }

View File

@ -46,6 +46,7 @@
#include "common-hal/pulseio/PulseIn.h" #include "common-hal/pulseio/PulseIn.h"
#include "common-hal/pwmio/PWMOut.h" #include "common-hal/pwmio/PWMOut.h"
#include "common-hal/watchdog/WatchDogTimer.h" #include "common-hal/watchdog/WatchDogTimer.h"
#include "common-hal/socketpool/Socket.h"
#include "common-hal/wifi/__init__.h" #include "common-hal/wifi/__init__.h"
#include "supervisor/memory.h" #include "supervisor/memory.h"
#include "supervisor/shared/tick.h" #include "supervisor/shared/tick.h"
@ -143,9 +144,9 @@ safe_mode_t port_init(void) {
case ESP_RST_BROWNOUT: case ESP_RST_BROWNOUT:
return BROWNOUT; return BROWNOUT;
case ESP_RST_PANIC: case ESP_RST_PANIC:
return HARD_CRASH;
case ESP_RST_INT_WDT: case ESP_RST_INT_WDT:
case ESP_RST_WDT: case ESP_RST_WDT:
return HARD_CRASH;
default: default:
break; break;
} }
@ -222,6 +223,10 @@ void reset_port(void) {
#if CIRCUITPY_WIFI #if CIRCUITPY_WIFI
wifi_reset(); wifi_reset();
#endif #endif
#if CIRCUITPY_SOCKETPOOL
socket_reset();
#endif
} }
void reset_to_bootloader(void) { void reset_to_bootloader(void) {

View File

@ -31,8 +31,6 @@
#define CIRCUITPY_INTERNAL_NVM_SIZE (0) #define CIRCUITPY_INTERNAL_NVM_SIZE (0)
#define MICROPY_NLR_THUMB (0) #define MICROPY_NLR_THUMB (0)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1) #define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
#define MICROPY_PY_UBINASCII (1)
#define MICROPY_PY_UJSON (1)
#include "py/circuitpy_mpconfig.h" #include "py/circuitpy_mpconfig.h"

View File

@ -41,8 +41,6 @@ extern uint8_t _ld_default_stack_size;
#define CIRCUITPY_DEFAULT_STACK_SIZE ((uint32_t) &_ld_default_stack_size) #define CIRCUITPY_DEFAULT_STACK_SIZE ((uint32_t) &_ld_default_stack_size)
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0) #define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0)
#define MICROPY_PY_FUNCTION_ATTRS (0) #define MICROPY_PY_FUNCTION_ATTRS (0)
#define MICROPY_PY_IO (1)
#define MICROPY_PY_UJSON (1)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1) #define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)

View File

@ -25,6 +25,7 @@ CIRCUITPY_RTC = 1
CIRCUITPY_SDCARDIO = 0 CIRCUITPY_SDCARDIO = 0
CIRCUITPY_TOUCHIO = 0 CIRCUITPY_TOUCHIO = 0
CIRCUITPY_ULAB = 0 CIRCUITPY_ULAB = 0
CIRCUITPY_BUSDEVICE = 0
MICROPY_PY_ASYNC_AWAIT = 0 MICROPY_PY_ASYNC_AWAIT = 0
SUPEROPT_GC = 0 SUPEROPT_GC = 0

View File

@ -13,11 +13,13 @@ INTERNAL_FLASH_FILESYSTEM = 1
CIRCUITPY_AESIO = 1 CIRCUITPY_AESIO = 1
CIRCUITPY_AUDIOMP3 = 0 CIRCUITPY_AUDIOMP3 = 0
CIRCUITPY_BUSDEVICE = 0
CIRCUITPY_BUSIO = 1 CIRCUITPY_BUSIO = 1
CIRCUITPY_DISPLAYIO = 0 CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_ERRNO = 0
CIRCUITPY_FRAMEBUFFERIO = 0 CIRCUITPY_FRAMEBUFFERIO = 0
CIRCUITPY_MSGPACK = 0
CIRCUITPY_GAMEPAD = 0 CIRCUITPY_GAMEPAD = 0
CIRCUITPY_MSGPACK = 0
CIRCUITPY_NEOPIXEL_WRITE = 0 CIRCUITPY_NEOPIXEL_WRITE = 0
CIRCUITPY_NVM = 0 CIRCUITPY_NVM = 0
CIRCUITPY_PIXELBUF = 0 CIRCUITPY_PIXELBUF = 0
@ -28,7 +30,6 @@ CIRCUITPY_SDCARDIO = 0
CIRCUITPY_TOUCHIO = 0 CIRCUITPY_TOUCHIO = 0
CIRCUITPY_ULAB = 0 CIRCUITPY_ULAB = 0
CIRCUITPY_WATCHDOG = 1 CIRCUITPY_WATCHDOG = 1
CIRCUITPY_BUSDEVICE = 0
# Enable micropython.native # Enable micropython.native
#CIRCUITPY_ENABLE_MPY_NATIVE = 1 #CIRCUITPY_ENABLE_MPY_NATIVE = 1

View File

@ -35,11 +35,8 @@
#include "peripherals/nrf/nvm.h" // for FLASH_PAGE_SIZE #include "peripherals/nrf/nvm.h" // for FLASH_PAGE_SIZE
#define MICROPY_PY_FUNCTION_ATTRS (1) #define MICROPY_PY_FUNCTION_ATTRS (1)
#define MICROPY_PY_IO (1)
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1) #define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
#define MICROPY_PY_SYS_STDIO_BUFFER (1) #define MICROPY_PY_SYS_STDIO_BUFFER (1)
#define MICROPY_PY_UBINASCII (1)
#define MICROPY_PY_UJSON (1)
// 24kiB stack // 24kiB stack
#define CIRCUITPY_DEFAULT_STACK_SIZE (24*1024) #define CIRCUITPY_DEFAULT_STACK_SIZE (24*1024)

1
ports/raspberrypi/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
build-*/

274
ports/raspberrypi/Makefile Normal file
View File

@ -0,0 +1,274 @@
# This file is part of the MicroPython project, http://micropython.org/
#
# The MIT License (MIT)
#
# SPDX-FileCopyrightText: Copyright (c) 2019 Dan Halbert for Adafruit Industries
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# Select the board to build for.
ifeq ($(BOARD),)
$(error You must provide a BOARD parameter)
else
ifeq ($(wildcard boards/$(BOARD)/.),)
$(error Invalid BOARD specified)
endif
endif
# If the build directory is not given, make it reflect the board name.
BUILD ?= build-$(BOARD)
include ../../py/mkenv.mk
# Board-specific
include boards/$(BOARD)/mpconfigboard.mk
# Port-specific
include mpconfigport.mk
# CircuitPython-specific
include $(TOP)/py/circuitpy_mpconfig.mk
# qstr definitions (must come before including py.mk)
QSTR_DEFS = qstrdefsport.h
# include py core make definitions
include $(TOP)/py/py.mk
include $(TOP)/supervisor/supervisor.mk
# Include make rules and variables common across CircuitPython builds.
include $(TOP)/py/circuitpy_defns.mk
CROSS_COMPILE = arm-none-eabi-
HAL_DIR=hal/$(MCU_SERIES)
INC += -I. \
-I../.. \
-I../lib/mp-readline \
-I../lib/timeutils \
-Iboards/$(BOARD) \
-Iboards/ \
-isystem sdk/ \
-isystem sdk/src/common/pico_base/include/ \
-isystem sdk/src/common/pico_binary_info/include/ \
-isystem sdk/src/common/pico_stdlib/include/ \
-isystem sdk/src/common/pico_sync/include/ \
-isystem sdk/src/common/pico_time/include/ \
-isystem sdk/src/common/pico_util/include/ \
-isystem sdk/src/rp2040/hardware_regs/include/ \
-isystem sdk/src/rp2040/hardware_structs/include/ \
-isystem sdk/src/rp2_common/hardware_adc/include/ \
-isystem sdk/src/rp2_common/hardware_base/include/ \
-isystem sdk/src/rp2_common/hardware_claim/include/ \
-isystem sdk/src/rp2_common/hardware_clocks/include/ \
-isystem sdk/src/rp2_common/hardware_dma/include/ \
-isystem sdk/src/rp2_common/hardware_flash/include/ \
-isystem sdk/src/rp2_common/hardware_gpio/include/ \
-isystem sdk/src/rp2_common/hardware_irq/include/ \
-isystem sdk/src/rp2_common/hardware_i2c/include/ \
-isystem sdk/src/rp2_common/hardware_pio/include/ \
-isystem sdk/src/rp2_common/hardware_pll/include/ \
-isystem sdk/src/rp2_common/hardware_resets/include/ \
-isystem sdk/src/rp2_common/hardware_spi/include/ \
-isystem sdk/src/rp2_common/hardware_sync/include/ \
-isystem sdk/src/rp2_common/hardware_timer/include/ \
-isystem sdk/src/rp2_common/hardware_uart/include/ \
-isystem sdk/src/rp2_common/hardware_watchdog/include/ \
-isystem sdk/src/rp2_common/hardware_xosc/include/ \
-isystem sdk/src/rp2_common/pico_multicore/include/ \
-isystem sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include/ \
-isystem sdk/src/rp2_common/pico_stdio/include/ \
-isystem sdk/src/rp2_common/pico_printf/include/ \
-isystem sdk/src/rp2_common/pico_float/include/ \
-isystem sdk/src/rp2_common/pico_platform/include/ \
-isystem sdk/src/rp2_common/pico_runtime/printf/include/ \
-isystem sdk/src/rp2_common/pico_bootrom/include/ \
-Isdk_config \
-I../../lib/tinyusb/src \
-I../../supervisor/shared/usb \
-I$(BUILD)
# Pico specific configuration
CFLAGS += -DPICO_ON_DEVICE=1 -DPICO_NO_BINARY_INFO=0 -DPICO_TIME_DEFAULT_ALARM_POOL_DISABLED=1 -DPICO_DIVIDER_CALL_IDIV0=0 -DPICO_DIVIDER_CALL_LDIV0=0 -DPICO_DIVIDER_HARDWARE=1 -DPICO_DOUBLE_ROM=1 -DPICO_FLOAT_ROM=1 -DPICO_MULTICORE=1 -DPICO_BITS_IN_RAM=0 -DPICO_DIVIDER_IN_RAM=0 -DPICO_DOUBLE_PROPAGATE_NANS=0 -DPICO_DOUBLE_IN_RAM=0 -DPICO_MEM_IN_RAM=0 -DPICO_FLOAT_IN_RAM=0 -DPICO_FLOAT_PROPAGATE_NANS=1 -DPICO_NO_FLASH=0 -DPICO_COPY_TO_RAM=0 -DPICO_DISABLE_SHARED_IRQ_HANDLERS=0
OPTIMIZATION_FLAGS ?= -O3
# TinyUSB defines
CFLAGS += -DTUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX=1 -DCFG_TUSB_MCU=OPT_MCU_RP2040 -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
# option to override default optimization level, set in boards/$(BOARD)/mpconfigboard.mk
CFLAGS += $(OPTIMIZATION_FLAGS)
#Debugging/Optimization
ifeq ($(DEBUG), 1)
CFLAGS += -ggdb3 -Og
# No LTO because we may place some functions in RAM instead of flash.
else
CFLAGS += -DNDEBUG
# No LTO because we may place some functions in RAM instead of flash.
ifdef CFLAGS_BOARD
CFLAGS += $(CFLAGS_BOARD)
endif
endif
# Remove -Wno-stringop-overflow after we can test with CI's GCC 10. Mac's looks weird.
DISABLE_WARNINGS = -Wno-stringop-overflow -Wno-unused-function -Wno-unused-variable -Wno-strict-overflow -Wno-cast-align -Wno-strict-prototypes -Wno-nested-externs -Wno-double-promotion -Wno-sign-compare
CFLAGS += $(INC) -Wall -Werror -std=gnu11 -nostdlib -fshort-enums $(BASE_CFLAGS) $(CFLAGS_MOD) $(COPT) $(DISABLE_WARNINGS)
CFLAGS += \
-march=armv6-m \
-mthumb \
-mabi=aapcs-linux \
-mcpu=cortex-m0plus \
-msoft-float \
-mfloat-abi=soft
PICO_LDFLAGS = --specs=nosys.specs -Wl,--wrap=__aeabi_ldiv0 -Wl,--wrap=__aeabi_idiv0 -Wl,--wrap=__aeabi_lmul -Wl,--wrap=__clzsi2 -Wl,--wrap=__clzdi2 -Wl,--wrap=__ctzsi2 -Wl,--wrap=__ctzdi2 -Wl,--wrap=__popcountsi2 -Wl,--wrap=__popcountdi2 -Wl,--wrap=__clz -Wl,--wrap=__clzl -Wl,--wrap=__clzll -Wl,--wrap=__aeabi_idiv -Wl,--wrap=__aeabi_idivmod -Wl,--wrap=__aeabi_ldivmod -Wl,--wrap=__aeabi_uidiv -Wl,--wrap=__aeabi_uidivmod -Wl,--wrap=__aeabi_uldivmod -Wl,--wrap=__aeabi_dadd -Wl,--wrap=__aeabi_ddiv -Wl,--wrap=__aeabi_dmul -Wl,--wrap=__aeabi_drsub -Wl,--wrap=__aeabi_dsub -Wl,--wrap=__aeabi_cdcmpeq -Wl,--wrap=__aeabi_cdrcmple -Wl,--wrap=__aeabi_cdcmple -Wl,--wrap=__aeabi_dcmpeq -Wl,--wrap=__aeabi_dcmplt -Wl,--wrap=__aeabi_dcmple -Wl,--wrap=__aeabi_dcmpge -Wl,--wrap=__aeabi_dcmpgt -Wl,--wrap=__aeabi_dcmpun -Wl,--wrap=__aeabi_i2d -Wl,--wrap=__aeabi_l2d -Wl,--wrap=__aeabi_ui2d -Wl,--wrap=__aeabi_ul2d -Wl,--wrap=__aeabi_d2iz -Wl,--wrap=__aeabi_d2lz -Wl,--wrap=__aeabi_d2uiz -Wl,--wrap=__aeabi_d2ulz -Wl,--wrap=__aeabi_d2f -Wl,--wrap=sqrt -Wl,--wrap=cos -Wl,--wrap=sin -Wl,--wrap=tan -Wl,--wrap=atan2 -Wl,--wrap=exp -Wl,--wrap=log -Wl,--wrap=ldexp -Wl,--wrap=copysign -Wl,--wrap=trunc -Wl,--wrap=floor -Wl,--wrap=ceil -Wl,--wrap=round -Wl,--wrap=sincos -Wl,--wrap=asin -Wl,--wrap=acos -Wl,--wrap=atan -Wl,--wrap=sinh -Wl,--wrap=cosh -Wl,--wrap=tanh -Wl,--wrap=asinh -Wl,--wrap=acosh -Wl,--wrap=atanh -Wl,--wrap=exp2 -Wl,--wrap=log2 -Wl,--wrap=exp10 -Wl,--wrap=log10 -Wl,--wrap=pow -Wl,--wrap=powint -Wl,--wrap=hypot -Wl,--wrap=cbrt -Wl,--wrap=fmod -Wl,--wrap=drem -Wl,--wrap=remainder -Wl,--wrap=remquo -Wl,--wrap=expm1 -Wl,--wrap=log1p -Wl,--wrap=fma -Wl,--wrap=__aeabi_fadd -Wl,--wrap=__aeabi_fdiv -Wl,--wrap=__aeabi_fmul -Wl,--wrap=__aeabi_frsub -Wl,--wrap=__aeabi_fsub -Wl,--wrap=__aeabi_cfcmpeq -Wl,--wrap=__aeabi_cfrcmple -Wl,--wrap=__aeabi_cfcmple -Wl,--wrap=__aeabi_fcmpeq -Wl,--wrap=__aeabi_fcmplt -Wl,--wrap=__aeabi_fcmple -Wl,--wrap=__aeabi_fcmpge -Wl,--wrap=__aeabi_fcmpgt -Wl,--wrap=__aeabi_fcmpun -Wl,--wrap=__aeabi_i2f -Wl,--wrap=__aeabi_l2f -Wl,--wrap=__aeabi_ui2f -Wl,--wrap=__aeabi_ul2f -Wl,--wrap=__aeabi_f2iz -Wl,--wrap=__aeabi_f2lz -Wl,--wrap=__aeabi_f2uiz -Wl,--wrap=__aeabi_f2ulz -Wl,--wrap=__aeabi_f2d -Wl,--wrap=sqrtf -Wl,--wrap=cosf -Wl,--wrap=sinf -Wl,--wrap=tanf -Wl,--wrap=atan2f -Wl,--wrap=expf -Wl,--wrap=logf -Wl,--wrap=ldexpf -Wl,--wrap=copysignf -Wl,--wrap=truncf -Wl,--wrap=floorf -Wl,--wrap=ceilf -Wl,--wrap=roundf -Wl,--wrap=sincosf -Wl,--wrap=asinf -Wl,--wrap=acosf -Wl,--wrap=atanf -Wl,--wrap=sinhf -Wl,--wrap=coshf -Wl,--wrap=tanhf -Wl,--wrap=asinhf -Wl,--wrap=acoshf -Wl,--wrap=atanhf -Wl,--wrap=exp2f -Wl,--wrap=log2f -Wl,--wrap=exp10f -Wl,--wrap=log10f -Wl,--wrap=powf -Wl,--wrap=powintf -Wl,--wrap=hypotf -Wl,--wrap=cbrtf -Wl,--wrap=fmodf -Wl,--wrap=dremf -Wl,--wrap=remainderf -Wl,--wrap=remquof -Wl,--wrap=expm1f -Wl,--wrap=log1pf -Wl,--wrap=fmaf -Wl,--wrap=memcpy -Wl,--wrap=memset -Wl,--wrap=__aeabi_memcpy -Wl,--wrap=__aeabi_memset -Wl,--wrap=__aeabi_memcpy4 -Wl,--wrap=__aeabi_memset4 -Wl,--wrap=__aeabi_memcpy8 -Wl,--wrap=__aeabi_memset8
LDFLAGS = $(CFLAGS) $(PICO_LDFLAGS) -Wl,-T,link.ld -Wl,-Map=$@.map -Wl,-cref -Wl,--gc-sections
# Use toolchain libm if we're not using our own.
ifndef INTERNAL_LIBM
LIBS += -lm
endif
LDFLAGS += -mthumb -mcpu=cortex-m0plus
SRC_SDK := \
src/common/pico_sync/critical_section.c \
src/common/pico_sync/lock_core.c \
src/common/pico_sync/mutex.c \
src/common/pico_time/time.c \
src/common/pico_util/pheap.c \
src/rp2_common/hardware_adc/adc.c \
src/rp2_common/hardware_claim/claim.c \
src/rp2_common/hardware_clocks/clocks.c \
src/rp2_common/hardware_dma/dma.c \
src/rp2_common/hardware_flash/flash.c \
src/rp2_common/hardware_gpio/gpio.c \
src/rp2_common/hardware_i2c/i2c.c \
src/rp2_common/hardware_irq/irq.c \
src/rp2_common/hardware_pio/pio.c \
src/rp2_common/hardware_pll/pll.c \
src/rp2_common/hardware_spi/spi.c \
src/rp2_common/hardware_sync/sync.c \
src/rp2_common/hardware_timer/timer.c \
src/rp2_common/hardware_uart/uart.c \
src/rp2_common/hardware_watchdog/watchdog.c \
src/rp2_common/hardware_xosc/xosc.c \
src/rp2_common/pico_bootrom/bootrom.c \
src/rp2_common/pico_double/double_init_rom.c \
src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c \
src/rp2_common/pico_float/float_init_rom.c \
src/rp2_common/pico_float/float_math.c \
src/rp2_common/pico_multicore/multicore.c \
src/rp2_common/pico_platform/platform.c \
src/rp2_common/pico_printf/printf.c \
src/rp2_common/pico_runtime/runtime.c \
src/rp2_common/pico_stdio/stdio.c \
SRC_SDK := $(addprefix sdk/, $(SRC_SDK))
SRC_C += \
boards/$(BOARD)/board.c \
boards/$(BOARD)/pins.c \
bindings/rp2pio/StateMachine.c \
bindings/rp2pio/__init__.c \
common-hal/rp2pio/StateMachine.c \
common-hal/rp2pio/__init__.c \
background.c \
peripherals/pins.c \
fatfs_port.c \
lib/libc/string0.c \
lib/mp-readline/readline.c \
lib/oofatfs/ff.c \
lib/oofatfs/option/ccsbcs.c \
lib/timeutils/timeutils.c \
lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c \
lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c \
lib/utils/buffer_helper.c \
lib/utils/context_manager_helpers.c \
lib/utils/interrupt_char.c \
lib/utils/pyexec.c \
lib/utils/stdout_helpers.c \
lib/utils/sys_stdio_mphal.c \
mphalport.c \
supervisor/shared/memory.c \
SRC_COMMON_HAL_EXPANDED = $(addprefix shared-bindings/, $(SRC_COMMON_HAL)) \
$(addprefix shared-bindings/, $(SRC_BINDINGS_ENUMS)) \
$(addprefix common-hal/, $(SRC_COMMON_HAL))
SRC_SHARED_MODULE_EXPANDED = $(addprefix shared-bindings/, $(SRC_SHARED_MODULE)) \
$(addprefix shared-module/, $(SRC_SHARED_MODULE)) \
$(addprefix shared-module/, $(SRC_SHARED_MODULE_INTERNAL))
# There may be duplicates between SRC_COMMON_HAL_EXPANDED and SRC_SHARED_MODULE_EXPANDED,
# because a few modules have files both in common-hal/ and shared-modules/.
# Doing a $(sort ...) removes duplicates as part of sorting.
SRC_COMMON_HAL_SHARED_MODULE_EXPANDED = $(sort $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED))
SRC_S = supervisor/$(CHIP_FAMILY)_cpu.s
SRC_S_UPPER = bs2_default_padded_checksummed.S \
sdk/src/rp2_common/hardware_divider/divider.S \
sdk/src/rp2_common/hardware_irq/irq_handler_chain.S \
sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S \
sdk/src/rp2_common/pico_double/double_aeabi.S \
sdk/src/rp2_common/pico_double/double_v1_rom_shim.S \
sdk/src/rp2_common/pico_divider/divider.S \
sdk/src/rp2_common/pico_float/float_aeabi.S \
sdk/src/rp2_common/pico_float/float_v1_rom_shim.S \
sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S \
sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S \
sdk/src/rp2_common/pico_standard_link/crt0.S \
OBJ = $(PY_O) $(SUPERVISOR_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_SDK:.c=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_SHARED_MODULE_EXPANDED:.c=.o))
ifeq ($(INTERNAL_LIBM),1)
OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o))
endif
OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_S_UPPER:.S=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o))
SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED)
all: $(BUILD)/firmware.uf2
$(BUILD)/firmware.elf: $(OBJ) link.ld
$(STEPECHO) "LINK $@"
$(Q)$(CC) -o $@ $(LDFLAGS) $(OBJ)
$(Q)$(SIZE) $@ | $(PYTHON3) $(TOP)/tools/build_memory_info.py link.ld
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
$(STEPECHO) "Create $@"
$(Q)$(OBJCOPY) -O binary $^ $@
$(BUILD)/firmware.uf2: $(BUILD)/firmware.bin
$(STEPECHO) "Create $@"
$(Q)$(PYTHON3) $(TOP)/tools/uf2/utils/uf2conv.py -f 0xe48bff56 -b 0x10000000 -c -o $@ $^
include $(TOP)/py/mkrules.mk
# Print out the value of a make variable.
# https://stackoverflow.com/questions/16467718/how-to-print-out-a-variable-in-makefile
print-%:
@echo $* = $($*)

View File

@ -0,0 +1,18 @@
RP2040
==================
This port supports many development boards that utilize RP2040 chips. See
https://circuitpython.org/downloads for all supported boards.
Building
--------
For build instructions see this guide: https://learn.adafruit.com/building-circuitpython/
Port Specific modules
---------------------
.. toctree::
../../shared-bindings/rp2pio/index

View File

@ -0,0 +1,44 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "background.h"
#include "supervisor/filesystem.h"
#include "supervisor/shared/tick.h"
#include "supervisor/usb.h"
#include "py/runtime.h"
#include "shared-module/network/__init__.h"
#include "supervisor/shared/stack.h"
#include "supervisor/port.h"
#if CIRCUITPY_DISPLAYIO
#include "shared-module/displayio/__init__.h"
#endif
void port_start_background_task(void) {}
void port_finish_background_task(void) {}
void port_background_task(void) {}

View File

@ -0,0 +1,32 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_RASPBERRYPI_BACKGROUND_H
#define MICROPY_INCLUDED_RASPBERRYPI_BACKGROUND_H
#include <stdbool.h>
#endif // MICROPY_INCLUDED_RASPBERRYPI_BACKGROUND_H

View File

@ -0,0 +1,449 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
// This file contains all of the Python API definitions for the
// rp2pio.StateMachine class.
#include <string.h>
#include "shared-bindings/microcontroller/Pin.h"
#include "bindings/rp2pio/StateMachine.h"
#include "shared-bindings/util.h"
#include "lib/utils/buffer_helper.h"
#include "lib/utils/context_manager_helpers.h"
#include "lib/utils/interrupt_char.h"
#include "py/mperrno.h"
#include "py/objproperty.h"
#include "py/runtime.h"
#include "supervisor/shared/translate.h"
//| class StateMachine:
//| """A single PIO StateMachine
//|
//| The programmable I/O peripheral on the RP2 series of microcontrollers is
//| unique. It is a collection of generic state machines that can be
//| used for a variety of protocols. State machines may be independent or
//| coordinated. Program memory and IRQs are shared between the state machines
//| in a particular PIO instance. They are independent otherwise.
//|
//| This class is designed to facilitate sharing of PIO resources. By default,
//| it is assumed that the state machine is used on its own and can be placed
//| in either PIO. State machines with the same program will be placed in the
//| same PIO if possible. To ensure multiple state machines share a PIO use
//| the ``colocate`` kwarg during construction and create them one after another."""
//|
//| def __init__(self,
//| program: ReadableBuffer,
//| frequency: int,
//| *,
//| init: Optional[ReadableBuffer] = None,
//| first_out_pin: Optional[microcontroller.Pin] = None,
//| out_pin_count: int = 1,
//| first_in_pin: Optional[microcontroller.Pin] = None,
//| in_pin_count: int = 1,
//| first_set_pin: Optional[microcontroller.Pin] = None,
//| set_pin_count: int = 1,
//| first_sideset_pin: Optional[microcontroller.Pin] = None,
//| sideset_pin_count: int = 1,
//| exclusive_pin_use: bool = True,
//| auto_pull: bool = False,
//| pull_threshold : int = 32,
//| out_shift_right : bool = True,
//| auto_push: bool = False,
//| push_threshold : int = 32,
//| in_shift_right : bool = True) -> None:
// //| colocate: Union[int, StateMachine, None] = None
//|
//| """Construct a StateMachine object on the given pins with the given program.
//|
//| :param ReadableBuffer program: the program to run with the state machine
//| :param int frequency: the target clock frequency of the state machine. Actual may be less.
//| :param ReadableBuffer init: a program to run once at start up. This is run after program
//| is started so instructions may be intermingled
//| :param ~microcontroller.Pin first_out_pin: the first pin to use with the OUT instruction
//| :param int out_pin_count: the count of consecutive pins to use with OUT starting at first_out_pin
//| :param ~microcontroller.Pin first_in_pin: the first pin to use with the IN instruction
//| :param int in_pin_count: the count of consecutive pins to use with IN starting at first_in_pin
//| :param ~microcontroller.Pin first_set_pin: the first pin to use with the SET instruction
//| :param int set_pin_count: the count of consecutive pins to use with SET starting at first_set_pin
//| :param ~microcontroller.Pin first_sideset_pin: the first pin to use with a side set
//| :param int sideset_pin_count: the count of consecutive pins to use with a side set starting at first_sideset_pin
//| :param bool exclusive_pin_use: When True, do not share any pins with other state machines. Pins are never shared with other peripherals
//| :param bool auto_pull: When True, automatically load data from the tx FIFO into the
//| output shift register (OSR) when an OUT instruction shifts more than pull_threshold bits
//| :param int pull_threshold: Number of bits to shift before loading a new value into the OSR from the tx FIFO
//| :param bool out_shift_right: When True, data is shifted out the right side (LSB) of the
//| OSR. It is shifted out the left (MSB) otherwise. NOTE! This impacts data alignment
//| when the number of bytes is not a power of two (1, 2 or 4 bytes).
//| :param bool auto_push: When True, automatically save data from input shift register
//| (ISR) into the rx FIFO when an IN instruction shifts more than push_threshold bits
//| :param int push_threshold: Number of bits to shift before saving the ISR value to the RX FIFO
//| :param bool in_shift_right: When True, data is shifted into the right side (LSB) of the
//| ISR. It is shifted into the left (MSB) otherwise. NOTE! This impacts data alignment
//| when the number of bytes is not a power of two (1, 2 or 4 bytes)."""
//| ...
//|
STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
rp2pio_statemachine_obj_t *self = m_new_obj(rp2pio_statemachine_obj_t);
self->base.type = &rp2pio_statemachine_type;
enum { ARG_program, ARG_frequency, ARG_init,
ARG_first_out_pin, ARG_out_pin_count,
ARG_first_in_pin, ARG_in_pin_count,
ARG_first_set_pin, ARG_set_pin_count,
ARG_first_sideset_pin, ARG_sideset_pin_count,
ARG_exclusive_pin_use,
ARG_auto_pull, ARG_pull_threshold, ARG_out_shift_right,
ARG_auto_push, ARG_push_threshold, ARG_in_shift_right};
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_program, MP_ARG_REQUIRED | MP_ARG_OBJ },
{ MP_QSTR_frequency, MP_ARG_REQUIRED | MP_ARG_INT },
{ MP_QSTR_init, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
{ MP_QSTR_first_out_pin, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
{ MP_QSTR_out_pin_count, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} },
{ MP_QSTR_first_in_pin, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
{ MP_QSTR_in_pin_count, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} },
{ MP_QSTR_first_set_pin, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
{ MP_QSTR_set_pin_count, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} },
{ MP_QSTR_first_sideset_pin, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
{ MP_QSTR_sideset_pin_count, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} },
{ MP_QSTR_exclusive_pin_use, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true} },
{ MP_QSTR_auto_pull, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} },
{ MP_QSTR_pull_threshold, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 32} },
{ MP_QSTR_out_shift_right, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true} },
{ MP_QSTR_auto_push, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} },
{ MP_QSTR_push_threshold, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 32} },
{ MP_QSTR_in_shift_right, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true} },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(args[ARG_program].u_obj, &bufinfo, MP_BUFFER_READ);
mp_buffer_info_t init_bufinfo;
init_bufinfo.len = 0;
mp_get_buffer(args[ARG_init].u_obj, &init_bufinfo, MP_BUFFER_READ);
// We don't validate pin in use here because we may be ok sharing them within a PIO.
mcu_pin_obj_t *first_out_pin = validate_obj_is_pin_or_none(args[ARG_first_out_pin].u_obj);
if (args[ARG_out_pin_count].u_int < 1) {
mp_raise_ValueError(translate("Pin count must be at least 1"));
}
mcu_pin_obj_t *first_in_pin = validate_obj_is_pin_or_none(args[ARG_first_in_pin].u_obj);
if (args[ARG_in_pin_count].u_int < 1) {
mp_raise_ValueError(translate("Pin count must be at least 1"));
}
mcu_pin_obj_t *first_set_pin = validate_obj_is_pin_or_none(args[ARG_first_set_pin].u_obj);
if (args[ARG_set_pin_count].u_int < 1) {
mp_raise_ValueError(translate("Pin count must be at least 1"));
}
if (args[ARG_set_pin_count].u_int > 5) {
mp_raise_ValueError(translate("Set pin count must be between 1 and 5"));
}
mcu_pin_obj_t *first_sideset_pin = validate_obj_is_pin_or_none(args[ARG_first_sideset_pin].u_obj);
if (args[ARG_sideset_pin_count].u_int < 1) {
mp_raise_ValueError(translate("Pin count must be at least 1"));
}
if (args[ARG_sideset_pin_count].u_int > 5) {
mp_raise_ValueError(translate("Side set pin count must be between 1 and 5"));
}
mp_int_t pull_threshold = args[ARG_pull_threshold].u_int;
mp_int_t push_threshold = args[ARG_push_threshold].u_int;
if (pull_threshold < 1 || pull_threshold > 32) {
mp_raise_ValueError(translate("pull_threshold must be between 1 and 32"));
}
if (push_threshold < 1 || push_threshold > 32) {
mp_raise_ValueError(translate("push_threshold must be between 1 and 32"));
}
if (bufinfo.len < 2) {
mp_raise_ValueError(translate("Program must contain at least one 16-bit instruction."));
}
if (bufinfo.len % 2 != 0) {
mp_raise_ValueError(translate("Program size invalid"));
}
if (bufinfo.len > 32) {
mp_raise_ValueError(translate("Program too large"));
}
if (init_bufinfo.len % 2 != 0) {
mp_raise_ValueError(translate("Init program size invalid"));
}
common_hal_rp2pio_statemachine_construct(self,
bufinfo.buf, bufinfo.len / 2,
args[ARG_frequency].u_int,
init_bufinfo.buf, init_bufinfo.len / 2,
first_out_pin, args[ARG_out_pin_count].u_int,
first_in_pin, args[ARG_in_pin_count].u_int,
first_set_pin, args[ARG_set_pin_count].u_int,
first_sideset_pin, args[ARG_sideset_pin_count].u_int,
args[ARG_exclusive_pin_use].u_bool,
args[ARG_auto_pull].u_bool, pull_threshold, args[ARG_out_shift_right].u_bool,
args[ARG_auto_push].u_bool, push_threshold, args[ARG_in_shift_right].u_bool);
return MP_OBJ_FROM_PTR(self);
}
//| def deinit(self) -> None:
//| """Turn off the state machine and release its resources."""
//| ...
//|
STATIC mp_obj_t rp2pio_statemachine_obj_deinit(mp_obj_t self_in) {
rp2pio_statemachine_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_rp2pio_statemachine_deinit(self);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_1(rp2pio_statemachine_deinit_obj, rp2pio_statemachine_obj_deinit);
//| def __enter__(self) -> StateMachine:
//| """No-op used by Context Managers.
//| Provided by context manager helper."""
//| ...
//|
//| def __exit__(self) -> None:
//| """Automatically deinitializes the hardware when exiting a context. See
//| :ref:`lifetime-and-contextmanagers` for more info."""
//| ...
//|
STATIC mp_obj_t rp2pio_statemachine_obj___exit__(size_t n_args, const mp_obj_t *args) {
(void)n_args;
common_hal_rp2pio_statemachine_deinit(args[0]);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(rp2pio_statemachine_obj___exit___obj, 4, 4, rp2pio_statemachine_obj___exit__);
STATIC void check_for_deinit(rp2pio_statemachine_obj_t *self) {
if (common_hal_rp2pio_statemachine_deinited(self)) {
raise_deinited_error();
}
}
// // | def restart(self, *other_state_machines) -> None:
// // | """Restarts this state machine and any others given. They must share
// // | an underlying PIO. An exception will be raised otherwise."""
// // | ...
// // |
//| def write(self, buffer: ReadableBuffer, *, start: int = 0, end: Optional[int] = None) -> None:
//| """Write the data contained in ``buffer`` to the state machine. If the buffer is empty, nothing happens.
//|
//| :param ~_typing.ReadableBuffer buffer: Write out the data in this buffer
//| :param int start: Start of the slice of ``buffer`` to write out: ``buffer[start:end]``
//| :param int end: End of the slice; this index is not included. Defaults to ``len(buffer)``"""
//| ...
//|
STATIC mp_obj_t rp2pio_statemachine_write(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_buffer, ARG_start, ARG_end };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_buffer, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
{ MP_QSTR_start, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
{ MP_QSTR_end, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = INT_MAX} },
};
rp2pio_statemachine_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
check_for_deinit(self);
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(args[ARG_buffer].u_obj, &bufinfo, MP_BUFFER_READ);
int32_t start = args[ARG_start].u_int;
size_t length = bufinfo.len;
normalize_buffer_bounds(&start, args[ARG_end].u_int, &length);
if (length == 0) {
return mp_const_none;
}
bool ok = common_hal_rp2pio_statemachine_write(self, ((uint8_t*)bufinfo.buf) + start, length);
if (mp_hal_is_interrupted()) {
return mp_const_none;
}
if (!ok) {
mp_raise_OSError(MP_EIO);
}
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_KW(rp2pio_statemachine_write_obj, 2, rp2pio_statemachine_write);
// // | def readinto(self, buffer: WriteableBuffer, *, start: int = 0, end: Optional[int] = None) -> None:
// // | """Read into ``buffer``. If the number of bytes to read is 0, nothing happens.
// // |
// // | :param ~_typing.WriteableBuffer buffer: Read data into this buffer
// // | :param int start: Start of the slice of ``buffer`` to read into: ``buffer[start:end]``
// // | :param int end: End of the slice; this index is not included. Defaults to ``len(buffer)``
// // | :param int write_value: Value to write while reading. (Usually ignored.)"""
// // | ...
// // |
// STATIC mp_obj_t rp2pio_statemachine_readinto(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
// enum { ARG_buffer, ARG_start, ARG_end, ARG_write_value };
// static const mp_arg_t allowed_args[] = {
// { MP_QSTR_buffer, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
// { MP_QSTR_start, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
// { MP_QSTR_end, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = INT_MAX} },
// { MP_QSTR_write_value,MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
// };
// rp2pio_statemachine_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
// check_for_deinit(self);
// check_lock(self);
// mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
// mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
// mp_buffer_info_t bufinfo;
// mp_get_buffer_raise(args[ARG_buffer].u_obj, &bufinfo, MP_BUFFER_WRITE);
// int32_t start = args[ARG_start].u_int;
// size_t length = bufinfo.len;
// normalize_buffer_bounds(&start, args[ARG_end].u_int, &length);
// if (length == 0) {
// return mp_const_none;
// }
// bool ok = common_hal_rp2pio_statemachine_read(self, ((uint8_t*)bufinfo.buf) + start, length, args[ARG_write_value].u_int);
// if (!ok) {
// mp_raise_OSError(MP_EIO);
// }
// return mp_const_none;
// }
// MP_DEFINE_CONST_FUN_OBJ_KW(rp2pio_statemachine_readinto_obj, 2, rp2pio_statemachine_readinto);
// //| def write_readinto(self, buffer_out: ReadableBuffer, buffer_in: WriteableBuffer, *, out_start: int = 0, out_end: Optional[int] = None, in_start: int = 0, in_end: Optional[int] = None) -> None:
// //| """Write out the data in ``buffer_out`` while simultaneously reading data into ``buffer_in``.
// //| The SPI object must be locked.
// //| The lengths of the slices defined by ``buffer_out[out_start:out_end]`` and ``buffer_in[in_start:in_end]``
// //| must be equal.
// //| If buffer slice lengths are both 0, nothing happens.
// //|
// //| :param ~_typing.ReadableBuffer buffer_out: Write out the data in this buffer
// //| :param ~_typing.WriteableBuffer buffer_in: Read data into this buffer
// //| :param int out_start: Start of the slice of buffer_out to write out: ``buffer_out[out_start:out_end]``
// //| :param int out_end: End of the slice; this index is not included. Defaults to ``len(buffer_out)``
// //| :param int in_start: Start of the slice of ``buffer_in`` to read into: ``buffer_in[in_start:in_end]``
// //| :param int in_end: End of the slice; this index is not included. Defaults to ``len(buffer_in)``"""
// //| ...
// //|
// STATIC mp_obj_t rp2pio_statemachine_write_readinto(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
// enum { ARG_buffer_out, ARG_buffer_in, ARG_out_start, ARG_out_end, ARG_in_start, ARG_in_end };
// static const mp_arg_t allowed_args[] = {
// { MP_QSTR_buffer_out, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
// { MP_QSTR_buffer_in, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
// { MP_QSTR_out_start, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
// { MP_QSTR_out_end, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = INT_MAX} },
// { MP_QSTR_in_start, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
// { MP_QSTR_in_end, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = INT_MAX} },
// };
// rp2pio_statemachine_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
// check_for_deinit(self);
// check_lock(self);
// mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
// mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
// mp_buffer_info_t buf_out_info;
// mp_get_buffer_raise(args[ARG_buffer_out].u_obj, &buf_out_info, MP_BUFFER_READ);
// int32_t out_start = args[ARG_out_start].u_int;
// size_t out_length = buf_out_info.len;
// normalize_buffer_bounds(&out_start, args[ARG_out_end].u_int, &out_length);
// mp_buffer_info_t buf_in_info;
// mp_get_buffer_raise(args[ARG_buffer_in].u_obj, &buf_in_info, MP_BUFFER_WRITE);
// int32_t in_start = args[ARG_in_start].u_int;
// size_t in_length = buf_in_info.len;
// normalize_buffer_bounds(&in_start, args[ARG_in_end].u_int, &in_length);
// if (out_length != in_length) {
// mp_raise_ValueError(translate("buffer slices must be of equal length"));
// }
// if (out_length == 0) {
// return mp_const_none;
// }
// bool ok = common_hal_rp2pio_statemachine_transfer(self,
// ((uint8_t*)buf_out_info.buf) + out_start,
// ((uint8_t*)buf_in_info.buf) + in_start,
// out_length);
// if (!ok) {
// mp_raise_OSError(MP_EIO);
// }
// return mp_const_none;
// }
// MP_DEFINE_CONST_FUN_OBJ_KW(rp2pio_statemachine_write_readinto_obj, 2, rp2pio_statemachine_write_readinto);
//| frequency: int
//| """The actual state machine frequency. This may not match the frequency requested
//| due to internal limitations."""
//|
STATIC mp_obj_t rp2pio_statemachine_obj_get_frequency(mp_obj_t self_in) {
rp2pio_statemachine_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
return MP_OBJ_NEW_SMALL_INT(common_hal_rp2pio_statemachine_get_frequency(self));
}
MP_DEFINE_CONST_FUN_OBJ_1(rp2pio_statemachine_get_frequency_obj, rp2pio_statemachine_obj_get_frequency);
const mp_obj_property_t rp2pio_statemachine_frequency_obj = {
.base.type = &mp_type_property,
.proxy = {(mp_obj_t)&rp2pio_statemachine_get_frequency_obj,
(mp_obj_t)&mp_const_none_obj,
(mp_obj_t)&mp_const_none_obj},
};
STATIC const mp_rom_map_elem_t rp2pio_statemachine_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&rp2pio_statemachine_deinit_obj) },
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) },
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&rp2pio_statemachine_obj___exit___obj) },
// { MP_ROM_QSTR(MP_QSTR_restart), MP_ROM_PTR(&rp2pio_statemachine_configure_obj) },
// { MP_ROM_QSTR(MP_QSTR_readinto), MP_ROM_PTR(&rp2pio_statemachine_readinto_obj) },
{ MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&rp2pio_statemachine_write_obj) },
// { MP_ROM_QSTR(MP_QSTR_write_readinto), MP_ROM_PTR(&rp2pio_statemachine_write_readinto_obj) },
{ MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&rp2pio_statemachine_frequency_obj) }
};
STATIC MP_DEFINE_CONST_DICT(rp2pio_statemachine_locals_dict, rp2pio_statemachine_locals_dict_table);
const mp_obj_type_t rp2pio_statemachine_type = {
{ &mp_type_type },
.name = MP_QSTR_StateMachine,
.make_new = rp2pio_statemachine_make_new,
.locals_dict = (mp_obj_dict_t*)&rp2pio_statemachine_locals_dict,
};
rp2pio_statemachine_obj_t *validate_obj_is_statemachine(mp_obj_t obj) {
if (!MP_OBJ_IS_TYPE(obj, &rp2pio_statemachine_type)) {
mp_raise_TypeError_varg(translate("Expected a %q"), rp2pio_statemachine_type.name);
}
return MP_OBJ_TO_PTR(obj);
}

View File

@ -0,0 +1,71 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_RASPBERRYPI_BINDINGS_RP2PIO_STATEMACHINE_H
#define MICROPY_INCLUDED_RASPBERRYPI_BINDINGS_RP2PIO_STATEMACHINE_H
#include "py/obj.h"
#include "common-hal/microcontroller/Pin.h"
#include "common-hal/rp2pio/StateMachine.h"
// Type object used in Python. Should be shared between ports.
extern const mp_obj_type_t rp2pio_statemachine_type;
// Construct an underlying SPI object.
extern void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self,
const uint16_t* program, size_t program_len,
size_t frequency,
const uint16_t* init, size_t init_len,
const mcu_pin_obj_t * first_out_pin, uint8_t out_pin_count,
const mcu_pin_obj_t * first_in_pin, uint8_t in_pin_count,
const mcu_pin_obj_t * first_set_pin, uint8_t set_pin_count,
const mcu_pin_obj_t * first_sideset_pin, uint8_t sideset_pin_count,
bool exclusive_pin_use,
bool auto_pull, uint8_t pull_threshold, bool out_shift_right,
bool auto_push, uint8_t push_threshold, bool in_shift_right);
extern void common_hal_rp2pio_statemachine_deinit(rp2pio_statemachine_obj_t *self);
extern bool common_hal_rp2pio_statemachine_deinited(rp2pio_statemachine_obj_t *self);
// Writes out the given data.
extern bool common_hal_rp2pio_statemachine_write(rp2pio_statemachine_obj_t *self, const uint8_t *data, size_t len);
// // Reads in len bytes while outputting zeroes.
// extern bool common_hal_rp2pio_statemachine_read(rp2pio_statemachine_obj_t *self, uint8_t *data, size_t len, uint8_t write_value);
// // Reads and write len bytes simultaneously.
// extern bool common_hal_rp2pio_statemachine_transfer(rp2pio_statemachine_obj_t *self,
// const uint8_t *data_out, size_t out_len,
// uint8_t *data_in, size_t in_len);
// Return actual SPI bus frequency.
uint32_t common_hal_rp2pio_statemachine_get_frequency(rp2pio_statemachine_obj_t* self);
// This is used by the supervisor to claim SPI devices indefinitely.
// extern void common_hal_rp2pio_statemachine_never_reset(rp2pio_statemachine_obj_t *self);
#endif // MICROPY_INCLUDED_RASPBERRYPI_BINDINGS_RP2PIO_STATEMACHINE_H

View File

@ -0,0 +1,45 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "py/obj.h"
#include "py/runtime.h"
#include "bindings/rp2pio/StateMachine.h"
//| """Hardware interface to RP2 series' programmable IO (PIO) peripheral."""
//|
STATIC const mp_rom_map_elem_t rp2pio_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_rp2pio) },
{ MP_ROM_QSTR(MP_QSTR_StateMachine), MP_ROM_PTR(&rp2pio_statemachine_type) },
};
STATIC MP_DEFINE_CONST_DICT(rp2pio_module_globals, rp2pio_module_globals_table);
const mp_obj_module_t rp2pio_module = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t*)&rp2pio_module_globals,
};

View File

@ -0,0 +1,44 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "supervisor/board.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "src/rp2_common/hardware_gpio/include/hardware/gpio.h"
void board_init(void) {
common_hal_never_reset_pin(&pin_GPIO17);
gpio_init(17);
gpio_set_dir(17, GPIO_OUT);
gpio_put(17, true);
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}

View File

@ -0,0 +1,14 @@
#define MICROPY_HW_BOARD_NAME "Adafruit Feather RP2040"
#define MICROPY_HW_MCU_NAME "rp2040"
#define MICROPY_HW_NEOPIXEL (&pin_GPIO16)
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO3)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO2)
#define DEFAULT_SPI_BUS_SCK (&pin_GPIO18)
#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO19)
#define DEFAULT_SPI_BUS_MISO (&pin_GPIO20)
// #define DEFAULT_UART_BUS_RX (&pin_PA11)
// #define DEFAULT_UART_BUS_TX (&pin_PA10)

View File

@ -0,0 +1,9 @@
USB_VID = 0x239A
USB_PID = 0x80F2
USB_PRODUCT = "Feather RP2040"
USB_MANUFACTURER = "Adafruit"
CHIP_VARIANT = RP2040
CHIP_FAMILY = rp2
INTERNAL_FLASH_FILESYSTEM = 1

View File

@ -0,0 +1,36 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29) },
{ MP_ROM_QSTR(MP_QSTR_D24), MP_ROM_PTR(&pin_GPIO24) },
{ MP_ROM_QSTR(MP_QSTR_D25), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
// { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -0,0 +1,38 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "supervisor/board.h"
void board_init(void)
{
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}

View File

@ -0,0 +1,15 @@
// LEDs
// #define MICROPY_HW_LED_STATUS (&pin_PA17)
#define MICROPY_HW_BOARD_NAME "Raspberry Pi Pico"
#define MICROPY_HW_MCU_NAME "rp2040"
// #define DEFAULT_I2C_BUS_SCL (&pin_PA23)
// #define DEFAULT_I2C_BUS_SDA (&pin_PA22)
// #define DEFAULT_SPI_BUS_SCK (&pin_PB11)
// #define DEFAULT_SPI_BUS_MOSI (&pin_PB10)
// #define DEFAULT_SPI_BUS_MISO (&pin_PA12)
// #define DEFAULT_UART_BUS_RX (&pin_PA11)
// #define DEFAULT_UART_BUS_TX (&pin_PA10)

View File

@ -0,0 +1,9 @@
USB_VID = 0x239A
USB_PID = 0x80F4
USB_PRODUCT = "Pico"
USB_MANUFACTURER = "Raspberry Pi"
CHIP_VARIANT = RP2040
CHIP_FAMILY = rp2
INTERNAL_FLASH_FILESYSTEM = 1

View File

@ -0,0 +1,39 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_GP0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_GP1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_GP2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_GP3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_GP4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_GP5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_GP6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_GP7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_GP8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_GP9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_GP10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_GP11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_GP12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_GP13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_GP14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_GP15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_GP20), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_GP21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_GP22), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_GP25), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_GP26_A0), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_GP27_A1), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_GP28_A2), MP_ROM_PTR(&pin_GPIO28) },
{ MP_ROM_QSTR(MP_QSTR_GP28), MP_ROM_PTR(&pin_GPIO28) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -0,0 +1,20 @@
// Padded and checksummed version of: /Users/graham/dev/mu/pico_sdk/cmake-build-debug-mu/src/rp2_common/boot_stage2/bs2_default.bin
.section .boot2, "a"
.byte 0x00, 0xb5, 0x2f, 0x4b, 0x21, 0x20, 0x58, 0x60, 0x98, 0x68, 0x02, 0x21, 0x88, 0x43, 0x98, 0x60
.byte 0xd8, 0x60, 0x18, 0x61, 0x58, 0x61, 0x2b, 0x4b, 0x00, 0x21, 0x99, 0x60, 0x02, 0x21, 0x59, 0x61
.byte 0x01, 0x21, 0xf0, 0x22, 0x99, 0x50, 0x28, 0x49, 0x19, 0x60, 0x01, 0x21, 0x99, 0x60, 0x35, 0x20
.byte 0x00, 0xf0, 0x3e, 0xf8, 0x02, 0x22, 0x90, 0x42, 0x14, 0xd0, 0x06, 0x21, 0x19, 0x66, 0x00, 0xf0
.byte 0x2e, 0xf8, 0x19, 0x6e, 0x01, 0x21, 0x19, 0x66, 0x00, 0x20, 0x18, 0x66, 0x1a, 0x66, 0x00, 0xf0
.byte 0x26, 0xf8, 0x19, 0x6e, 0x19, 0x6e, 0x19, 0x6e, 0x05, 0x20, 0x00, 0xf0, 0x29, 0xf8, 0x01, 0x21
.byte 0x08, 0x42, 0xf9, 0xd1, 0x00, 0x21, 0x99, 0x60, 0x18, 0x49, 0x19, 0x60, 0x00, 0x21, 0x59, 0x60
.byte 0x17, 0x49, 0x18, 0x48, 0x01, 0x60, 0x01, 0x21, 0x99, 0x60, 0xeb, 0x21, 0x19, 0x66, 0xa0, 0x21
.byte 0x19, 0x66, 0x00, 0xf0, 0x0c, 0xf8, 0x00, 0x21, 0x99, 0x60, 0x13, 0x49, 0x11, 0x48, 0x01, 0x60
.byte 0x01, 0x21, 0x99, 0x60, 0x01, 0xbc, 0x00, 0x28, 0x00, 0xd1, 0x10, 0x48, 0x00, 0x47, 0x03, 0xb5
.byte 0x99, 0x6a, 0x04, 0x20, 0x01, 0x42, 0xfb, 0xd0, 0x01, 0x20, 0x01, 0x42, 0xf8, 0xd1, 0x03, 0xbd
.byte 0x02, 0xb5, 0x18, 0x66, 0x18, 0x66, 0xff, 0xf7, 0xf2, 0xff, 0x18, 0x6e, 0x18, 0x6e, 0x02, 0xbd
.byte 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x5f, 0x00
.byte 0x21, 0x22, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x18, 0x22, 0x20, 0x00, 0xa0, 0x01, 0x01, 0x00, 0x10
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x27, 0x2a, 0x60

View File

@ -0,0 +1,73 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "common-hal/analogio/AnalogIn.h"
#include "py/runtime.h"
#include "supervisor/shared/translate.h"
#include "src/rp2_common/hardware_adc/include/hardware/adc.h"
#define ADC_FIRST_PIN_NUMBER 26
#define ADC_PIN_COUNT 4
void common_hal_analogio_analogin_construct(analogio_analogin_obj_t *self, const mcu_pin_obj_t *pin) {
if (pin->number < ADC_FIRST_PIN_NUMBER || pin->number > ADC_FIRST_PIN_NUMBER + ADC_PIN_COUNT) {
mp_raise_ValueError(translate("Pin does not have ADC capabilities"));
}
adc_init();
adc_gpio_init(pin->number);
claim_pin(pin);
self->pin = pin;
}
bool common_hal_analogio_analogin_deinited(analogio_analogin_obj_t *self) {
return self->pin == NULL;
}
void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
if (common_hal_analogio_analogin_deinited(self)) {
return;
}
reset_pin_number(self->pin->number);
self->pin = NULL;
}
uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
adc_select_input(self->pin->number - ADC_FIRST_PIN_NUMBER);
uint16_t value = adc_read();
// Map value to from 12 to 16 bits
return (value << 4);
}
float common_hal_analogio_analogin_get_reference_voltage(analogio_analogin_obj_t *self) {
// The nominal VCC voltage
return 3.3f;
}

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