Merge pull request #4060 from dhalbert/regularize-extmod-modules
CIRCUITPY_* switches for JSON, RE, etc. Doc cleanup
This commit is contained in:
commit
13812a788f
@ -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,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():
|
||||
|
@ -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!
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -27,8 +27,6 @@
|
||||
#ifndef __INCLUDED_MPCONFIGPORT_H
|
||||
#define __INCLUDED_MPCONFIGPORT_H
|
||||
|
||||
#define MICROPY_PY_UJSON (1)
|
||||
|
||||
#define CIRCUITPY_INTERNAL_NVM_SIZE 0
|
||||
|
||||
#define CIRCUITPY_DEFAULT_STACK_SIZE (24*1024)
|
||||
|
@ -31,9 +31,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#define MICROPY_PY_FUNCTION_ATTRS (1)
|
||||
#define MICROPY_PY_IO (1)
|
||||
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
|
||||
#define MICROPY_PY_UJSON (1)
|
||||
|
||||
extern uint8_t _ld_default_stack_size;
|
||||
|
||||
|
@ -195,21 +195,12 @@ typedef long mp_off_t;
|
||||
#define MICROPY_PY_BUILTINS_STR_CENTER (CIRCUITPY_FULL_BUILD)
|
||||
#define MICROPY_PY_BUILTINS_STR_PARTITION (CIRCUITPY_FULL_BUILD)
|
||||
#define MICROPY_PY_BUILTINS_STR_SPLITLINES (CIRCUITPY_FULL_BUILD)
|
||||
#define MICROPY_PY_UERRNO (CIRCUITPY_FULL_BUILD)
|
||||
#ifndef MICROPY_PY_COLLECTIONS_ORDEREDDICT
|
||||
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (CIRCUITPY_FULL_BUILD)
|
||||
#endif
|
||||
#ifndef MICROPY_PY_UBINASCII
|
||||
#define MICROPY_PY_UBINASCII (CIRCUITPY_FULL_BUILD)
|
||||
#endif
|
||||
// Opposite setting is deliberate.
|
||||
#define MICROPY_PY_UERRNO_ERRORCODE (!CIRCUITPY_FULL_BUILD)
|
||||
#ifndef MICROPY_PY_URE
|
||||
#define MICROPY_PY_URE (CIRCUITPY_FULL_BUILD)
|
||||
#endif
|
||||
#define MICROPY_PY_URE_MATCH_GROUPS (CIRCUITPY_FULL_BUILD)
|
||||
#define MICROPY_PY_URE_MATCH_SPAN_START_END (CIRCUITPY_FULL_BUILD)
|
||||
#define MICROPY_PY_URE_SUB (CIRCUITPY_FULL_BUILD)
|
||||
#define MICROPY_PY_URE_MATCH_GROUPS (CIRCUITPY_RE)
|
||||
#define MICROPY_PY_URE_MATCH_SPAN_START_END (CIRCUITPY_RE)
|
||||
#define MICROPY_PY_URE_SUB (CIRCUITPY_RE)
|
||||
|
||||
// LONGINT_IMPL_xxx are defined in the Makefile.
|
||||
//
|
||||
@ -301,6 +292,13 @@ extern const struct _mp_obj_module_t audiopwmio_module;
|
||||
#define AUDIOPWMIO_MODULE
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_BINASCII
|
||||
#define MICROPY_PY_UBINASCII CIRCUITPY_BINASCII
|
||||
#define BINASCII_MODULE { MP_ROM_QSTR(MP_QSTR_binascii), MP_ROM_PTR(&mp_module_ubinascii) },
|
||||
#else
|
||||
#define BINASCII_MODULE
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_BITBANGIO
|
||||
#define BITBANGIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_bitbangio), (mp_obj_t)&bitbangio_module },
|
||||
extern const struct _mp_obj_module_t bitbangio_module;
|
||||
@ -399,6 +397,16 @@ extern const struct _mp_obj_module_t terminalio_module;
|
||||
#define TERMINALIO_MODULE
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_ERRNO
|
||||
#define MICROPY_PY_UERRNO (1)
|
||||
// Uses about 80 bytes.
|
||||
#define MICROPY_PY_UERRNO_ERRORCODE (1)
|
||||
#define ERRNO_MODULE { MP_ROM_QSTR(MP_QSTR_errno), MP_ROM_PTR(&mp_module_uerrno) },
|
||||
#else
|
||||
#define ERRNO_MODULE
|
||||
#
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_ESPIDF
|
||||
extern const struct _mp_obj_module_t espidf_module;
|
||||
#define ESPIDF_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_espidf),(mp_obj_t)&espidf_module },
|
||||
@ -470,6 +478,18 @@ extern const struct _mp_obj_module_t ipaddress_module;
|
||||
#define IPADDRESS_MODULE
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_JSON
|
||||
#define MICROPY_PY_UJSON (1)
|
||||
#define MICROPY_PY_IO (1)
|
||||
#define JSON_MODULE { MP_ROM_QSTR(MP_QSTR_json), MP_ROM_PTR(&mp_module_ujson) },
|
||||
#else
|
||||
#ifndef MICROPY_PY_IO
|
||||
// We don't need MICROPY_PY_IO unless someone else wants it.
|
||||
#define MICROPY_PY_IO (0)
|
||||
#endif
|
||||
#define JSON_MODULE
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_MATH
|
||||
extern const struct _mp_obj_module_t math_module;
|
||||
#define MATH_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_math), (mp_obj_t)&math_module },
|
||||
@ -588,6 +608,13 @@ extern const struct _mp_obj_module_t random_module;
|
||||
#define RANDOM_MODULE
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_RE
|
||||
#define MICROPY_PY_URE (1)
|
||||
#define RE_MODULE { MP_ROM_QSTR(MP_QSTR_re), MP_ROM_PTR(&mp_module_ure) },
|
||||
#else
|
||||
#define RE_MODULE
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_RGBMATRIX
|
||||
extern const struct _mp_obj_module_t rgbmatrix_module;
|
||||
#define RGBMATRIX_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_rgbmatrix),(mp_obj_t)&rgbmatrix_module },
|
||||
@ -730,25 +757,6 @@ extern const struct _mp_obj_module_t ustack_module;
|
||||
#define USTACK_MODULE
|
||||
#endif
|
||||
|
||||
// These modules are not yet in shared-bindings, but we prefer the non-uxxx names.
|
||||
#if MICROPY_PY_UBINASCII
|
||||
#define BINASCII_MODULE { MP_ROM_QSTR(MP_QSTR_binascii), MP_ROM_PTR(&mp_module_ubinascii) },
|
||||
#else
|
||||
#define BINASCII_MODULE
|
||||
#endif
|
||||
|
||||
#if MICROPY_PY_UERRNO
|
||||
#define ERRNO_MODULE { MP_ROM_QSTR(MP_QSTR_errno), MP_ROM_PTR(&mp_module_uerrno) },
|
||||
#else
|
||||
#define ERRNO_MODULE
|
||||
#endif
|
||||
|
||||
#if MICROPY_PY_UJSON
|
||||
#define JSON_MODULE { MP_ROM_QSTR(MP_QSTR_json), MP_ROM_PTR(&mp_module_ujson) },
|
||||
#else
|
||||
#define JSON_MODULE
|
||||
#endif
|
||||
|
||||
#if defined(CIRCUITPY_ULAB) && CIRCUITPY_ULAB
|
||||
// ulab requires reverse special methods
|
||||
#if defined(MICROPY_PY_REVERSE_SPECIAL_METHODS) && !MICROPY_PY_REVERSE_SPECIAL_METHODS
|
||||
@ -760,12 +768,6 @@ extern const struct _mp_obj_module_t ustack_module;
|
||||
#define ULAB_MODULE
|
||||
#endif
|
||||
|
||||
#if MICROPY_PY_URE
|
||||
#define RE_MODULE { MP_ROM_QSTR(MP_QSTR_re), MP_ROM_PTR(&mp_module_ure) },
|
||||
#else
|
||||
#define RE_MODULE
|
||||
#endif
|
||||
|
||||
// This is not a top-level module; it's microcontroller.watchdog.
|
||||
#if CIRCUITPY_WATCHDOG
|
||||
extern const struct _mp_obj_module_t watchdog_module;
|
||||
|
@ -86,6 +86,9 @@ endif
|
||||
endif
|
||||
CFLAGS += -DCIRCUITPY_AUDIOMP3=$(CIRCUITPY_AUDIOMP3)
|
||||
|
||||
CIRCUITPY_BINASCII ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CFLAGS += -DCIRCUITPY_BINASCII=$(CIRCUITPY_BINASCII)
|
||||
|
||||
CIRCUITPY_BITBANGIO ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CFLAGS += -DCIRCUITPY_BITBANGIO=$(CIRCUITPY_BITBANGIO)
|
||||
|
||||
@ -124,6 +127,9 @@ CFLAGS += -DCIRCUITPY_COUNTIO=$(CIRCUITPY_COUNTIO)
|
||||
CIRCUITPY_DISPLAYIO ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CFLAGS += -DCIRCUITPY_DISPLAYIO=$(CIRCUITPY_DISPLAYIO)
|
||||
|
||||
CIRCUITPY_ERRNO ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CFLAGS += -DCIRCUITPY_ERRNO=$(CIRCUITPY_ERRNO)
|
||||
|
||||
# CIRCUITPY_ESPIDF is handled in the esp32s2 tree.
|
||||
# Only for ESP32S chips.
|
||||
# Assume not a ESP build.
|
||||
@ -158,6 +164,9 @@ CFLAGS += -DCIRCUITPY_I2CPERIPHERAL=$(CIRCUITPY_I2CPERIPHERAL)
|
||||
CIRCUITPY_IPADDRESS ?= $(CIRCUITPY_WIFI)
|
||||
CFLAGS += -DCIRCUITPY_IPADDRESS=$(CIRCUITPY_IPADDRESS)
|
||||
|
||||
CIRCUITPY_JSON ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CFLAGS += -DCIRCUITPY_JSON=$(CIRCUITPY_JSON)
|
||||
|
||||
CIRCUITPY_MATH ?= 1
|
||||
CFLAGS += -DCIRCUITPY_MATH=$(CIRCUITPY_MATH)
|
||||
|
||||
@ -204,6 +213,9 @@ CFLAGS += -DCIRCUITPY_PWMIO=$(CIRCUITPY_PWMIO)
|
||||
CIRCUITPY_RANDOM ?= 1
|
||||
CFLAGS += -DCIRCUITPY_RANDOM=$(CIRCUITPY_RANDOM)
|
||||
|
||||
CIRCUITPY_RE ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CFLAGS += -DCIRCUITPY_RE=$(CIRCUITPY_RE)
|
||||
|
||||
# CIRCUITPY_RP2PIO is handled in the raspberrypi tree.
|
||||
# Only for rp2 chips.
|
||||
# Assume not a rp2 build.
|
||||
|
@ -1,7 +1,7 @@
|
||||
.. _module-support-matrix:
|
||||
|
||||
Support Matrix
|
||||
===============
|
||||
Module Support Matrix - Which Modules Are Available on Which Boards
|
||||
===================================================================
|
||||
|
||||
The following table lists the available built-in modules for each CircuitPython
|
||||
capable board.
|
||||
|
Loading…
x
Reference in New Issue
Block a user