Merge remote-tracking branch 'adafruit/main' into cp-flow
This commit is contained in:
commit
e285b5b98c
5
.github/workflows/build.yml
vendored
5
.github/workflows/build.yml
vendored
@ -177,6 +177,7 @@ jobs:
|
||||
- "8086_commander"
|
||||
- "ADM_B_NRF52840_1"
|
||||
- "TG-Watch"
|
||||
- "adafruit_feather_rp2040"
|
||||
- "aloriumtech_evo_m51"
|
||||
- "aramcon_badge_2019"
|
||||
- "arduino_mkr1300"
|
||||
@ -294,6 +295,7 @@ jobs:
|
||||
- "pyruler"
|
||||
- "qtpy_m0"
|
||||
- "qtpy_m0_haxpress"
|
||||
- "raspberry_pi_pico"
|
||||
- "raytac_mdbt50q-db-40"
|
||||
- "robohatmm1_m4"
|
||||
- "sam32"
|
||||
@ -315,6 +317,7 @@ jobs:
|
||||
- "spresense"
|
||||
- "stackrduino_m0_pro"
|
||||
- "stm32f411ce_blackpill"
|
||||
- "stm32f411ce_blackpill_with_flash"
|
||||
- "stm32f411ve_discovery"
|
||||
- "stm32f412zg_discovery"
|
||||
- "stm32f4_discovery"
|
||||
@ -464,7 +467,7 @@ jobs:
|
||||
id: idf-cache
|
||||
with:
|
||||
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
|
||||
run: |
|
||||
(cd $IDF_PATH && git submodule update --init)
|
||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -171,3 +171,6 @@
|
||||
[submodule "frozen/Adafruit_CircuitPython_LC709203F"]
|
||||
path = frozen/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
|
||||
|
1
Makefile
1
Makefile
@ -255,6 +255,7 @@ stubs:
|
||||
@$(PYTHON) tools/extract_pyi.py shared-bindings/ $(STUBDIR)
|
||||
@$(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/raspberrypi/bindings $(STUBDIR)
|
||||
@$(PYTHON) setup.py -q sdist
|
||||
|
||||
.PHONY: check-stubs
|
||||
|
@ -125,7 +125,7 @@ Behavior
|
||||
get back into normal mode.
|
||||
- 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
|
||||
``samd.disable_autoreload()``)
|
||||
``supervisor.disable_autoreload()``)
|
||||
- Entering the REPL after the main code is finished requires a key press which enters the REPL and
|
||||
disables autoreload.
|
||||
- Main is one of these: ``code.txt``, ``code.py``, ``main.py``,
|
||||
|
1
conf.py
1
conf.py
@ -189,6 +189,7 @@ exclude_patterns = ["**/build*",
|
||||
"ports/nrf/nrfx",
|
||||
"ports/nrf/peripherals",
|
||||
"ports/nrf/usb",
|
||||
"ports/raspberrypi/sdk",
|
||||
"ports/stm/st_driver",
|
||||
"ports/stm/packages",
|
||||
"ports/stm/peripherals",
|
||||
|
@ -520,7 +520,9 @@ properties.
|
||||
+-----------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| ``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 |
|
||||
+-----------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
|
@ -1,9 +1,7 @@
|
||||
:mod:`uerrno` -- system error codes
|
||||
:mod:`errno` -- system error codes
|
||||
===================================
|
||||
|
||||
.. include:: ../templates/unsupported_in_circuitpython.inc
|
||||
|
||||
.. module:: uerrno
|
||||
.. module:: errno
|
||||
:synopsis: system error codes
|
||||
|
||||
|see_cpython_module| :mod:`cpython:errno`.
|
||||
@ -22,7 +20,7 @@ Constants
|
||||
try:
|
||||
os.mkdir("my_dir")
|
||||
except OSError as exc:
|
||||
if exc.args[0] == uerrno.EEXIST:
|
||||
if exc.args[0] == errno.EEXIST:
|
||||
print("Directory already exists")
|
||||
|
||||
.. data:: errorcode
|
||||
@ -30,5 +28,5 @@ Constants
|
||||
Dictionary mapping numeric error codes to strings with symbolic error
|
||||
code (see above)::
|
||||
|
||||
>>> print(uerrno.errorcode[uerrno.EEXIST])
|
||||
>>> print(errno.errorcode[uerrno.EEXIST])
|
||||
EEXIST
|
@ -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.
|
@ -6,35 +6,21 @@ MicroPython libraries
|
||||
Python standard libraries and micro-libraries
|
||||
---------------------------------------------
|
||||
|
||||
These libraries are inherited from MicroPython.
|
||||
They are similar to the standard Python libraries with the same name
|
||||
or with the "u" prefix dropped.
|
||||
The libraries below are inherited from MicroPython.
|
||||
They are similar to the standard Python libraries with the same name.
|
||||
They implement a subset of or a variant of the corresponding
|
||||
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
|
||||
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:
|
||||
``uerrno``, ``ure``.
|
||||
``binascii``, ``errno``, ``json``, ``re``.
|
||||
|
||||
Some libraries are not currently enabled in any CircuitPython build, but may be in the future:
|
||||
``uio``, ``ujson``, ``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.
|
||||
These libraries are not currently enabled in any CircuitPython build, but may be in the future,
|
||||
with the ``u`` prefix dropped:
|
||||
``uctypes``, ``uhashlib``, ``uzlib``.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
@ -44,13 +30,14 @@ Not all of these are enabled on all WiFi-capable ports.
|
||||
array.rst
|
||||
binascii.rst
|
||||
collections.rst
|
||||
errno.rst
|
||||
gc.rst
|
||||
hashlib.rst
|
||||
io.rst
|
||||
json.rst
|
||||
re.rst
|
||||
sys.rst
|
||||
uerrno.rst
|
||||
uio.rst
|
||||
ujson.rst
|
||||
ure.rst
|
||||
uctypes.rst
|
||||
uselect.rst
|
||||
usocket.rst
|
||||
ussl.rst
|
||||
@ -59,8 +46,8 @@ Not all of these are enabled on all WiFi-capable ports.
|
||||
Omitted functions in the ``string`` library
|
||||
-------------------------------------------
|
||||
|
||||
A few string operations are not enabled on CircuitPython
|
||||
M0 non-Express builds, due to limited flash memory:
|
||||
A few string operations are not enabled on small builds
|
||||
(usually non-Express), due to limited flash memory:
|
||||
``string.center()``, ``string.partition()``, ``string.splitlines()``,
|
||||
``string.reversed()``.
|
||||
|
||||
@ -78,15 +65,3 @@ versions of CircuitPython.
|
||||
btree.rst
|
||||
framebuf.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
|
||||
|
@ -1,9 +1,7 @@
|
||||
:mod:`uio` -- input/output streams
|
||||
:mod:`io` -- input/output streams
|
||||
==================================
|
||||
|
||||
.. include:: ../templates/unsupported_in_circuitpython.inc
|
||||
|
||||
.. module:: uio
|
||||
.. module:: io
|
||||
:synopsis: input/output streams
|
||||
|
||||
|see_cpython_module| :mod:`cpython:io`.
|
@ -1,9 +1,7 @@
|
||||
:mod:`ujson` -- JSON encoding and decoding
|
||||
:mod:`json` -- JSON encoding and decoding
|
||||
==========================================
|
||||
|
||||
.. include:: ../templates/unsupported_in_circuitpython.inc
|
||||
|
||||
.. module:: ujson
|
||||
.. module:: json
|
||||
:synopsis: JSON encoding and decoding
|
||||
|
||||
|see_cpython_module| :mod:`cpython:json`.
|
@ -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
|
||||
============= ===========
|
@ -1,9 +1,7 @@
|
||||
:mod:`ure` -- simple regular expressions
|
||||
:mod:`re` -- simple regular expressions
|
||||
========================================
|
||||
|
||||
.. include:: ../templates/unsupported_in_circuitpython.inc
|
||||
|
||||
.. module:: ure
|
||||
.. module:: re
|
||||
:synopsis: regular expressions
|
||||
|
||||
|see_cpython_module| :mod:`cpython:re`.
|
||||
@ -77,7 +75,7 @@ Regex objects
|
||||
-------------
|
||||
|
||||
Compiled regular expression. Instances of this class are created using
|
||||
`ure.compile()`.
|
||||
`re.compile()`.
|
||||
|
||||
.. method:: regex.match(string)
|
||||
regex.search(string)
|
@ -30,7 +30,7 @@ import sys
|
||||
|
||||
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():
|
||||
""" 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
|
||||
"""
|
||||
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():
|
||||
|
@ -13,8 +13,9 @@ is limited.
|
||||
|
||||
../ports/atmel-samd/README
|
||||
../ports/cxd56/README
|
||||
../ports/esp32s2/README
|
||||
../ports/litex/README
|
||||
../ports/mimxrt10xx/README
|
||||
../ports/nrf/README
|
||||
../ports/raspberrypi/README
|
||||
../ports/stm/README
|
||||
../ports/esp32s2/README
|
||||
|
@ -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) {
|
||||
const char *path = mp_obj_str_get_str(path_in);
|
||||
const char *p_out;
|
||||
*path_out = mp_const_none;
|
||||
mp_vfs_mount_t *vfs = mp_vfs_lookup_path(path, &p_out);
|
||||
if (vfs != MP_VFS_NONE && vfs != MP_VFS_ROOT) {
|
||||
*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_);
|
||||
}
|
||||
|
||||
mp_obj_t path_out;
|
||||
mp_obj_t path_out = mp_const_none;
|
||||
mp_vfs_mount_t *vfs = lookup_path(path_in, &path_out);
|
||||
|
||||
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_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);
|
||||
if (vfs == MP_VFS_ROOT || (vfs != MP_VFS_NONE && !strcmp(mp_obj_str_get_str(path_out), "/"))) {
|
||||
mp_raise_OSError(MP_EEXIST);
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 902c16f49197a8baf5e71ec924a812a86e733a74
|
||||
Subproject commit 5e925cea7a55273e375a6129761cb29b4e750d4f
|
@ -1 +1 @@
|
||||
Subproject commit cfcffe94ce62f5ef1fb5aef4641924d64dc4b1c0
|
||||
Subproject commit 045674745afa59028fbeed6dac5cb5a9c4a6033e
|
105
locale/ID.po
105
locale/ID.po
@ -6,7 +6,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
|
||||
"PO-Revision-Date: 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"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: ID\n"
|
||||
@ -14,7 +14,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.4.1-dev\n"
|
||||
"X-Generator: Weblate 4.5-dev\n"
|
||||
|
||||
#: main.c
|
||||
msgid ""
|
||||
@ -48,6 +48,10 @@ msgstr " File \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " File \"%q\", baris %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr "output:\n"
|
||||
@ -869,6 +873,10 @@ msgstr "Channel EXTINT sedang digunakan"
|
||||
msgid "Error in 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1261,10 +1269,18 @@ msgstr "security_mode tidak valid"
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr "Suara tidak valid"
|
||||
@ -1281,6 +1297,10 @@ msgstr "File wave tidak valid"
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr "Panjang kata/bit tidak valid"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr "Panjang kunci harus 16, 24, atau 32 byte"
|
||||
@ -1569,7 +1589,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -2054,38 +2074,41 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
#, c-format
|
||||
msgid "Unknown gatt error: 0x%04x"
|
||||
msgstr ""
|
||||
msgstr "Kesalahan gatt tidak dikenal: 0x%04x"
|
||||
|
||||
#: supervisor/shared/safe_mode.c
|
||||
msgid "Unknown reason."
|
||||
msgstr ""
|
||||
msgstr "Alasan yang tidak diketahui."
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
#, c-format
|
||||
msgid "Unknown security error: 0x%04x"
|
||||
msgstr ""
|
||||
msgstr "Kesalahan keamanan tidak dikenal: 0x%04x"
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
#, c-format
|
||||
msgid "Unknown soft device error: %04x"
|
||||
msgstr ""
|
||||
msgstr "Kesalahan perangkat lunak tidak dikenal: %04x"
|
||||
|
||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
||||
#, c-format
|
||||
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
|
||||
msgid ""
|
||||
"Unspecified issue. Can be that the pairing prompt on the other device was "
|
||||
"declined or ignored."
|
||||
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/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
|
||||
msgid "Unsupported format"
|
||||
msgstr ""
|
||||
msgstr "Format tidak didukung"
|
||||
|
||||
#: py/moduerrno.c
|
||||
msgid "Unsupported operation"
|
||||
msgstr ""
|
||||
msgstr "Operasi yang tidak didukung"
|
||||
|
||||
#: shared-bindings/digitalio/DigitalInOut.c
|
||||
msgid "Unsupported pull value."
|
||||
msgstr ""
|
||||
msgstr "Nilai tarikan yang tidak didukung."
|
||||
|
||||
#: ports/esp32s2/common-hal/dualbank/__init__.c
|
||||
msgid "Update Failed"
|
||||
@ -2116,12 +2139,12 @@ msgstr ""
|
||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||
#: ports/nrf/common-hal/_bleio/Descriptor.c
|
||||
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/Descriptor.c
|
||||
msgid "Value length > max_length"
|
||||
msgstr ""
|
||||
msgstr "Panjang nilai > max_length"
|
||||
|
||||
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
|
||||
msgid "Version was invalid"
|
||||
@ -2129,11 +2152,11 @@ msgstr ""
|
||||
|
||||
#: py/emitnative.c
|
||||
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
|
||||
msgid "Voltage read timed out"
|
||||
msgstr ""
|
||||
msgstr "Tegangan baca habis waktu"
|
||||
|
||||
#: main.c
|
||||
msgid "WARNING: Your code filename has two extensions\n"
|
||||
@ -2185,11 +2208,11 @@ msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/PacketBuffer.c
|
||||
msgid "Writes not supported on Characteristic"
|
||||
msgstr ""
|
||||
msgstr "Menulis tidak didukung pada Karakteristik"
|
||||
|
||||
#: supervisor/shared/safe_mode.c
|
||||
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
|
||||
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
|
||||
msgid "__init__() should return None"
|
||||
msgstr ""
|
||||
msgstr "__init __() harus mengembalikan None"
|
||||
|
||||
#: py/objtype.c
|
||||
msgid "__init__() should return None, not '%q'"
|
||||
@ -2205,7 +2228,7 @@ msgstr ""
|
||||
|
||||
#: py/objobject.c
|
||||
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
|
||||
msgid "a bytes-like object is required"
|
||||
@ -2222,19 +2245,19 @@ msgstr "alamat %08x tidak selaras dengan %d bytes"
|
||||
|
||||
#: shared-bindings/i2cperipheral/I2CPeripheral.c
|
||||
msgid "address out of bounds"
|
||||
msgstr ""
|
||||
msgstr "alamat di luar batas"
|
||||
|
||||
#: shared-bindings/i2cperipheral/I2CPeripheral.c
|
||||
msgid "addresses is empty"
|
||||
msgstr ""
|
||||
msgstr "alamatnya kosong"
|
||||
|
||||
#: py/modbuiltins.c
|
||||
msgid "arg is an empty sequence"
|
||||
msgstr ""
|
||||
msgstr "arg berisi urutan kosong"
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
msgid "argsort argument must be an ndarray"
|
||||
msgstr ""
|
||||
msgstr "Argumen argsort harus berupa ndarray"
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
msgid "argsort is not implemented for flattened arrays"
|
||||
@ -2242,7 +2265,7 @@ msgstr ""
|
||||
|
||||
#: py/runtime.c
|
||||
msgid "argument has wrong type"
|
||||
msgstr ""
|
||||
msgstr "argumen memiliki tipe yang salah"
|
||||
|
||||
#: extmod/ulab/code/linalg/linalg.c
|
||||
msgid "argument must be ndarray"
|
||||
@ -2255,11 +2278,11 @@ msgstr "argumen num/types tidak cocok"
|
||||
|
||||
#: py/runtime.c
|
||||
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
|
||||
msgid "arguments must be ndarrays"
|
||||
msgstr ""
|
||||
msgstr "argumen harus berupa ndarrays"
|
||||
|
||||
#: extmod/ulab/code/ndarray.c
|
||||
msgid "array and index length must be equal"
|
||||
@ -2268,7 +2291,7 @@ msgstr ""
|
||||
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
|
||||
#: shared-bindings/nvm/ByteArray.c
|
||||
msgid "array/bytes required on right side"
|
||||
msgstr ""
|
||||
msgstr "diperlukan array/byte di sisi kanan"
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
msgid "attempt to get (arg)min/(arg)max of empty sequence"
|
||||
@ -2276,11 +2299,11 @@ msgstr ""
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
msgid "attempt to get argmin/argmax of an empty sequence"
|
||||
msgstr ""
|
||||
msgstr "berusaha mendapatkan argmin/argmax dari urutan kosong"
|
||||
|
||||
#: py/objstr.c
|
||||
msgid "attributes not supported yet"
|
||||
msgstr ""
|
||||
msgstr "atribut belum didukung"
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
msgid "axis is out of bounds"
|
||||
@ -2300,7 +2323,7 @@ msgstr "mode compile buruk"
|
||||
|
||||
#: py/objstr.c
|
||||
msgid "bad conversion specifier"
|
||||
msgstr ""
|
||||
msgstr "specifier salah konversi"
|
||||
|
||||
#: py/objstr.c
|
||||
msgid "bad format string"
|
||||
@ -2326,10 +2349,18 @@ msgstr ""
|
||||
msgid "branch not in range"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer is smaller than requested size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiocore/RawSample.c
|
||||
msgid "buffer must be a bytes-like object"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer size must be a multiple of element size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-module/struct/__init__.c
|
||||
#, fuzzy
|
||||
msgid "buffer size must match format"
|
||||
@ -3332,6 +3363,10 @@ msgstr ""
|
||||
msgid "number of points must be at least 2"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3388,6 +3423,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "offset out of bounds"
|
||||
@ -3944,6 +3983,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr ""
|
||||
|
@ -43,6 +43,10 @@ msgstr ""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr ""
|
||||
@ -54,7 +58,8 @@ msgstr ""
|
||||
|
||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||
#, 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 ""
|
||||
|
||||
#: ports/atmel-samd/common-hal/sdioio/SDCard.c
|
||||
@ -512,7 +517,6 @@ msgstr ""
|
||||
msgid "Buffer must be a multiple of 512 bytes"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/adafruit_bus_device/I2CDevice.c
|
||||
#: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c
|
||||
msgid "Buffer must be at least length 1"
|
||||
msgstr ""
|
||||
@ -527,6 +531,7 @@ msgid "Buffer too short by %d bytes"
|
||||
msgstr ""
|
||||
|
||||
#: ports/atmel-samd/common-hal/displayio/ParallelBus.c
|
||||
#: ports/esp32s2/common-hal/displayio/ParallelBus.c
|
||||
#: ports/nrf/common-hal/displayio/ParallelBus.c
|
||||
#, c-format
|
||||
msgid "Bus pin %d is already in use"
|
||||
@ -796,6 +801,10 @@ msgstr ""
|
||||
msgid "Data 0 pin must be byte aligned"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/displayio/ParallelBus.c
|
||||
msgid "Data 0 pin must be byte aligned."
|
||||
msgstr ""
|
||||
|
||||
#: shared-module/audiocore/WaveFile.c
|
||||
msgid "Data chunk must follow fmt chunk"
|
||||
msgstr ""
|
||||
@ -850,6 +859,10 @@ msgstr ""
|
||||
msgid "Error in regex"
|
||||
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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1240,10 +1253,18 @@ msgstr ""
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr ""
|
||||
@ -1260,6 +1281,10 @@ msgstr ""
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr ""
|
||||
@ -1542,7 +1567,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -1564,7 +1589,6 @@ msgid ""
|
||||
"PWM frequency not writable when variable_frequency is False on construction."
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/displayio/ParallelBus.c
|
||||
#: ports/mimxrt10xx/common-hal/displayio/ParallelBus.c
|
||||
#: ports/stm/common-hal/displayio/ParallelBus.c
|
||||
msgid "ParallelBus not yet supported"
|
||||
@ -3300,6 +3324,10 @@ msgstr ""
|
||||
msgid "number of points must be at least 2"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3694,6 +3722,10 @@ msgstr ""
|
||||
msgid "threshold must be in the range 0-65536"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||
msgid "tile must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/time/__init__.c
|
||||
msgid "time.struct_time() takes a 9-sequence"
|
||||
msgstr ""
|
||||
@ -3914,6 +3946,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr ""
|
||||
|
45
locale/cs.po
45
locale/cs.po
@ -46,6 +46,10 @@ msgstr " Soubor \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " Soubor \"%q\", řádek %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " výstup:\n"
|
||||
@ -853,6 +857,10 @@ msgstr ""
|
||||
msgid "Error in regex"
|
||||
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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1243,10 +1251,18 @@ msgstr ""
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr ""
|
||||
@ -1263,6 +1279,10 @@ msgstr ""
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr ""
|
||||
@ -1545,7 +1565,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -2016,7 +2036,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
@ -2281,10 +2302,18 @@ msgstr ""
|
||||
msgid "branch not in range"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer is smaller than requested size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiocore/RawSample.c
|
||||
msgid "buffer must be a bytes-like object"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer size must be a multiple of element size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-module/struct/__init__.c
|
||||
msgid "buffer size must match format"
|
||||
msgstr ""
|
||||
@ -3286,6 +3315,10 @@ msgstr ""
|
||||
msgid "number of points must be at least 2"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3342,6 +3375,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr ""
|
||||
@ -3896,6 +3933,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr ""
|
||||
|
@ -47,6 +47,10 @@ msgstr " Datei \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " Datei \"%q\", Zeile %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " Ausgabe:\n"
|
||||
@ -865,6 +869,10 @@ msgstr "EXTINT Kanal ist schon in Benutzung"
|
||||
msgid "Error 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1260,10 +1268,18 @@ msgstr "Ungültiger security_mode"
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr "Ungültige Stimme"
|
||||
@ -1280,6 +1296,10 @@ msgstr "Ungültige wave Datei"
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr "Ungültige Wort- / Bitlänge"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr "Der Schlüssel muss 16, 24 oder 32 Byte lang sein"
|
||||
@ -1570,7 +1590,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -2058,7 +2078,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
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
|
||||
msgid "buffer must be a bytes-like object"
|
||||
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
|
||||
msgid "buffer size must match format"
|
||||
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"
|
||||
msgstr "Die Anzahl der Punkte muss mindestens 2 betragen"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3419,6 +3452,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr "offset außerhalb der Grenzen"
|
||||
@ -3983,6 +4020,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr "Fenster muss <= Intervall sein"
|
||||
|
45
locale/el.po
45
locale/el.po
@ -43,6 +43,10 @@ msgstr ""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr ""
|
||||
@ -850,6 +854,10 @@ msgstr ""
|
||||
msgid "Error in regex"
|
||||
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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1240,10 +1248,18 @@ msgstr ""
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr ""
|
||||
@ -1260,6 +1276,10 @@ msgstr ""
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr ""
|
||||
@ -1542,7 +1562,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -2013,7 +2033,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
@ -2278,10 +2299,18 @@ msgstr ""
|
||||
msgid "branch not in range"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer is smaller than requested size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiocore/RawSample.c
|
||||
msgid "buffer must be a bytes-like object"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer size must be a multiple of element size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-module/struct/__init__.c
|
||||
msgid "buffer size must match format"
|
||||
msgstr ""
|
||||
@ -3283,6 +3312,10 @@ msgstr ""
|
||||
msgid "number of points must be at least 2"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3339,6 +3372,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr ""
|
||||
@ -3893,6 +3930,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr ""
|
||||
|
50
locale/es.po
50
locale/es.po
@ -48,6 +48,10 @@ msgstr " Archivo \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " Archivo \"%q\", línea %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " salida:\n"
|
||||
@ -868,6 +872,10 @@ msgstr "El canal EXTINT ya está siendo utilizado"
|
||||
msgid "Error in 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1261,10 +1269,18 @@ msgstr "'security_mode' no válido"
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr "Voz inválida"
|
||||
@ -1281,6 +1297,10 @@ msgstr "Archivo wave inválido"
|
||||
msgid "Invalid word/bit length"
|
||||
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
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr "La llave debe tener 16, 24 o 32 bytes de longitud"
|
||||
@ -1569,7 +1589,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
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"
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
msgstr "Fallo desconocido"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
#, c-format
|
||||
@ -2339,10 +2360,18 @@ msgstr "bits_per_sample debe ser 8 ó 16"
|
||||
msgid "branch not in range"
|
||||
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
|
||||
msgid "buffer must be a bytes-like object"
|
||||
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
|
||||
msgid "buffer size must match format"
|
||||
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"
|
||||
msgstr "el número de puntos debe ser al menos 2"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr "objeto '%q' no es tupla o lista"
|
||||
@ -3413,6 +3446,10 @@ msgstr "offset es demasiado grande"
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
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"
|
||||
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
|
||||
msgid "window must be <= interval"
|
||||
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)"
|
||||
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"
|
||||
#~ msgstr "el argumento de entrada debe ser un entero o una tupla de par"
|
||||
|
||||
|
@ -42,6 +42,10 @@ msgstr " File \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " File \"%q\", line %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " output:\n"
|
||||
@ -861,6 +865,10 @@ msgstr "Ginagamit na ang EXTINT channel"
|
||||
msgid "Error in 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1255,10 +1263,18 @@ msgstr ""
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr ""
|
||||
@ -1275,6 +1291,10 @@ msgstr "May hindi tama sa wave file"
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr ""
|
||||
@ -1560,7 +1580,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -2034,7 +2054,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr "branch wala sa range"
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer is smaller than requested size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiocore/RawSample.c
|
||||
msgid "buffer must be a 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
|
||||
#, fuzzy
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3386,6 +3419,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "offset out of bounds"
|
||||
@ -3946,6 +3983,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr ""
|
||||
|
56
locale/fr.po
56
locale/fr.po
@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: 0.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
|
||||
"PO-Revision-Date: 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"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.4.1-dev\n"
|
||||
"X-Generator: Weblate 4.5-dev\n"
|
||||
|
||||
#: main.c
|
||||
msgid ""
|
||||
@ -52,6 +52,10 @@ msgstr " Fichier \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " Fichier \"%q\", ligne %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " sortie :\n"
|
||||
@ -646,7 +650,7 @@ msgstr ""
|
||||
#: shared-bindings/digitalio/DigitalInOut.c
|
||||
msgid "Cannot set value when direction is input."
|
||||
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/mimxrt10xx/common-hal/busio/UART.c
|
||||
@ -882,6 +886,10 @@ msgstr "Canal EXTINT déjà utilisé"
|
||||
msgid "Error in regex"
|
||||
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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1277,10 +1285,18 @@ msgstr "'security_mode' invalide"
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr "État invalide"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr "Voix invalide"
|
||||
@ -1297,6 +1313,10 @@ msgstr "Fichier WAVE invalide"
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr "Longueur de mot / bit invalide"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr "La clé doit comporter 16, 24 ou 32 octets"
|
||||
@ -1585,7 +1605,7 @@ msgstr "Timeout de l'opération"
|
||||
msgid "Out of memory"
|
||||
msgstr "Hors de mémoire"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of 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"
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
msgstr "Echec inconnu"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr "Échec inconnu %d"
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
#, c-format
|
||||
@ -2363,10 +2384,18 @@ msgstr "'bits_per_sample' doivent être 8 ou 16"
|
||||
msgid "branch not in range"
|
||||
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
|
||||
msgid "buffer must be a bytes-like object"
|
||||
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
|
||||
msgid "buffer size must match 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"
|
||||
msgstr "le nombre de points doit être d'au moins 2"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or 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"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr "décalage hors limites"
|
||||
@ -4006,6 +4043,10 @@ msgstr "watchdog timeout doit être supérieur à 0"
|
||||
msgid "width must be greater than 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
|
||||
msgid "window must be <= 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)"
|
||||
msgstr "zi doit être de forme (n_section, 2)"
|
||||
|
||||
#~ msgid "Unknown failure"
|
||||
#~ msgstr "Echec inconnu"
|
||||
|
||||
#~ msgid "Only one alarm.touch alarm can be set."
|
||||
#~ msgstr "Seulement une alarme alarm.touch peut être réglée."
|
||||
|
||||
|
45
locale/hi.po
45
locale/hi.po
@ -43,6 +43,10 @@ msgstr ""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr ""
|
||||
@ -850,6 +854,10 @@ msgstr ""
|
||||
msgid "Error in regex"
|
||||
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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1240,10 +1248,18 @@ msgstr ""
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr ""
|
||||
@ -1260,6 +1276,10 @@ msgstr ""
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr ""
|
||||
@ -1542,7 +1562,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -2013,7 +2033,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
@ -2278,10 +2299,18 @@ msgstr ""
|
||||
msgid "branch not in range"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer is smaller than requested size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiocore/RawSample.c
|
||||
msgid "buffer must be a bytes-like object"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer size must be a multiple of element size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-module/struct/__init__.c
|
||||
msgid "buffer size must match format"
|
||||
msgstr ""
|
||||
@ -3283,6 +3312,10 @@ msgstr ""
|
||||
msgid "number of points must be at least 2"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3339,6 +3372,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr ""
|
||||
@ -3893,6 +3930,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr ""
|
||||
|
@ -42,6 +42,10 @@ msgstr " File \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " File \"%q\", riga %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " output:\n"
|
||||
@ -861,6 +865,10 @@ msgstr "Canale EXTINT già in uso"
|
||||
msgid "Error in 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1257,10 +1265,18 @@ msgstr ""
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr ""
|
||||
@ -1278,6 +1294,10 @@ msgstr "File wave non valido"
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr ""
|
||||
@ -1565,7 +1585,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -2046,7 +2066,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
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
|
||||
msgid "buffer must be a bytes-like object"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer size must be a multiple of element size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-module/struct/__init__.c
|
||||
#, fuzzy
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3392,6 +3425,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "offset out of bounds"
|
||||
@ -3954,6 +3991,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr ""
|
||||
|
45
locale/ja.po
45
locale/ja.po
@ -48,6 +48,10 @@ msgstr " ファイル \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " ファイル \"%q\", 行 %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " 出力:\n"
|
||||
@ -861,6 +865,10 @@ msgstr "EXTINTチャネルはすでに使用されています"
|
||||
msgid "Error in regex"
|
||||
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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1253,10 +1261,18 @@ msgstr "不正なsecurity_mode"
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr "不正なボイス"
|
||||
@ -1273,6 +1289,10 @@ msgstr "不正なwaveファイル"
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr "不正なワード/ビット長"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr "Keyの長さは、16, 24, 32バイトのいずれかでなければなりません"
|
||||
@ -1557,7 +1577,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -2036,7 +2056,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
@ -2301,10 +2322,18 @@ msgstr "bits_per_sampleは8または16でなければなりません"
|
||||
msgid "branch not in range"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer is smaller than requested size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiocore/RawSample.c
|
||||
msgid "buffer must be a bytes-like object"
|
||||
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
|
||||
msgid "buffer size must match format"
|
||||
msgstr ""
|
||||
@ -3311,6 +3340,10 @@ msgstr "書式化文字列への引数が足りません"
|
||||
msgid "number of points must be at least 2"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr "オブジェクト'%q'がタプルやリストでありません"
|
||||
@ -3367,6 +3400,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr ""
|
||||
@ -3924,6 +3961,10 @@ msgstr "watchdogのtimeoutは0以上でなければなりません"
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr "windowはinterval以下でなければなりません"
|
||||
|
45
locale/ko.po
45
locale/ko.po
@ -44,6 +44,10 @@ msgstr " 파일 \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " 파일 \"%q\", 라인 %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " 산출:\n"
|
||||
@ -853,6 +857,10 @@ msgstr ""
|
||||
msgid "Error in 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1243,10 +1251,18 @@ msgstr ""
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr ""
|
||||
@ -1263,6 +1279,10 @@ msgstr ""
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr ""
|
||||
@ -1545,7 +1565,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
msgstr ""
|
||||
|
||||
@ -2017,7 +2037,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
@ -2282,10 +2303,18 @@ msgstr "bits_per_sample은 8 또는 16이어야합니다."
|
||||
msgid "branch not in range"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer is smaller than requested size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiocore/RawSample.c
|
||||
msgid "buffer must be a bytes-like object"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer size must be a multiple of element size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-module/struct/__init__.c
|
||||
msgid "buffer size must match format"
|
||||
msgstr ""
|
||||
@ -3287,6 +3316,10 @@ msgstr ""
|
||||
msgid "number of points must be at least 2"
|
||||
msgstr ""
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3343,6 +3376,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr ""
|
||||
@ -3897,6 +3934,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr ""
|
||||
|
50
locale/nl.po
50
locale/nl.po
@ -46,6 +46,10 @@ msgstr " Bestand"
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " Bestand \"%q\", regel %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " uitvoer:\n"
|
||||
@ -861,6 +865,10 @@ msgstr "EXTINT kanaal al in gebruik"
|
||||
msgid "Error 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1254,10 +1262,18 @@ msgstr "Ongeldige security_mode"
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
msgid "Invalid voice"
|
||||
msgstr "Ongeldige stem"
|
||||
@ -1274,6 +1290,10 @@ msgstr "Ongeldig wave bestand"
|
||||
msgid "Invalid word/bit length"
|
||||
msgstr "Ongeldig woord/bit lengte"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Issue setting SO_REUSEADDR"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/aesio/aes.c
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
msgstr "Sleutel moet 16, 24, of 32 bytes lang zijn"
|
||||
@ -1562,7 +1582,7 @@ msgstr ""
|
||||
msgid "Out of memory"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
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"
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
msgstr "Onbekende fout"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
#, c-format
|
||||
@ -2331,10 +2352,18 @@ msgstr "bits_per_sample moet 8 of 16 zijn"
|
||||
msgid "branch not in range"
|
||||
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
|
||||
msgid "buffer must be a bytes-like object"
|
||||
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
|
||||
msgid "buffer size must match format"
|
||||
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"
|
||||
msgstr "aantal punten moet minimaal 2 zijn"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr "object '%q' is geen tuple of lijst"
|
||||
@ -3400,6 +3433,10 @@ msgstr "compensatie is te groot"
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr "offset buiten bereik"
|
||||
@ -3957,6 +3994,10 @@ msgstr "watchdog time-out moet groter zijn dan 0"
|
||||
msgid "width must be greater than zero"
|
||||
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
|
||||
msgid "window must be <= interval"
|
||||
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)"
|
||||
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"
|
||||
#~ msgstr "invoerargument moet een integer of 2-tuple zijn"
|
||||
|
||||
|
59
locale/pl.po
59
locale/pl.po
@ -7,7 +7,7 @@ msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"Language-Team: pl\n"
|
||||
"Language: pl\n"
|
||||
@ -16,7 +16,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.4-dev\n"
|
||||
"X-Generator: Weblate 4.5-dev\n"
|
||||
|
||||
#: main.c
|
||||
msgid ""
|
||||
@ -48,6 +48,10 @@ msgstr " Plik \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " Plik \"%q\", linia %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr ""
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " wyjście:\n"
|
||||
@ -770,7 +774,7 @@ msgstr "Nie można rozpocząć przerwania, RX jest zajęty"
|
||||
|
||||
#: shared-module/audiomp3/MP3Decoder.c
|
||||
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/audiomp3/MP3Decoder.c
|
||||
@ -861,6 +865,10 @@ msgstr "Kanał EXTINT w użyciu"
|
||||
msgid "Error in 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1070,7 +1078,7 @@ msgstr "Niewłaściwa wielkość bufora"
|
||||
|
||||
#: ports/esp32s2/common-hal/watchdog/WatchDogTimer.c
|
||||
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
|
||||
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
|
||||
msgid "Invalid size"
|
||||
msgstr "Nieprawidłowy rozmiar"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid socket for TLS"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
|
||||
msgid "Invalid state"
|
||||
msgstr "Nieprawidłowy stan"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Invalid use of TLS Socket"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiomixer/Mixer.c
|
||||
@ -1273,6 +1289,10 @@ msgstr "Zły plik wave"
|
||||
msgid "Invalid word/bit length"
|
||||
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
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
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
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
@ -1707,7 +1727,7 @@ msgstr "Obiekt tylko do odczytu"
|
||||
|
||||
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
|
||||
msgid "Received response was invalid"
|
||||
msgstr ""
|
||||
msgstr "Otrzymana odpowiedź była nieprawidłowa"
|
||||
|
||||
#: shared-bindings/displayio/EPaperDisplay.c
|
||||
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
|
||||
msgid "Requested resource not found"
|
||||
msgstr ""
|
||||
msgstr "Nie znaleziono żądanego zasobu"
|
||||
|
||||
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
|
||||
msgid "Right channel unsupported"
|
||||
@ -2027,7 +2047,8 @@ msgid "Unhandled ESP TLS error %d %d %x %d"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr "skok poza zakres"
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "buffer is smaller than requested size"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/audiocore/RawSample.c
|
||||
msgid "buffer must be a bytes-like object"
|
||||
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
|
||||
msgid "buffer size must match format"
|
||||
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"
|
||||
msgstr "liczba punktów musi wynosić co najmniej 2"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr ""
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
msgstr ""
|
||||
@ -3360,6 +3393,10 @@ msgstr ""
|
||||
msgid "offset must be >= 0"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr "offset poza zakresem"
|
||||
@ -3916,6 +3953,10 @@ msgstr ""
|
||||
msgid "width must be greater than zero"
|
||||
msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/wifi/Radio.c
|
||||
msgid "wifi is not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_bleio/Adapter.c
|
||||
msgid "window must be <= interval"
|
||||
msgstr ""
|
||||
|
@ -6,7 +6,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
|
||||
"PO-Revision-Date: 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"
|
||||
"Language-Team: \n"
|
||||
"Language: pt_BR\n"
|
||||
@ -14,7 +14,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.4.1-dev\n"
|
||||
"X-Generator: Weblate 4.5-dev\n"
|
||||
|
||||
#: main.c
|
||||
msgid ""
|
||||
@ -50,6 +50,10 @@ msgstr " Arquivo \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " Arquivo \"%q\", linha %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr " é do tipo %q\n"
|
||||
|
||||
#: main.c
|
||||
msgid " output:\n"
|
||||
msgstr " saída:\n"
|
||||
@ -877,6 +881,10 @@ msgstr "Canal EXTINT em uso"
|
||||
msgid "Error in 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -1270,10 +1278,18 @@ msgstr "O Security_mode é inválido"
|
||||
msgid "Invalid size"
|
||||
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
|
||||
msgid "Invalid state"
|
||||
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
|
||||
msgid "Invalid voice"
|
||||
msgstr "A voz é inválida"
|
||||
@ -1290,6 +1306,10 @@ msgstr "Aqruivo de ondas inválido"
|
||||
msgid "Invalid word/bit length"
|
||||
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
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
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"
|
||||
msgstr "Sem memória"
|
||||
|
||||
#: ports/esp32s2/common-hal/socketpool/SocketPool.c
|
||||
#: ports/esp32s2/common-hal/socketpool/Socket.c
|
||||
msgid "Out of sockets"
|
||||
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"
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
msgstr "Falha desconhecida"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr "Falha desconhecida %d"
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
#, c-format
|
||||
@ -2355,10 +2376,18 @@ msgstr "bits_per_sample deve ser 8 ou 16"
|
||||
msgid "branch not in range"
|
||||
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
|
||||
msgid "buffer must be a bytes-like object"
|
||||
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
|
||||
msgid "buffer size must match format"
|
||||
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"
|
||||
msgstr "a quantidade dos pontos deve ser pelo menos 2"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr "objeto "
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
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"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
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"
|
||||
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
|
||||
msgid "window must be <= interval"
|
||||
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)"
|
||||
msgstr "zi deve estar na forma (n_section, 2)"
|
||||
|
||||
#~ msgid "Unknown failure"
|
||||
#~ msgstr "Falha desconhecida"
|
||||
|
||||
#~ msgid "Only one alarm.touch alarm can be set."
|
||||
#~ msgstr "Apenas um alarme alarm.touch pode ser definido."
|
||||
|
||||
|
98
locale/sv.po
98
locale/sv.po
@ -6,7 +6,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
|
||||
"PO-Revision-Date: 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"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: sv\n"
|
||||
@ -14,7 +14,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.4.1-dev\n"
|
||||
"X-Generator: Weblate 4.5-dev\n"
|
||||
|
||||
#: main.c
|
||||
msgid ""
|
||||
@ -50,6 +50,10 @@ msgstr " Filen \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
msgstr " Fil \"%q\", rad %d"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid " is of type %q\n"
|
||||
msgstr " är av typen %q\n"
|
||||
|
||||
#: main.c
|
||||
msgid " output:\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
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
msgstr ""
|
||||
msgstr "%s fel 0x%x"
|
||||
|
||||
#: py/argcheck.c
|
||||
msgid "'%q' argument required"
|
||||
@ -289,7 +293,7 @@ msgstr "3-arguments pow() stöds inte"
|
||||
|
||||
#: shared-module/msgpack/__init__.c
|
||||
msgid "64 bit types"
|
||||
msgstr ""
|
||||
msgstr "64-bitars typer"
|
||||
|
||||
#: ports/atmel-samd/common-hal/countio/Counter.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
|
||||
msgid "CRC or checksum was invalid"
|
||||
msgstr ""
|
||||
msgstr "CRC eller checksumma var ogiltig"
|
||||
|
||||
#: py/objtype.c
|
||||
msgid "Call super().__init__() before accessing native object."
|
||||
@ -866,6 +870,10 @@ msgstr "EXTINT-kanalen används redan"
|
||||
msgid "Error in 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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.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
|
||||
msgid "Generic Failure"
|
||||
msgstr ""
|
||||
msgstr "Generiskt fel"
|
||||
|
||||
#: shared-bindings/displayio/Display.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
|
||||
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
|
||||
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
|
||||
msgid "Invalid voice"
|
||||
@ -1278,6 +1294,10 @@ msgstr "Ogiltig wave-fil"
|
||||
msgid "Invalid word/bit length"
|
||||
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
|
||||
msgid "Key must be 16, 24, or 32 bytes long"
|
||||
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
|
||||
msgid "MAC address was invalid"
|
||||
msgstr ""
|
||||
msgstr "MAC-adressen var ogiltig"
|
||||
|
||||
#: shared-module/bitbangio/SPI.c
|
||||
msgid "MISO pin init failed."
|
||||
@ -1540,7 +1560,7 @@ msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/alarm/touch/TouchAlarm.c
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "Operation timed out"
|
||||
msgstr ""
|
||||
msgstr "Åtgärden orsakade timeout"
|
||||
|
||||
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
|
||||
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"
|
||||
msgstr "Slut på sockets"
|
||||
|
||||
@ -1576,7 +1596,7 @@ msgstr "Översampling måste vara multipel av 8."
|
||||
|
||||
#: shared-bindings/audiobusio/PDMIn.c
|
||||
msgid "PDMIn not available"
|
||||
msgstr ""
|
||||
msgstr "PDMIn inte tillgänglig"
|
||||
|
||||
#: shared-bindings/pwmio/PWMOut.c
|
||||
msgid ""
|
||||
@ -1598,7 +1618,7 @@ msgstr "ParallelBus stöds ännu inte"
|
||||
|
||||
#: ports/esp32s2/common-hal/audiobusio/__init__.c
|
||||
msgid "Peripheral in use"
|
||||
msgstr ""
|
||||
msgstr "Periferi i bruk"
|
||||
|
||||
#: py/moduerrno.c
|
||||
msgid "Permission denied"
|
||||
@ -1728,7 +1748,7 @@ msgstr "Skrivskyddat objekt"
|
||||
|
||||
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
|
||||
msgid "Received response was invalid"
|
||||
msgstr ""
|
||||
msgstr "Mottaget svar var ogiltigt"
|
||||
|
||||
#: shared-bindings/displayio/EPaperDisplay.c
|
||||
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
|
||||
msgid "Requested resource not found"
|
||||
msgstr ""
|
||||
msgstr "Begärd resurs hittades inte"
|
||||
|
||||
#: ports/atmel-samd/common-hal/audioio/AudioOut.c
|
||||
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"
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
msgstr "Okänt fel"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr "Okänt fel %d"
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
#, c-format
|
||||
@ -2130,7 +2151,7 @@ msgstr "Värdets längd > max_length"
|
||||
|
||||
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
|
||||
msgid "Version was invalid"
|
||||
msgstr ""
|
||||
msgstr "Versionen var ogiltig"
|
||||
|
||||
#: py/emitnative.c
|
||||
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"
|
||||
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
|
||||
msgid "buffer must be a bytes-like object"
|
||||
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
|
||||
msgid "buffer size must match format"
|
||||
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
|
||||
msgid "code outside range 0~127"
|
||||
msgstr ""
|
||||
msgstr "kod utanför intervallet 0~127"
|
||||
|
||||
#: shared-bindings/displayio/Palette.c
|
||||
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
|
||||
msgid "default is not a function"
|
||||
msgstr ""
|
||||
msgstr "default är inte en funktion"
|
||||
|
||||
#: shared-bindings/audiobusio/PDMIn.c
|
||||
msgid ""
|
||||
@ -2738,7 +2767,7 @@ msgstr "förväntar nyckel:värde för dict"
|
||||
|
||||
#: shared-bindings/msgpack/__init__.c
|
||||
msgid "ext_hook is not a function"
|
||||
msgstr ""
|
||||
msgstr "ext_hook är inte en funktion"
|
||||
|
||||
#: py/argcheck.c
|
||||
msgid "extra keyword arguments given"
|
||||
@ -3277,7 +3306,7 @@ msgstr "ingen bindning för ickelokal hittad"
|
||||
|
||||
#: shared-module/msgpack/__init__.c
|
||||
msgid "no default packer"
|
||||
msgstr ""
|
||||
msgstr "ingen standardpackare"
|
||||
|
||||
#: py/builtinimport.c
|
||||
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"
|
||||
msgstr "antal punkter måste vara minst 2"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr "objekt "
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or 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"
|
||||
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
|
||||
msgid "offset out of bounds"
|
||||
msgstr "offset utanför gränserna"
|
||||
@ -3619,7 +3656,7 @@ msgstr "shape måste vara en tuple"
|
||||
|
||||
#: shared-module/msgpack/__init__.c
|
||||
msgid "short read"
|
||||
msgstr ""
|
||||
msgstr "kort läsning"
|
||||
|
||||
#: py/objstr.c
|
||||
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"
|
||||
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
|
||||
msgid "window must be <= 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
|
||||
msgid "xTaskCreate failed"
|
||||
msgstr ""
|
||||
msgstr "xTaskCreate misslyckades"
|
||||
|
||||
#: shared-bindings/displayio/Shape.c
|
||||
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)"
|
||||
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."
|
||||
#~ msgstr "Endast ett larm av typ alarm.touch kan ställas in."
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgstr ""
|
||||
"Project-Id-Version: circuitpython-cn\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
|
||||
"PO-Revision-Date: 2020-11-19 01:28+0000\n"
|
||||
"PO-Revision-Date: 2021-01-25 19:32+0000\n"
|
||||
"Last-Translator: hexthat <hexthat@gmail.com>\n"
|
||||
"Language-Team: Chinese Hanyu Pinyin\n"
|
||||
"Language: zh_Latn_pinyin\n"
|
||||
@ -15,19 +15,23 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.4-dev\n"
|
||||
"X-Generator: Weblate 4.5-dev\n"
|
||||
|
||||
#: main.c
|
||||
msgid ""
|
||||
"\n"
|
||||
"Code done running.\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Dàimǎ yùnxíng wánbì.\n"
|
||||
|
||||
#: main.c
|
||||
msgid ""
|
||||
"\n"
|
||||
"Code stopped by auto-reload.\n"
|
||||
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
|
||||
msgid ""
|
||||
@ -47,6 +51,10 @@ msgstr " Wénjiàn \"%q\""
|
||||
msgid " File \"%q\", line %d"
|
||||
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
|
||||
msgid " output:\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
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
msgstr ""
|
||||
msgstr "%s cuò wù 0x%x"
|
||||
|
||||
#: py/argcheck.c
|
||||
msgid "'%q' argument required"
|
||||
@ -287,7 +295,7 @@ msgstr "bù zhīchí 3-arg pow ()"
|
||||
|
||||
#: shared-module/msgpack/__init__.c
|
||||
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/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
|
||||
msgid "CRC or checksum was invalid"
|
||||
msgstr ""
|
||||
msgstr "CRC huò jiào yàn hé wú xiào"
|
||||
|
||||
#: py/objtype.c
|
||||
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
|
||||
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
|
||||
msgid "Can only alarm on one low pin while others alarm high from deep sleep."
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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"
|
||||
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
|
||||
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
|
||||
#: shared-bindings/neopixel_write/__init__.c
|
||||
@ -894,7 +908,7 @@ msgstr "Qídài yīgè dìzhǐ"
|
||||
|
||||
#: shared-bindings/alarm/__init__.c
|
||||
msgid "Expected an alarm"
|
||||
msgstr ""
|
||||
msgstr "yù qī yǒu jǐng bào"
|
||||
|
||||
#: shared-module/_pixelbuf/PixelBuf.c
|
||||
#, c-format
|
||||
@ -911,7 +925,7 @@ msgstr "FFT jǐn wéi ndarrays dìng yì"
|
||||
|
||||
#: extmod/ulab/code/fft/fft.c
|
||||
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
|
||||
msgid "Failed SSL handshake"
|
||||
@ -985,7 +999,7 @@ msgstr "guò lǜ qì tài fù zá"
|
||||
|
||||
#: ports/esp32s2/common-hal/dualbank/__init__.c
|
||||
msgid "Firmware image is invalid"
|
||||
msgstr ""
|
||||
msgstr "gù jiàn yìng xiàng wú xiào"
|
||||
|
||||
#: ports/cxd56/common-hal/camera/Camera.c
|
||||
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
|
||||
msgid "Generic Failure"
|
||||
msgstr ""
|
||||
msgstr "tōng yòng gù zhàng"
|
||||
|
||||
#: shared-bindings/displayio/Display.c
|
||||
#: shared-bindings/displayio/EPaperDisplay.c
|
||||
@ -1047,7 +1061,7 @@ msgstr "I2SOut bù kě yòng"
|
||||
|
||||
#: ports/esp32s2/common-hal/alarm/pin/__init__.c
|
||||
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
|
||||
#, c-format
|
||||
@ -1135,7 +1149,7 @@ msgstr "Wúxiào de PWM pínlǜ"
|
||||
|
||||
#: ports/esp32s2/common-hal/analogio/AnalogIn.c
|
||||
msgid "Invalid Pin"
|
||||
msgstr ""
|
||||
msgstr "wú xiào yǐn jiǎo"
|
||||
|
||||
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.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
|
||||
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
|
||||
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
|
||||
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"
|
||||
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
|
||||
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"
|
||||
@ -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
|
||||
msgid "MAC address was invalid"
|
||||
msgstr ""
|
||||
msgstr "MAC dì zhǐ wú xiào"
|
||||
|
||||
#: shared-module/bitbangio/SPI.c
|
||||
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
|
||||
msgid "NVS Error"
|
||||
msgstr ""
|
||||
msgstr "NVS cuò wù"
|
||||
|
||||
#: py/parse.c
|
||||
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
|
||||
#, c-format
|
||||
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/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
|
||||
msgid "Only IPv4 sockets supported"
|
||||
msgstr ""
|
||||
msgstr "jǐn zhī chí IPv4 tào jiē zì"
|
||||
|
||||
#: shared-module/displayio/OnDiskBitmap.c
|
||||
#, c-format
|
||||
@ -1532,11 +1558,11 @@ msgstr ""
|
||||
|
||||
#: ports/esp32s2/common-hal/alarm/touch/TouchAlarm.c
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "Operation timed out"
|
||||
msgstr ""
|
||||
msgstr "cāo zuò yǐ fēn shí"
|
||||
|
||||
#: ports/esp32s2/bindings/espidf/__init__.c ports/esp32s2/esp_error.c
|
||||
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"
|
||||
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
|
||||
msgid "PDMIn not available"
|
||||
msgstr ""
|
||||
msgstr "PDMIn bù kě yòng"
|
||||
|
||||
#: shared-bindings/pwmio/PWMOut.c
|
||||
msgid ""
|
||||
@ -1589,7 +1615,7 @@ msgstr "Shàng bù zhīchí ParallelBus"
|
||||
|
||||
#: ports/esp32s2/common-hal/audiobusio/__init__.c
|
||||
msgid "Peripheral in use"
|
||||
msgstr ""
|
||||
msgstr "shǐ yòng zhōng de wài shè"
|
||||
|
||||
#: py/moduerrno.c
|
||||
msgid "Permission denied"
|
||||
@ -1658,11 +1684,13 @@ msgstr "Qiánzhuì huǎnchōng qū bìxū zài duī shàng"
|
||||
|
||||
#: main.c
|
||||
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
|
||||
msgid "Pretending to deep sleep until alarm, CTRL-C or file write.\n"
|
||||
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
|
||||
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
|
||||
msgid "Received response was invalid"
|
||||
msgstr ""
|
||||
msgstr "shōu dào de xiǎng yìng wú xiào"
|
||||
|
||||
#: shared-bindings/displayio/EPaperDisplay.c
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "Time is in the past."
|
||||
msgstr ""
|
||||
msgstr "shí jiān yǐ jīng guò qù."
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/Adapter.c
|
||||
#, c-format
|
||||
@ -2031,7 +2059,7 @@ msgstr "Wúfǎ xiě rù nvm."
|
||||
|
||||
#: shared-bindings/alarm/SleepMemory.c
|
||||
msgid "Unable to write to sleep_memory."
|
||||
msgstr ""
|
||||
msgstr "wú fǎ xiě rù sleep_memory。"
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/UUID.c
|
||||
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"
|
||||
|
||||
#: shared-bindings/wifi/Radio.c
|
||||
msgid "Unknown failure"
|
||||
msgstr "Wèizhī gùzhàng"
|
||||
#, c-format
|
||||
msgid "Unknown failure %d"
|
||||
msgstr "wèi zhī gù zhàng %d"
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/__init__.c
|
||||
#, c-format
|
||||
@ -2101,7 +2130,7 @@ msgstr "Bù zhīchí de lādòng zhí."
|
||||
|
||||
#: ports/esp32s2/common-hal/dualbank/__init__.c
|
||||
msgid "Update Failed"
|
||||
msgstr ""
|
||||
msgstr "gēng xīn shī bài"
|
||||
|
||||
#: ports/nrf/common-hal/_bleio/Characteristic.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
|
||||
msgid "Version was invalid"
|
||||
msgstr ""
|
||||
msgstr "bǎn běn wú xiào"
|
||||
|
||||
#: py/emitnative.c
|
||||
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
|
||||
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
|
||||
msgid "Writes not supported on Characteristic"
|
||||
@ -2229,7 +2258,7 @@ msgstr "argsort cānshù bìxū shì ndarray"
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
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
|
||||
msgid "argument has wrong type"
|
||||
@ -2254,7 +2283,7 @@ msgstr "cānshù bìxū shì ndarrays"
|
||||
|
||||
#: extmod/ulab/code/ndarray.c
|
||||
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
|
||||
#: 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
|
||||
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
|
||||
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
|
||||
msgid "axis is out of bounds"
|
||||
msgstr ""
|
||||
msgstr "zhóu chāo chū biān jiè"
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
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
|
||||
msgid "axis too long"
|
||||
msgstr ""
|
||||
msgstr "zhóu tài cháng"
|
||||
|
||||
#: py/builtinevex.c
|
||||
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"
|
||||
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
|
||||
msgid "buffer must be a bytes-like object"
|
||||
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
|
||||
msgid "buffer size must match format"
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "data must be iterable"
|
||||
@ -2607,7 +2644,7 @@ msgstr "shùjù chángdù bìxū xiāngděng"
|
||||
|
||||
#: extmod/ulab/code/ndarray.c
|
||||
msgid "data type not understood"
|
||||
msgstr ""
|
||||
msgstr "wèi lǐ jiě de shù jù lèi xíng"
|
||||
|
||||
#: py/parsenum.c
|
||||
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
|
||||
msgid "default is not a function"
|
||||
msgstr ""
|
||||
msgstr "mò rèn zhí bú shì hán shù"
|
||||
|
||||
#: shared-bindings/audiobusio/PDMIn.c
|
||||
msgid ""
|
||||
@ -2646,7 +2683,7 @@ msgstr "bùtóng de cānshù bìxū shì ndarray"
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
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
|
||||
#: 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
|
||||
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
|
||||
#, c-format
|
||||
@ -2724,7 +2761,7 @@ msgstr "qídài guānjiàn: Zìdiǎn de jiàzhí"
|
||||
|
||||
#: shared-bindings/msgpack/__init__.c
|
||||
msgid "ext_hook is not a function"
|
||||
msgstr ""
|
||||
msgstr "ext_hook bú shì hán shù"
|
||||
|
||||
#: py/argcheck.c
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "function is defined for ndarrays only"
|
||||
msgstr ""
|
||||
msgstr "hán shù jǐn wéi ndarrays dìng yì"
|
||||
|
||||
#: py/argcheck.c
|
||||
#, 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
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "input arrays are not compatible"
|
||||
msgstr ""
|
||||
msgstr "shū rù shù zǔ bù jiān róng"
|
||||
|
||||
#: extmod/ulab/code/poly/poly.c
|
||||
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
|
||||
msgid "input must be a dense ndarray"
|
||||
msgstr ""
|
||||
msgstr "shū rù bì xū shì mì jí de ndarray"
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
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
|
||||
msgid "input must be an ndarray"
|
||||
msgstr ""
|
||||
msgstr "shū rù bì xū shì ndarray"
|
||||
|
||||
#: extmod/ulab/code/filter/filter.c
|
||||
msgid "input must be one-dimensional"
|
||||
msgstr ""
|
||||
msgstr "shū rù bì xū shì yì wéi de"
|
||||
|
||||
#: extmod/ulab/code/linalg/linalg.c
|
||||
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
|
||||
msgid "inputs are not iterable"
|
||||
msgstr ""
|
||||
msgstr "shū rù bù kě yí dòng"
|
||||
|
||||
#: py/parsenum.c
|
||||
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
|
||||
msgid "io must be rtc io"
|
||||
msgstr ""
|
||||
msgstr "IO bì xū shì RTC IO"
|
||||
|
||||
#: py/objtype.c
|
||||
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
|
||||
msgid "max_length must be >= 0"
|
||||
msgstr ""
|
||||
msgstr "zuì dà cháng dù bì xū >= 0"
|
||||
|
||||
#: extmod/ulab/code/ndarray.c
|
||||
msgid "maximum number of dimensions is 4"
|
||||
msgstr ""
|
||||
msgstr "zuì dà chǐ cùn shù wéi 4"
|
||||
|
||||
#: py/runtime.c
|
||||
msgid "maximum recursion depth exceeded"
|
||||
@ -3175,7 +3212,7 @@ msgstr "maxiter yìng wéi > 0"
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
msgid "median argument must be an ndarray"
|
||||
msgstr ""
|
||||
msgstr "zhōng wèi shù cān shù bì xū shì ndarray"
|
||||
|
||||
#: py/runtime.c
|
||||
#, 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
|
||||
msgid "no default packer"
|
||||
msgstr ""
|
||||
msgstr "wú mò rèn bāo zhuāng jī"
|
||||
|
||||
#: py/builtinimport.c
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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"
|
||||
msgstr "diǎnshù bìxū zhìshǎo wèi 2"
|
||||
|
||||
#: py/builtinhelp.c
|
||||
msgid "object "
|
||||
msgstr "duì xiàng "
|
||||
|
||||
#: py/obj.c
|
||||
msgid "object '%q' is not a tuple or list"
|
||||
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
|
||||
msgid "offset is too large"
|
||||
msgstr ""
|
||||
msgstr "piān yí tài dà"
|
||||
|
||||
#: shared-bindings/dualbank/__init__.c
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "roll argument must be an ndarray"
|
||||
msgstr ""
|
||||
msgstr "gǔn dòng cān shù bì xū shì ndarray"
|
||||
|
||||
#: py/objstr.c
|
||||
msgid "rsplit(None,n)"
|
||||
@ -3598,11 +3643,11 @@ msgstr "bù zhīchí jiǎoběn biānyì"
|
||||
|
||||
#: extmod/ulab/code/ndarray.c
|
||||
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
|
||||
msgid "short read"
|
||||
msgstr ""
|
||||
msgstr "duǎn dú"
|
||||
|
||||
#: py/objstr.c
|
||||
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
|
||||
msgid "timeout must be < 655.35 secs"
|
||||
msgstr ""
|
||||
msgstr "chāo shí bì xū < 655.35 miǎo"
|
||||
|
||||
#: shared-bindings/_bleio/CharacteristicBuffer.c
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "too many dimensions"
|
||||
msgstr ""
|
||||
msgstr "chǐ cùn tài duō"
|
||||
|
||||
#: extmod/ulab/code/ndarray.c
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "trigger level must be 0 or 1"
|
||||
msgstr ""
|
||||
msgstr "chù fā jí bié bì xū wéi 0 huò 1"
|
||||
|
||||
#: py/obj.c
|
||||
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
|
||||
msgid "wakeup conflict"
|
||||
msgstr ""
|
||||
msgstr "huàn xǐng chōng tū"
|
||||
|
||||
#: ports/esp32s2/common-hal/watchdog/WatchDogTimer.c
|
||||
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"
|
||||
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
|
||||
msgid "window must be <= interval"
|
||||
msgstr "Chuāngkǒu bìxū shì <= jiàngé"
|
||||
|
||||
#: extmod/ulab/code/numerical/numerical.c
|
||||
msgid "wrong axis index"
|
||||
msgstr ""
|
||||
msgstr "cuò wù de zhóu suǒ yǐn"
|
||||
|
||||
#: extmod/ulab/code/ulab_create.c
|
||||
msgid "wrong axis specified"
|
||||
msgstr ""
|
||||
msgstr "zhǐ dìng de zhóu cuò wù"
|
||||
|
||||
#: extmod/ulab/code/vector/vectorise.c
|
||||
msgid "wrong input type"
|
||||
@ -3978,7 +4027,7 @@ msgstr "x zhí chāochū biānjiè"
|
||||
|
||||
#: ports/esp32s2/common-hal/audiobusio/__init__.c
|
||||
msgid "xTaskCreate failed"
|
||||
msgstr ""
|
||||
msgstr "xTaskCreate shī bài"
|
||||
|
||||
#: shared-bindings/displayio/Shape.c
|
||||
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)"
|
||||
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"
|
||||
#~ msgstr "shūrù cānshù bìxū shì zhěngshù huò 2 yuán zǔ"
|
||||
|
||||
|
9
main.c
9
main.c
@ -317,7 +317,7 @@ STATIC bool run_code_py(safe_mode_t safe_mode) {
|
||||
|
||||
// Program has finished running.
|
||||
|
||||
bool serial_connected_before_animation = serial_connected();
|
||||
bool printed_press_any_key = false;
|
||||
#if CIRCUITPY_DISPLAYIO
|
||||
bool refreshed_epaper_display = false;
|
||||
#endif
|
||||
@ -364,7 +364,7 @@ STATIC bool run_code_py(safe_mode_t safe_mode) {
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!serial_connected_before_animation && serial_connected()) {
|
||||
if (!printed_press_any_key && serial_connected()) {
|
||||
if (!serial_connected_at_start) {
|
||||
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);
|
||||
serial_write("\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;
|
||||
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.
|
||||
#if CIRCUITPY_DISPLAYIO
|
||||
|
@ -22,7 +22,6 @@ CIRCUITPY_GAMEPAD = 1
|
||||
CIRCUITPY_BUSDEVICE = 1
|
||||
|
||||
# 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_SD
|
||||
#FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_ADXL34x
|
||||
|
@ -10,3 +10,4 @@ INTERNAL_FLASH_FILESYSTEM = 1
|
||||
LONGINT_IMPL = NONE
|
||||
CIRCUITPY_FULL_BUILD = 0
|
||||
SUPEROPT_GC = 0
|
||||
SUPEROPT_VM = 0
|
||||
|
@ -11,3 +11,5 @@ LONGINT_IMPL = NONE
|
||||
CIRCUITPY_FULL_BUILD = 0
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
SUPEROPT_VM = 0
|
||||
CFLAGS_INLINE_LIMIT = 40
|
||||
|
@ -16,6 +16,7 @@ CIRCUITPY_COUNTIO = 0
|
||||
CIRCUITPY_FREQUENCYIO = 0
|
||||
CIRCUITPY_I2CPERIPHERAL = 0
|
||||
CIRCUITPY_VECTORIO = 0
|
||||
CIRCUITPY_BUSDEVICE = 0
|
||||
MICROPY_PY_ASYNC_AWAIT = 0
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
|
@ -22,7 +22,6 @@ SUPEROPT_GC = 0
|
||||
CFLAGS_INLINE_LIMIT = 55
|
||||
|
||||
# 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_HID
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH
|
||||
|
@ -22,11 +22,10 @@ CIRCUITPY_ROTARYIO = 0
|
||||
CIRCUITPY_RTC = 0
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
CFLAGS_INLINE_LIMIT = 50
|
||||
CFLAGS_INLINE_LIMIT = 40
|
||||
|
||||
|
||||
# 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_Crickit
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_LIS3DH
|
||||
|
@ -43,5 +43,3 @@
|
||||
// USB is always used internally so skip the pin objects for it.
|
||||
#define IGNORE_PIN_PA24 1
|
||||
#define IGNORE_PIN_PA25 1
|
||||
|
||||
#define MICROPY_PY_URE 0
|
||||
|
@ -18,6 +18,7 @@ CIRCUITPY_FREQUENCYIO = 0
|
||||
CIRCUITPY_I2CPERIPHERAL = 0
|
||||
CIRCUITPY_MSGPACK = 0
|
||||
CIRCUITPY_PIXELBUF = 0
|
||||
CIRCUITPY_RE = 0
|
||||
CIRCUITPY_ROTARYIO = 0
|
||||
CIRCUITPY_RTC = 0
|
||||
# So not all of displayio, sorry!
|
||||
@ -27,7 +28,6 @@ SUPEROPT_GC = 0
|
||||
CFLAGS_INLINE_LIMIT = 55
|
||||
|
||||
# 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_LIS3DH
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel
|
||||
|
@ -11,3 +11,4 @@ LONGINT_IMPL = NONE
|
||||
CIRCUITPY_FULL_BUILD = 0
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
SUPEROPT_VM = 0
|
||||
|
@ -21,7 +21,6 @@ CFLAGS_INLINE_LIMIT = 50
|
||||
CIRCUITPY_MSGPACK = 0
|
||||
|
||||
# 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_Motor
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel
|
||||
|
@ -28,5 +28,4 @@ CFLAGS_INLINE_LIMIT = 35
|
||||
SUPEROPT_GC = 0
|
||||
|
||||
# Include these Python libraries in firmware.
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_RFM69
|
||||
|
@ -29,5 +29,4 @@ CFLAGS_INLINE_LIMIT = 35
|
||||
SUPEROPT_GC = 0
|
||||
|
||||
# Include these Python libraries in firmware.
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_RFM9x
|
||||
|
@ -20,4 +20,5 @@ endif
|
||||
ifeq ($(TRANSLATION), de_DE)
|
||||
RELEASE_NEEDS_CLEAN_BUILD = 1
|
||||
CFLAGS_INLINE_LIMIT = 35
|
||||
SUPEROPT_VM = 0
|
||||
endif
|
||||
|
@ -27,7 +27,6 @@ CFLAGS_INLINE_LIMIT = 55
|
||||
SUPEROPT_GC = 0
|
||||
|
||||
# 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_NeoPixel
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
// These are pins not to reset.
|
||||
// QSPI Data pins
|
||||
#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_C (0)
|
||||
#define MICROPY_PORT_D (0)
|
||||
|
@ -10,3 +10,5 @@ QSPI_FLASH_FILESYSTEM = 1
|
||||
EXTERNAL_FLASH_DEVICE_COUNT = 3
|
||||
EXTERNAL_FLASH_DEVICES = "S25FL116K, S25FL216K, GD25Q16C"
|
||||
LONGINT_IMPL = MPZ
|
||||
|
||||
CIRCUITPY__EVE = 1
|
||||
|
@ -21,7 +21,6 @@ CIRCUITPY_GAMEPAD = 0
|
||||
CIRCUITPY_RGBMATRIX = 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_Register
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD
|
||||
|
@ -21,7 +21,6 @@ CIRCUITPY_GAMEPAD = 0
|
||||
CIRCUITPY_RGBMATRIX = 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_Register
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD
|
||||
|
@ -11,14 +11,6 @@ LONGINT_IMPL = NONE
|
||||
CIRCUITPY_FULL_BUILD = 0
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
SUPEROPT_VM = 0
|
||||
|
||||
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
|
||||
|
@ -13,5 +13,4 @@ LONGINT_IMPL = MPZ
|
||||
CIRCUITPY_AUDIOBUSIO = 0
|
||||
CIRCUITPY_USTACK = 1
|
||||
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel
|
||||
|
@ -14,6 +14,7 @@ LONGINT_IMPL = NONE
|
||||
CIRCUITPY_AUDIOBUSIO = 0
|
||||
CIRCUITPY_FREQUENCYIO = 0
|
||||
CIRCUITPY_GAMEPAD = 0
|
||||
CIRCUITPY_BUSDEVICE = 0
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
|
||||
|
@ -14,6 +14,7 @@ LONGINT_IMPL = MPZ
|
||||
CIRCUITPY_AUDIOIO = 0
|
||||
CIRCUITPY_AUDIOBUSIO = 0
|
||||
CIRCUITPY_VECTORIO = 0
|
||||
CIRCUITPY_BUSDEVICE = 0
|
||||
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_DotStar
|
||||
|
||||
|
@ -10,4 +10,10 @@ INTERNAL_FLASH_FILESYSTEM = 1
|
||||
LONGINT_IMPL = NONE
|
||||
CIRCUITPY_FULL_BUILD = 0
|
||||
|
||||
ifeq ($(TRANSLATION),de_DE)
|
||||
RELEASE_NEEDS_CLEAN_BUILD = 1
|
||||
CFLAGS_INLINE_LIMIT = 35
|
||||
SUPEROPT_VM = 0
|
||||
endif
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
|
@ -28,6 +28,7 @@ CIRCUITPY_RTC = 0
|
||||
CIRCUITPY_TOUCHIO = 0
|
||||
CIRCUITPY_USB_HID = 0
|
||||
CIRCUITPY_USB_MIDI = 0
|
||||
CIRCUITPY_BUSDEVICE = 0
|
||||
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/circuitpython-stage/ugame10
|
||||
|
||||
|
@ -24,4 +24,3 @@ CIRCUITPY_TOUCHIO=0
|
||||
CIRCUITPY_BUSDEVICE=1
|
||||
|
||||
# Include these Python libraries in firmware.
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
|
||||
|
@ -27,5 +27,4 @@ CIRCUITPY_COUNTIO=0
|
||||
CIRCUITPY_BUSDEVICE=1
|
||||
|
||||
# Include these Python libraries in firmware.
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice
|
||||
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD
|
||||
|
@ -45,11 +45,7 @@
|
||||
#define MICROPY_PY_BUILTINS_COMPLEX (0)
|
||||
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (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_UBINASCII (0)
|
||||
#define MICROPY_PY_UJSON (0)
|
||||
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (0)
|
||||
#define MICROPY_PY_UERRNO_LIST \
|
||||
X(EPERM) \
|
||||
@ -84,9 +80,6 @@
|
||||
#define SPI_FLASH_MAX_BAUDRATE 24000000
|
||||
#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (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
|
||||
|
||||
#endif // SAM_D5X_E5X
|
||||
|
@ -20,26 +20,16 @@ endif
|
||||
|
||||
# Put samd21-only choices here.
|
||||
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
|
||||
CIRCUITPY_AUDIOMP3 = 0
|
||||
endif
|
||||
# The ?='s allow overriding in mpconfigboard.mk.
|
||||
|
||||
ifndef CIRCUITPY_BUILTINS_POW3
|
||||
CIRCUITPY_BUILTINS_POW3 = 0
|
||||
endif
|
||||
|
||||
ifndef CIRCUITPY_FREQUENCYIO
|
||||
CIRCUITPY_FREQUENCYIO = 0
|
||||
endif
|
||||
|
||||
ifndef CIRCUITPY_TOUCHIO_USE_NATIVE
|
||||
CIRCUITPY_TOUCHIO_USE_NATIVE = 1
|
||||
endif
|
||||
CIRCUITPY_AUDIOMIXER ?= 0
|
||||
CIRCUITPY_BINASCII ?= 0
|
||||
CIRCUITPY_AUDIOMP3 ?= 0
|
||||
CIRCUITPY_BUILTINS_POW3 ?= 0
|
||||
CIRCUITPY_FREQUENCYIO ?= 0
|
||||
CIRCUITPY_JSON ?= 0
|
||||
CIRCUITPY_TOUCHIO_USE_NATIVE ?= 1
|
||||
|
||||
# No room for HCI _bleio on SAMD21.
|
||||
CIRCUITPY_BLEIO_HCI = 0
|
||||
@ -71,27 +61,13 @@ ifeq ($(CHIP_FAMILY),samd51)
|
||||
# No native touchio on SAMD51.
|
||||
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
|
||||
endif
|
||||
|
||||
ifndef CIRCUITPY_PS2IO
|
||||
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
|
||||
CIRCUITPY_NETWORK ?= 0
|
||||
CIRCUITPY_PS2IO ?= 1
|
||||
CIRCUITPY_SAMD ?= 1
|
||||
CIRCUITPY_RGBMATRIX ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CIRCUITPY_FRAMEBUFFERIO ?= $(CIRCUITPY_FULL_BUILD)
|
||||
|
||||
endif # samd51
|
||||
|
||||
|
@ -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.
|
||||
|
||||
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/
|
||||
|
||||
|
@ -165,6 +165,7 @@ CONFIG_USBDEV=y
|
||||
CONFIG_USBDEV_DMA=y
|
||||
CONFIG_USBDEV_DUALSPEED=y
|
||||
CONFIG_USEC_PER_TICK=1000
|
||||
CONFIG_USERMAIN_STACKSIZE=8192
|
||||
CONFIG_USER_ENTRYPOINT="spresense_main"
|
||||
CONFIG_VIDEO_ISX012=y
|
||||
CONFIG_VIDEO_STREAM=y
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 752c4cd56dd0a270a559c28272ceb61ddcb7806c
|
||||
Subproject commit 2ec2a1538362696118dc3fdf56f33dacaf8f4067
|
@ -30,10 +30,10 @@
|
||||
|
||||
/* Prototypes for Remote API */
|
||||
|
||||
int FM_RawWrite(uint32_t offset, const void *buf, uint32_t size);
|
||||
int FM_RawVerifyWrite(uint32_t offset, const void *buf, uint32_t size);
|
||||
int FM_RawRead(uint32_t offset, void *buf, uint32_t size);
|
||||
int FM_RawEraseSector(uint32_t sector);
|
||||
int fw_fm_rawwrite(uint32_t offset, const void *buf, uint32_t size);
|
||||
int fw_fm_rawverifywrite(uint32_t offset, const void *buf, uint32_t size);
|
||||
int fw_fm_rawread(uint32_t offset, void *buf, uint32_t size);
|
||||
int fw_fm_rawerasesector(uint32_t sector);
|
||||
|
||||
#define CXD56_SPIFLASHSIZE (16 * 1024 * 1024)
|
||||
|
||||
@ -64,8 +64,8 @@ void port_internal_flash_flush(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
FM_RawEraseSector(flash_sector);
|
||||
FM_RawWrite(flash_sector << SECTOR_SHIFT, flash_cache, SECTOR_SIZE);
|
||||
fw_fm_rawerasesector(flash_sector);
|
||||
fw_fm_rawwrite(flash_sector << SECTOR_SHIFT, flash_cache, SECTOR_SIZE);
|
||||
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ mp_uint_t supervisor_flash_write_blocks(const uint8_t *src, uint32_t lba, uint32
|
||||
if (sector != flash_sector) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -33,35 +33,196 @@
|
||||
#include "shared-bindings/digitalio/DigitalInOut.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,
|
||||
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) {
|
||||
|
||||
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) {
|
||||
/* 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) {
|
||||
/* 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) {
|
||||
return false;
|
||||
/* SNIP - same as from SAMD and NRF ports */
|
||||
return true;
|
||||
}
|
||||
|
||||
bool common_hal_displayio_parallelbus_begin_transaction(mp_obj_t obj) {
|
||||
|
||||
return false;
|
||||
/* 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, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
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) {
|
||||
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) {
|
||||
|
||||
/* 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);
|
||||
}
|
||||
|
@ -31,6 +31,17 @@
|
||||
|
||||
typedef struct {
|
||||
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;
|
||||
|
||||
#endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_DISPLAYIO_PARALLELBUS_H
|
||||
|
@ -4,6 +4,7 @@
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* 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
|
||||
* 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/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) {
|
||||
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
|
||||
// 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.
|
||||
|
||||
// Todo: move to SSL Wrapper and add lwip_connect()
|
||||
_lazy_init_TLS(self);
|
||||
|
||||
esp_tls_cfg_t* tls_config = NULL;
|
||||
if (self->ssl_context != NULL) {
|
||||
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;
|
||||
if (result < 0) {
|
||||
int esp_tls_code;
|
||||
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) {
|
||||
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
|
||||
// always a chance that we try to read something that is used internally.
|
||||
int fd;
|
||||
esp_tls_get_conn_sockfd(self->tcp, &fd);
|
||||
esp_tls_get_conn_sockfd(self->tls, &fd);
|
||||
struct timeval tv;
|
||||
tv.tv_sec = 2 * 60; // Two minutes
|
||||
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) {
|
||||
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) {
|
||||
mp_raise_OSError(MP_ENOTCONN);
|
||||
@ -95,20 +241,45 @@ 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) {
|
||||
size_t received = 0;
|
||||
int received = 0;
|
||||
bool timed_out = false;
|
||||
|
||||
if (self->num != -1) {
|
||||
// LWIP Socket
|
||||
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->tcp, &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 &&
|
||||
(self->timeout_ms == 0 || supervisor_ticks_ms64() - start_ticks <= self->timeout_ms) &&
|
||||
!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->tcp);
|
||||
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.
|
||||
@ -119,7 +290,7 @@ mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self,
|
||||
available = remaining;
|
||||
}
|
||||
if (available > 0) {
|
||||
status = esp_tls_conn_read(self->tcp, (void*) buf + received, available);
|
||||
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.)
|
||||
@ -130,10 +301,13 @@ mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self,
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Socket does not have a valid descriptor of either type
|
||||
mp_raise_OSError(MP_EBADF);
|
||||
}
|
||||
|
||||
if (received == 0) {
|
||||
// socket closed
|
||||
common_hal_socketpool_socket_close(self);
|
||||
if (timed_out) {
|
||||
mp_raise_OSError(ETIMEDOUT);
|
||||
}
|
||||
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,
|
||||
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
|
||||
const struct addrinfo hints = {
|
||||
.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) {
|
||||
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
|
||||
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_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,
|
||||
uint8_t* buf, mp_uint_t len, uint8_t* ip, uint *port) {
|
||||
|
||||
_lazy_init_LWIP(self);
|
||||
|
||||
struct sockaddr_in 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
|
||||
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);
|
||||
|
||||
// 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 (bytes_received < 0) {
|
||||
if (received < 0) {
|
||||
mp_raise_BrokenPipeError();
|
||||
return 0;
|
||||
}
|
||||
|
||||
return bytes_received;
|
||||
return received;
|
||||
}
|
||||
|
||||
void common_hal_socketpool_socket_close(socketpool_socket_obj_t* self) {
|
||||
self->connected = false;
|
||||
if (self->tcp != NULL) {
|
||||
esp_tls_conn_destroy(self->tcp);
|
||||
self->tcp = NULL;
|
||||
if (self->tls != NULL) {
|
||||
esp_tls_conn_destroy(self->tls);
|
||||
self->tls = NULL;
|
||||
}
|
||||
if (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) {
|
||||
return self->tcp == NULL && self->num < 0;
|
||||
return self->tls == NULL && self->num < 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -37,11 +37,17 @@
|
||||
typedef struct {
|
||||
mp_obj_base_t base;
|
||||
int num;
|
||||
int type;
|
||||
int family;
|
||||
int ipproto;
|
||||
bool connected;
|
||||
esp_tls_t* tcp;
|
||||
esp_tls_t* tls;
|
||||
ssl_sslcontext_obj_t* ssl_context;
|
||||
socketpool_socketpool_obj_t* pool;
|
||||
mp_uint_t timeout_ms;
|
||||
} 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
|
||||
|
@ -65,25 +65,20 @@ socketpool_socket_obj_t* common_hal_socketpool_socket(socketpool_socketpool_obj_
|
||||
mp_raise_NotImplementedError(translate("Only IPv4 sockets supported"));
|
||||
}
|
||||
|
||||
int socknum = -1;
|
||||
esp_tls_t* tcp_handle = NULL;
|
||||
if (socket_type == SOCK_DGRAM || socket_type == SOCK_RAW) {
|
||||
socknum = lwip_socket(addr_family, socket_type, ipproto);
|
||||
} else {
|
||||
tcp_handle = esp_tls_init();
|
||||
|
||||
if (tcp_handle == NULL) {
|
||||
mp_raise_espidf_MemoryError();
|
||||
}
|
||||
}
|
||||
if (socknum < 0 && tcp_handle == NULL) {
|
||||
mp_raise_RuntimeError(translate("Out of sockets"));
|
||||
}
|
||||
|
||||
// Consider LWIP and MbedTLS "variant" sockets to be incompatible (for now)
|
||||
// The variant of the socket is determined by whether the socket is wrapped
|
||||
// by SSL. If no TLS handle is set in sslcontext_wrap_socket, the first call
|
||||
// of bind() or connect() will create a LWIP socket with a corresponding
|
||||
// socketnum.
|
||||
// TODO: move MbedTLS to its own duplicate Socket or Server API, maybe?
|
||||
socketpool_socket_obj_t *sock = m_new_obj_with_finaliser(socketpool_socket_obj_t);
|
||||
sock->base.type = &socketpool_socket_type;
|
||||
sock->num = socknum;
|
||||
sock->tcp = tcp_handle;
|
||||
sock->num = -1;
|
||||
sock->type = socket_type;
|
||||
sock->family = addr_family;
|
||||
sock->ipproto = ipproto;
|
||||
|
||||
sock->tls = NULL;
|
||||
sock->ssl_context = NULL;
|
||||
sock->pool = self;
|
||||
return sock;
|
||||
|
@ -72,7 +72,7 @@ void common_hal_wifi_radio_set_enabled(wifi_radio_obj_t *self, bool enabled) {
|
||||
}
|
||||
if (!self->started && enabled) {
|
||||
// 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());
|
||||
self->started = true;
|
||||
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) {
|
||||
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);
|
||||
|
||||
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) {
|
||||
// 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);
|
||||
|
||||
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;
|
||||
esp_wifi_connect();
|
||||
|
||||
EventBits_t bits;
|
||||
do {
|
||||
RUN_BACKGROUND_TASKS;
|
||||
bits = xEventGroupWaitBits(self->event_group_handle,
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#define MICROPY_NLR_THUMB (0)
|
||||
|
||||
#define MICROPY_PY_UJSON (1)
|
||||
#define MICROPY_USE_INTERNAL_PRINTF (0)
|
||||
#define MICROPY_PY_SYS_PLATFORM "Espressif ESP32-S2"
|
||||
|
||||
|
@ -46,8 +46,13 @@ void peripherals_touch_init(const touch_pad_t touchpad) {
|
||||
if (!touch_inited) {
|
||||
touch_pad_init();
|
||||
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_inited = true;
|
||||
}
|
||||
touch_pad_config(touchpad);
|
||||
}
|
||||
|
@ -46,6 +46,7 @@
|
||||
#include "common-hal/pulseio/PulseIn.h"
|
||||
#include "common-hal/pwmio/PWMOut.h"
|
||||
#include "common-hal/watchdog/WatchDogTimer.h"
|
||||
#include "common-hal/socketpool/Socket.h"
|
||||
#include "common-hal/wifi/__init__.h"
|
||||
#include "supervisor/memory.h"
|
||||
#include "supervisor/shared/tick.h"
|
||||
@ -143,9 +144,9 @@ safe_mode_t port_init(void) {
|
||||
case ESP_RST_BROWNOUT:
|
||||
return BROWNOUT;
|
||||
case ESP_RST_PANIC:
|
||||
return HARD_CRASH;
|
||||
case ESP_RST_INT_WDT:
|
||||
case ESP_RST_WDT:
|
||||
return HARD_CRASH;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -222,6 +223,10 @@ void reset_port(void) {
|
||||
#if CIRCUITPY_WIFI
|
||||
wifi_reset();
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_SOCKETPOOL
|
||||
socket_reset();
|
||||
#endif
|
||||
}
|
||||
|
||||
void reset_to_bootloader(void) {
|
||||
|
@ -31,8 +31,6 @@
|
||||
#define CIRCUITPY_INTERNAL_NVM_SIZE (0)
|
||||
#define MICROPY_NLR_THUMB (0)
|
||||
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
|
||||
#define MICROPY_PY_UBINASCII (1)
|
||||
#define MICROPY_PY_UJSON (1)
|
||||
|
||||
#include "py/circuitpy_mpconfig.h"
|
||||
|
||||
|
@ -41,8 +41,6 @@ extern uint8_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_FUNCTION_ATTRS (0)
|
||||
#define MICROPY_PY_IO (1)
|
||||
#define MICROPY_PY_UJSON (1)
|
||||
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
|
||||
|
||||
|
||||
|
@ -25,6 +25,7 @@ CIRCUITPY_RTC = 1
|
||||
CIRCUITPY_SDCARDIO = 0
|
||||
CIRCUITPY_TOUCHIO = 0
|
||||
CIRCUITPY_ULAB = 0
|
||||
CIRCUITPY_BUSDEVICE = 0
|
||||
MICROPY_PY_ASYNC_AWAIT = 0
|
||||
|
||||
SUPEROPT_GC = 0
|
||||
|
@ -13,11 +13,13 @@ INTERNAL_FLASH_FILESYSTEM = 1
|
||||
|
||||
CIRCUITPY_AESIO = 1
|
||||
CIRCUITPY_AUDIOMP3 = 0
|
||||
CIRCUITPY_BUSDEVICE = 0
|
||||
CIRCUITPY_BUSIO = 1
|
||||
CIRCUITPY_DISPLAYIO = 0
|
||||
CIRCUITPY_ERRNO = 0
|
||||
CIRCUITPY_FRAMEBUFFERIO = 0
|
||||
CIRCUITPY_MSGPACK = 0
|
||||
CIRCUITPY_GAMEPAD = 0
|
||||
CIRCUITPY_MSGPACK = 0
|
||||
CIRCUITPY_NEOPIXEL_WRITE = 0
|
||||
CIRCUITPY_NVM = 0
|
||||
CIRCUITPY_PIXELBUF = 0
|
||||
@ -28,7 +30,6 @@ CIRCUITPY_SDCARDIO = 0
|
||||
CIRCUITPY_TOUCHIO = 0
|
||||
CIRCUITPY_ULAB = 0
|
||||
CIRCUITPY_WATCHDOG = 1
|
||||
CIRCUITPY_BUSDEVICE = 0
|
||||
|
||||
# Enable micropython.native
|
||||
#CIRCUITPY_ENABLE_MPY_NATIVE = 1
|
||||
|
@ -35,11 +35,8 @@
|
||||
#include "peripherals/nrf/nvm.h" // for FLASH_PAGE_SIZE
|
||||
|
||||
#define MICROPY_PY_FUNCTION_ATTRS (1)
|
||||
#define MICROPY_PY_IO (1)
|
||||
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
|
||||
#define MICROPY_PY_SYS_STDIO_BUFFER (1)
|
||||
#define MICROPY_PY_UBINASCII (1)
|
||||
#define MICROPY_PY_UJSON (1)
|
||||
|
||||
// 24kiB stack
|
||||
#define CIRCUITPY_DEFAULT_STACK_SIZE (24*1024)
|
||||
|
1
ports/raspberrypi/.gitignore
vendored
Normal file
1
ports/raspberrypi/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
build-*/
|
274
ports/raspberrypi/Makefile
Normal file
274
ports/raspberrypi/Makefile
Normal 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 $* = $($*)
|
18
ports/raspberrypi/README.rst
Normal file
18
ports/raspberrypi/README.rst
Normal 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
|
44
ports/raspberrypi/background.c
Normal file
44
ports/raspberrypi/background.c
Normal 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) {}
|
32
ports/raspberrypi/background.h
Normal file
32
ports/raspberrypi/background.h
Normal 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
|
449
ports/raspberrypi/bindings/rp2pio/StateMachine.c
Normal file
449
ports/raspberrypi/bindings/rp2pio/StateMachine.c
Normal 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);
|
||||
}
|
71
ports/raspberrypi/bindings/rp2pio/StateMachine.h
Normal file
71
ports/raspberrypi/bindings/rp2pio/StateMachine.h
Normal 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
|
45
ports/raspberrypi/bindings/rp2pio/__init__.c
Normal file
45
ports/raspberrypi/bindings/rp2pio/__init__.c
Normal 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,
|
||||
};
|
44
ports/raspberrypi/boards/adafruit_feather_rp2040/board.c
Normal file
44
ports/raspberrypi/boards/adafruit_feather_rp2040/board.c
Normal 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) {
|
||||
}
|
@ -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)
|
@ -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
|
36
ports/raspberrypi/boards/adafruit_feather_rp2040/pins.c
Normal file
36
ports/raspberrypi/boards/adafruit_feather_rp2040/pins.c
Normal 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);
|
38
ports/raspberrypi/boards/raspberry_pi_pico/board.c
Normal file
38
ports/raspberrypi/boards/raspberry_pi_pico/board.c
Normal 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) {
|
||||
}
|
15
ports/raspberrypi/boards/raspberry_pi_pico/mpconfigboard.h
Normal file
15
ports/raspberrypi/boards/raspberry_pi_pico/mpconfigboard.h
Normal 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)
|
@ -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
|
39
ports/raspberrypi/boards/raspberry_pi_pico/pins.c
Normal file
39
ports/raspberrypi/boards/raspberry_pi_pico/pins.c
Normal 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);
|
20
ports/raspberrypi/bs2_default_padded_checksummed.S
Normal file
20
ports/raspberrypi/bs2_default_padded_checksummed.S
Normal 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
|
73
ports/raspberrypi/common-hal/analogio/AnalogIn.c
Normal file
73
ports/raspberrypi/common-hal/analogio/AnalogIn.c
Normal 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
Loading…
Reference in New Issue
Block a user