Merge branch 'main' into main

This commit is contained in:
大汉子民 2022-05-20 10:04:02 +08:00 committed by GitHub
commit 525262cd9a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
94 changed files with 1317 additions and 225 deletions

5
.gitmodules vendored
View File

@ -286,6 +286,9 @@
[submodule "frozen/Adafruit_CircuitPython_FakeRequests"] [submodule "frozen/Adafruit_CircuitPython_FakeRequests"]
path = frozen/Adafruit_CircuitPython_FakeRequests path = frozen/Adafruit_CircuitPython_FakeRequests
url = https://github.com/adafruit/Adafruit_CircuitPython_FakeRequests.git url = https://github.com/adafruit/Adafruit_CircuitPython_FakeRequests.git
[submodule "frozen/pew-pewpew-lcd"]
path = frozen/pew-pewpew-lcd
url = https://github.com/pypewpew/pew-pewpew-lcd.git
[submodule "ports/espressif/boards/mixgo_ce_udisk/cp_lib"] [submodule "ports/espressif/boards/mixgo_ce_udisk/cp_lib"]
path = ports/espressif/boards/mixgo_ce_udisk/cp_lib path = ports/espressif/boards/mixgo_ce_udisk/cp_lib
url = https://github.com/dahanzimin/circuitpython_lib.git url = https://github.com/dahanzimin/circuitpython_lib.git

View File

@ -9,16 +9,15 @@
version: 2 version: 2
build: build:
os: ubuntu-20.04 os: ubuntu-20.04
tools: tools:
python: "3" python: "3"
jobs:
submodules: post_install:
include: - python tools/ci_fetch_deps.py docs HEAD
- extmod/ulab
formats: formats:
- pdf - pdf
python: python:
install: install:

View File

@ -61,6 +61,7 @@ TRANSLATE_SOURCES_EXC = -path "ports/*/build-*" \
help: help:
@echo "Please use \`make <target>' where <target> is one of" @echo "Please use \`make <target>' where <target> is one of"
@echo " fetch-submodules to fetch dependencies from submodules, run this right after you clone the repo"
@echo " html to make standalone HTML files" @echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories" @echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file" @echo " singlehtml to make a single large HTML file"

View File

@ -53,9 +53,13 @@ subprocess.check_output(["make", "stubs"])
modules_support_matrix = shared_bindings_matrix.support_matrix_by_board() modules_support_matrix = shared_bindings_matrix.support_matrix_by_board()
modules_support_matrix_reverse = defaultdict(list) modules_support_matrix_reverse = defaultdict(list)
for board, modules in modules_support_matrix.items(): for board, modules in modules_support_matrix.items():
for module in modules: for module in modules[0]:
modules_support_matrix_reverse[module].append(board) modules_support_matrix_reverse[module].append(board)
modules_support_matrix_reverse = dict((module, sorted(boards)) for module, boards in modules_support_matrix_reverse.items())
modules_support_matrix_reverse = dict(
(module, sorted(boards))
for module, boards in modules_support_matrix_reverse.items()
)
html_context = { html_context = {
'support_matrix': modules_support_matrix, 'support_matrix': modules_support_matrix,

View File

@ -57,6 +57,11 @@ bool vm_used_ble;
// } // }
// } // }
void bleio_user_reset() {
// HCI doesn't support the BLE workflow so just do a full reset.
bleio_reset();
}
// Turn off BLE on a reset or reload. // Turn off BLE on a reset or reload.
void bleio_reset() { void bleio_reset() {
// Create a UUID object for all CCCD's. // Create a UUID object for all CCCD's.

View File

@ -4,11 +4,18 @@
All builtin functions and exceptions are described here. They are also All builtin functions and exceptions are described here. They are also
available via ``builtins`` module. available via ``builtins`` module.
For more information about built-ins, see the following CPython documentation:
* `Builtin CPython Functions <https://docs.python.org/3/library/functions.html>`_
* `Builtin CPython Exceptions <https://docs.python.org/3/library/exceptions.html>`_
* `Builtin CPython Constants <https://docs.python.org/3/library/constants.html>`_
.. note:: Not all of these functions, types, exceptions, and constants are turned
on in all CircuitPython ports, for space reasons.
Functions and types Functions and types
------------------- -------------------
Not all of these functions and types are turned on in all CircuitPython ports, for space reasons.
.. function:: abs() .. function:: abs()
.. function:: all() .. function:: all()
@ -160,46 +167,77 @@ Not all of these functions and types are turned on in all CircuitPython ports, f
Exceptions Exceptions
---------- ----------
.. exception:: ArithmeticError
.. exception:: AssertionError .. exception:: AssertionError
.. exception:: AttributeError .. exception:: AttributeError
.. exception:: BaseException
.. exception:: BrokenPipeError
.. exception:: ConnectionError
.. exception:: EOFError
.. exception:: Exception .. exception:: Exception
.. exception:: ImportError .. exception:: ImportError
.. exception:: IndentationError
.. exception:: IndexError .. exception:: IndexError
.. exception:: KeyboardInterrupt .. exception:: KeyboardInterrupt
.. exception:: KeyError .. exception:: KeyError
.. exception:: LookupError
.. exception:: MemoryError .. exception:: MemoryError
.. exception:: MpyError
Not a part of the CPython standard library
.. exception:: NameError .. exception:: NameError
.. exception:: NotImplementedError .. exception:: NotImplementedError
.. exception:: OSError .. exception:: OSError
.. exception:: OverflowError
.. exception:: RuntimeError .. exception:: RuntimeError
.. exception:: ReloadException .. exception:: ReloadException
`ReloadException` is used internally to deal with soft restarts. `ReloadException` is used internally to deal with soft restarts.
Not a part of the CPython standard library
.. exception:: StopAsyncIteration
.. exception:: StopIteration .. exception:: StopIteration
.. exception:: SyntaxError .. exception:: SyntaxError
.. exception:: SystemExit .. exception:: SystemExit
|see_cpython| :py:class:`cpython:SystemExit`. .. exception:: TimeoutError
.. exception:: TypeError .. exception:: TypeError
|see_cpython| :py:class:`cpython:TypeError`. .. exception:: UnicodeError
.. exception:: ValueError .. exception:: ValueError
.. exception:: ZeroDivisionError .. exception:: ZeroDivisionError
Constants
---------
.. data:: Ellipsis
.. data:: NotImplemented

View File

@ -62,9 +62,17 @@ additional_modules = {
"fontio": "CIRCUITPY_DISPLAYIO", "fontio": "CIRCUITPY_DISPLAYIO",
"terminalio": "CIRCUITPY_DISPLAYIO", "terminalio": "CIRCUITPY_DISPLAYIO",
"adafruit_bus_device": "CIRCUITPY_BUSDEVICE", "adafruit_bus_device": "CIRCUITPY_BUSDEVICE",
"adafruit_pixelbuf": "CIRCUITPY_PIXELBUF" "adafruit_pixelbuf": "CIRCUITPY_PIXELBUF",
"usb": "CIRCUITPY_USB_HOST",
} }
frozen_excludes = ["examples", "docs", "tests", "utils", "conf.py", "setup.py"]
"""Files and dirs at the root of a frozen directory that should be ignored.
This is the same list as in the preprocess_frozen_modules script."""
repository_urls = {}
"""Cache of repository URLs for frozen modules."""
def get_circuitpython_root_dir(): def get_circuitpython_root_dir():
""" The path to the root './circuitpython' directory """ The path to the root './circuitpython' directory
""" """
@ -162,6 +170,63 @@ def get_settings_from_makefile(port_dir, board_name):
return settings return settings
def get_repository_url(directory):
if directory in repository_urls:
return repository_urls[directory]
readme = None
for readme_path in (
os.path.join(directory, "README.rst"),
os.path.join(os.path.dirname(directory), "README.rst")
):
if os.path.exists(readme_path):
readme = readme_path
break
path = None
if readme:
with open(readme, "r") as fp:
for line in fp.readlines():
if m := re.match("\s+:target:\s+(http\S+(docs.circuitpython|readthedocs)\S+)\s*", line):
path = m.group(1)
break
if m := re.search("<(http[^>]+)>", line):
path = m.group(1)
break
if path is None:
contents = subprocess.run(
["git", "remote", "get-url", "origin"],
encoding="utf-8",
errors="replace",
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=directory
)
path = contents.stdout.strip()
repository_urls[directory] = path
return path
def frozen_modules_from_dirs(frozen_mpy_dirs):
"""
Go through the list of frozen directories and extract the python modules.
Paths are of the type:
$(TOP)/frozen/Adafruit_CircuitPython_CircuitPlayground
$(TOP)/frozen/circuitpython-stage/meowbit
Python modules are at the root of the path, and are python files or directories
containing python files. Except the ones in the frozen_excludes list.
"""
frozen_modules = []
for frozen_path in filter(lambda x: x, frozen_mpy_dirs.split(" ")):
source_dir = get_circuitpython_root_dir() / frozen_path[7:]
url_repository = get_repository_url(source_dir)
for sub in source_dir.glob("*"):
if sub.name in frozen_excludes:
continue
if sub.name.endswith(".py"):
frozen_modules.append((sub.name[:-3], url_repository))
continue
if next(sub.glob("**/*.py"), None): # tests if not empty
frozen_modules.append((sub.name, url_repository))
return frozen_modules
def lookup_setting(settings, key, default=''): def lookup_setting(settings, key, default=''):
while True: while True:
value = settings.get(key, default) value = settings.get(key, default)
@ -207,8 +272,14 @@ def support_matrix_by_board(use_branded_name=True):
board_modules.append(base[module]['name']) board_modules.append(base[module]['name'])
board_modules.sort() board_modules.sort()
frozen_modules = []
if "FROZEN_MPY_DIRS" in settings:
frozen_modules = frozen_modules_from_dirs(settings["FROZEN_MPY_DIRS"])
if frozen_modules:
frozen_modules.sort()
# generate alias boards too # generate alias boards too
board_matrix = [(board_name, board_modules)] board_matrix = [(board_name, (board_modules, frozen_modules))]
if entry.name in aliases_by_board: if entry.name in aliases_by_board:
for alias in aliases_by_board[entry.name]: for alias in aliases_by_board[entry.name]:
if use_branded_name: if use_branded_name:
@ -216,7 +287,7 @@ def support_matrix_by_board(use_branded_name=True):
alias = aliases_brand_names[alias] alias = aliases_brand_names[alias]
else: else:
alias = alias.replace("_"," ").title() alias = alias.replace("_"," ").title()
board_matrix.append( (alias, board_modules) ) board_matrix.append( (alias, (board_modules, frozen_modules)) )
return board_matrix # this is now a list of (board,modules) return board_matrix # this is now a list of (board,modules)
@ -225,7 +296,6 @@ def support_matrix_by_board(use_branded_name=True):
# flatmap with comprehensions # flatmap with comprehensions
boards = dict(sorted([board for matrix in mapped_exec for board in matrix])) boards = dict(sorted([board for matrix in mapped_exec for board in matrix]))
# print(json.dumps(boards, indent=2))
return boards return boards
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -7,8 +7,21 @@
right: 10px; right: 10px;
top: 4px; top: 4px;
} }
.support-matrix-table .this_module code,
.support-matrix-table .this_module span { .support-matrix-table .reference.external {
box-sizing: border-box;
font-weight: 700;
color: #404040;
font-family: "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace;
padding: 2px 5px;
background: white;
border: 1px solid #e1e4e5;
font-size: 75%;
}
.support-matrix-table .this_module,
.support-matrix-table .this_module.reference.external,
.support-matrix-table .this_module * {
background: black; background: black;
color: white; color: white;
} }

View File

@ -44,14 +44,14 @@ $(() => {
var nvisible = 0; var nvisible = 0;
$(".support-matrix-table tbody tr").each( (index,item) => { $(".support-matrix-table tbody tr").each( (index,item) => {
var name = $(item).find("td:first-child p").html(); var name = $(item).find("td:first-child p").html();
var modules = $(item).find("a.reference.internal"); var modules = $(item).find("code, a.reference.external");
var matching_all = true; var matching_all = true;
// //
list_search.forEach((sstring) => { list_search.forEach((sstring) => {
var matching = (sstring[0] == "-"); var matching = (sstring[0] == "-");
for(var modi = 0; modi < modules.length; ++modi) { for(var modi = 0; modi < modules.length; ++modi) {
module = modules[modi]; module = modules[modi];
var mod_name = module.firstChild.firstChild.textContent; var mod_name = module.firstChild.textContent;
if(sstring[0] == "-") { if(sstring[0] == "-") {
if(mod_name.match(sstring.substr(1))) { if(mod_name.match(sstring.substr(1))) {
matching = false; matching = false;

@ -1 +1 @@
Subproject commit 2dfd61a0d5ffc8048e72d24e5ecdac9a74bb2bc3 Subproject commit 3d1aab0daf63c3b4476f73cba39cf5da49e1e4aa

@ -1 +1 @@
Subproject commit 742ac7c8fb52bb85d9fd367b60a7f80475d7ed14 Subproject commit 2d8310f19d1bdce817df13e807b409b5b057fc21

@ -1 +1 @@
Subproject commit 5fdd62ab69fda70407644acc6f9b45681da9ef68 Subproject commit 850c3dc512f7feae1eaad20bdc1c5e4c63c92f08

1
frozen/pew-pewpew-lcd Submodule

@ -0,0 +1 @@
Subproject commit 837f3e5f16accae5b3677954921b5ddd517f0799

View File

@ -113,6 +113,10 @@ msgstr "%q panjang harus >= 1"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q harus %d-%d" msgstr "%q harus %d-%d"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "%q harus <= %d" msgstr "%q harus <= %d"
@ -1768,6 +1772,10 @@ msgstr "Tidak ada pull-down pada pin; 1Mohm direkomendasikan"
msgid "No space left on device" msgid "No space left on device"
msgstr "Tidak ada ruang yang tersisa di perangkat" msgstr "Tidak ada ruang yang tersisa di perangkat"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Tidak ada file/direktori" msgstr "Tidak ada file/direktori"
@ -1880,6 +1888,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2556,10 +2568,6 @@ msgstr "Tipe bus tampilan tidak didukung"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Format tidak didukung" msgstr "Format tidak didukung"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Operasi yang tidak didukung"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""
@ -4676,6 +4684,9 @@ msgstr "zi harus berjenis float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "Zi harus berbentuk (n_section, 2)" msgstr "Zi harus berbentuk (n_section, 2)"
#~ msgid "Unsupported operation"
#~ msgstr "Operasi yang tidak didukung"
#~ msgid "" #~ msgid ""
#~ "\n" #~ "\n"
#~ "Code stopped by auto-reload.\n" #~ "Code stopped by auto-reload.\n"

View File

@ -107,6 +107,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1749,6 +1753,10 @@ msgstr ""
msgid "No space left on device" msgid "No space left on device"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "" msgstr ""
@ -1856,6 +1864,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2521,10 +2533,6 @@ msgstr ""
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr ""
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""

View File

@ -112,6 +112,10 @@ msgstr "%q délka musí být >= 1"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q musí být %d-%d" msgstr "%q musí být %d-%d"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "%q musí být <= %d" msgstr "%q musí být <= %d"
@ -1756,6 +1760,10 @@ msgstr ""
msgid "No space left on device" msgid "No space left on device"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "" msgstr ""
@ -1863,6 +1871,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2530,10 +2542,6 @@ msgstr ""
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr ""
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""

View File

@ -115,6 +115,10 @@ msgstr "%q Länge muss >= 1 sein"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q muss %d-%d sein" msgstr "%q muss %d-%d sein"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "%q muss <= %d sein" msgstr "%q muss <= %d sein"
@ -1776,6 +1780,10 @@ msgstr "Kein Pulldown-Widerstand am Pin; 1 MOhm wird vorgeschlagen"
msgid "No space left on device" msgid "No space left on device"
msgstr "Kein Speicherplatz mehr verfügbar auf dem Gerät" msgstr "Kein Speicherplatz mehr verfügbar auf dem Gerät"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Keine solche Datei/Verzeichnis" msgstr "Keine solche Datei/Verzeichnis"
@ -1889,6 +1897,10 @@ msgstr "Nur eine alarm-time kann gesetzt werden."
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "Nur eine Farbe kann transparent sein zu einer Zeit" msgstr "Nur eine Farbe kann transparent sein zu einer Zeit"
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "Vorgang oder Funktion wird nicht unterstützt" msgstr "Vorgang oder Funktion wird nicht unterstützt"
@ -2577,10 +2589,6 @@ msgstr "Nicht unterstützter display bus type"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Nicht unterstütztes Format" msgstr "Nicht unterstütztes Format"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Nicht unterstützte Operation"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "Update fehlgeschlagen" msgstr "Update fehlgeschlagen"
@ -4738,6 +4746,9 @@ msgstr "zi muss eine Gleitkommazahl sein"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi muss die Form (n_section, 2) haben" msgstr "zi muss die Form (n_section, 2) haben"
#~ msgid "Unsupported operation"
#~ msgstr "Nicht unterstützte Operation"
#~ msgid "divisor must be 4" #~ msgid "divisor must be 4"
#~ msgstr "Teiler muss 4 sein" #~ msgstr "Teiler muss 4 sein"

View File

@ -107,6 +107,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1749,6 +1753,10 @@ msgstr ""
msgid "No space left on device" msgid "No space left on device"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "" msgstr ""
@ -1856,6 +1864,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2521,10 +2533,6 @@ msgstr ""
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr ""
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""

View File

@ -114,6 +114,10 @@ msgstr "%q length must be >= 1"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q must be %d-%d" msgstr "%q must be %d-%d"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1762,6 +1766,10 @@ msgstr "No pulldown on pin; 1Mohm recommended"
msgid "No space left on device" msgid "No space left on device"
msgstr "No space left on device" msgstr "No space left on device"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "No such file/directory" msgstr "No such file/directory"
@ -1873,6 +1881,10 @@ msgstr "Only one alarm.time alarm can be set."
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "Only one colour can be transparent at a time" msgstr "Only one colour can be transparent at a time"
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "Operation or feature not supported" msgstr "Operation or feature not supported"
@ -2552,10 +2564,6 @@ msgstr "Unsupported display bus type"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Unsupported format" msgstr "Unsupported format"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Unsupported operation"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "Update failed" msgstr "Update failed"
@ -4677,6 +4685,9 @@ msgstr "zi must be of float type"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi must be of shape (n_section, 2)" msgstr "zi must be of shape (n_section, 2)"
#~ msgid "Unsupported operation"
#~ msgstr "Unsupported operation"
#~ msgid "" #~ msgid ""
#~ "\n" #~ "\n"
#~ "Code stopped by auto-reload.\n" #~ "Code stopped by auto-reload.\n"

View File

@ -116,6 +116,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q debe ser %d-%d" msgstr "%q debe ser %d-%d"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1784,6 +1788,10 @@ msgstr "No hay pulldown en el pin; 1Mohm recomendado"
msgid "No space left on device" msgid "No space left on device"
msgstr "No queda espacio en el dispositivo" msgstr "No queda espacio en el dispositivo"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "No existe el archivo/directorio" msgstr "No existe el archivo/directorio"
@ -1897,6 +1905,10 @@ msgstr "Solamente una alarm.time puede ser configurada."
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "Solo un color puede ser transparente a la vez" msgstr "Solo un color puede ser transparente a la vez"
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "Operación no característica no soportada" msgstr "Operación no característica no soportada"
@ -2583,10 +2595,6 @@ msgstr "Sin capacidad de bus tipo display"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Formato no soportado" msgstr "Formato no soportado"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Operación no soportada"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "La actualización fallo" msgstr "La actualización fallo"
@ -4724,6 +4732,9 @@ msgstr "zi debe ser de tipo flotante"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi debe ser una forma (n_section,2)" msgstr "zi debe ser una forma (n_section,2)"
#~ msgid "Unsupported operation"
#~ msgstr "Operación no soportada"
#~ msgid "" #~ msgid ""
#~ "\n" #~ "\n"
#~ "Code stopped by auto-reload.\n" #~ "Code stopped by auto-reload.\n"

View File

@ -108,6 +108,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1764,6 +1768,10 @@ msgstr ""
msgid "No space left on device" msgid "No space left on device"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Walang file/directory" msgstr "Walang file/directory"
@ -1874,6 +1882,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2543,10 +2555,6 @@ msgstr "Hindi supportadong tipo ng bitmap"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Hindi supportadong format" msgstr "Hindi supportadong format"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Hindi sinusuportahang operasyon"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""
@ -4687,6 +4695,9 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "" msgstr ""
#~ msgid "Unsupported operation"
#~ msgstr "Hindi sinusuportahang operasyon"
#~ msgid "Brightness must be between 0 and 255" #~ msgid "Brightness must be between 0 and 255"
#~ msgstr "Ang liwanag ay dapat sa gitna ng 0 o 255" #~ msgstr "Ang liwanag ay dapat sa gitna ng 0 o 255"

View File

@ -116,6 +116,10 @@ msgstr "La longueur de %q doit être >= 1"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q doit être %d-%d" msgstr "%q doit être %d-%d"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "%q doit être <= %d" msgstr "%q doit être <= %d"
@ -1795,6 +1799,10 @@ msgstr "Pas de pulldown sur la broche ; 1Mohm recommandé"
msgid "No space left on device" msgid "No space left on device"
msgstr "Aucun espace libre sur le dispositif" msgstr "Aucun espace libre sur le dispositif"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Fichier/répertoire introuvable" msgstr "Fichier/répertoire introuvable"
@ -1908,6 +1916,10 @@ msgstr "Seulement une alarme alarm.time peut être réglée."
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "Une seule couleur peut être transparente à la fois" msgstr "Une seule couleur peut être transparente à la fois"
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "Opération ou fonction non supportée" msgstr "Opération ou fonction non supportée"
@ -2600,10 +2612,6 @@ msgstr "Type de bus d'affichage non supporté"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Format non supporté" msgstr "Format non supporté"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Opération non supportée"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "Mise-à-jour échouée" msgstr "Mise-à-jour échouée"
@ -4755,6 +4763,9 @@ msgstr "zi doit être de type float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi doit être de forme (n_section, 2)" msgstr "zi doit être de forme (n_section, 2)"
#~ msgid "Unsupported operation"
#~ msgstr "Opération non supportée"
#~ msgid "divisor must be 4" #~ msgid "divisor must be 4"
#~ msgstr "le diviseur doit être 4" #~ msgstr "le diviseur doit être 4"

View File

@ -107,6 +107,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1749,6 +1753,10 @@ msgstr ""
msgid "No space left on device" msgid "No space left on device"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "" msgstr ""
@ -1856,6 +1864,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2521,10 +2533,6 @@ msgstr ""
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr ""
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""

View File

@ -114,6 +114,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1773,6 +1777,10 @@ msgstr ""
msgid "No space left on device" msgid "No space left on device"
msgstr "Non che spazio sul dispositivo" msgstr "Non che spazio sul dispositivo"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Nessun file/directory esistente" msgstr "Nessun file/directory esistente"
@ -1884,6 +1892,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2560,10 +2572,6 @@ msgstr "tipo di bitmap non supportato"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Formato non supportato" msgstr "Formato non supportato"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Operazione non supportata"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""
@ -4707,6 +4715,9 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "" msgstr ""
#~ msgid "Unsupported operation"
#~ msgstr "Operazione non supportata"
#~ msgid "" #~ msgid ""
#~ "\n" #~ "\n"
#~ "Code stopped by auto-reload.\n" #~ "Code stopped by auto-reload.\n"

View File

@ -112,6 +112,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1760,6 +1764,10 @@ msgstr "ピンにプルダウンがありません。1Mオーム推奨"
msgid "No space left on device" msgid "No space left on device"
msgstr "デバイスに空き容量が残っていません" msgstr "デバイスに空き容量が残っていません"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "指定されたファイル/ディレクトリはありません" msgstr "指定されたファイル/ディレクトリはありません"
@ -1869,6 +1877,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2536,10 +2548,6 @@ msgstr ""
msgid "Unsupported format" msgid "Unsupported format"
msgstr "非対応の形式" msgstr "非対応の形式"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "非対応の操作"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""
@ -4663,6 +4671,9 @@ msgstr "ziはfloat値でなければなりません"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "" msgstr ""
#~ msgid "Unsupported operation"
#~ msgstr "非対応の操作"
#~ msgid "Brightness must be between 0 and 255" #~ msgid "Brightness must be between 0 and 255"
#~ msgstr "Brightnessは0から255の間でなければなりません" #~ msgstr "Brightnessは0から255の間でなければなりません"

View File

@ -108,6 +108,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1752,6 +1756,10 @@ msgstr ""
msgid "No space left on device" msgid "No space left on device"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "" msgstr ""
@ -1859,6 +1867,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2525,10 +2537,6 @@ msgstr ""
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr ""
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""

View File

@ -110,6 +110,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1761,6 +1765,10 @@ msgstr "Geen pulldown op pin; 1MOhm aangeraden"
msgid "No space left on device" msgid "No space left on device"
msgstr "Geen ruimte meer beschikbaar op apparaat" msgstr "Geen ruimte meer beschikbaar op apparaat"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Bestand/map bestaat niet" msgstr "Bestand/map bestaat niet"
@ -1874,6 +1882,10 @@ msgstr "Slechts één alarm.time alarm kan worden ingesteld."
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "Er kan maar één kleur per keer transparant zijn" msgstr "Er kan maar één kleur per keer transparant zijn"
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2549,10 +2561,6 @@ msgstr "Niet-ondersteund beeldscherm bus type"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Niet-ondersteunde format" msgstr "Niet-ondersteunde format"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Niet-ondersteunde operatie"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "Update Mislukt" msgstr "Update Mislukt"
@ -4683,6 +4691,9 @@ msgstr "zi moet van type float zijn"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi moet vorm (n_section, 2) hebben" msgstr "zi moet vorm (n_section, 2) hebben"
#~ msgid "Unsupported operation"
#~ msgstr "Niet-ondersteunde operatie"
#~ msgid "Brightness must be between 0 and 255" #~ msgid "Brightness must be between 0 and 255"
#~ msgstr "Helderheid moet tussen de 0 en 255 liggen" #~ msgstr "Helderheid moet tussen de 0 en 255 liggen"

View File

@ -112,6 +112,10 @@ msgstr ""
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr ""
@ -1760,6 +1764,10 @@ msgstr ""
msgid "No space left on device" msgid "No space left on device"
msgstr "Brak miejsca" msgstr "Brak miejsca"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Brak pliku/katalogu" msgstr "Brak pliku/katalogu"
@ -1867,6 +1875,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "W danym momencie przezroczysty może być tylko jeden kolor" msgstr "W danym momencie przezroczysty może być tylko jeden kolor"
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2532,10 +2544,6 @@ msgstr "Zły typ magistrali wyświetlaczy"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Zły format" msgstr "Zły format"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Zła operacja"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""
@ -4654,6 +4662,9 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "" msgstr ""
#~ msgid "Unsupported operation"
#~ msgstr "Zła operacja"
#~ msgid "Brightness must be between 0 and 255" #~ msgid "Brightness must be between 0 and 255"
#~ msgstr "Jasność musi być pomiędzy 0 a 255" #~ msgstr "Jasność musi być pomiędzy 0 a 255"

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2022-05-08 16:37+0000\n" "PO-Revision-Date: 2022-05-14 12:35+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n" "Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: pt_BR\n" "Language: pt_BR\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.12.1\n" "X-Generator: Weblate 4.13-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -116,6 +116,10 @@ msgstr "o comprimento %q deve ser >=1"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "o %q deve ser %d-%d" msgstr "o %q deve ser %d-%d"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr "%q deve ser 1 quando %q for verdadeiro"
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "%q deve ser <= %d" msgstr "%q deve ser <= %d"
@ -1790,6 +1794,10 @@ msgstr "Não há pulldown no pino; É recomendável utilizar um resistor de 1M o
msgid "No space left on device" msgid "No space left on device"
msgstr "Não resta espaço no dispositivo" msgstr "Não resta espaço no dispositivo"
#: py/moduerrno.c
msgid "No such device"
msgstr "Não existe tal dispositivo"
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Este arquivo/diretório não existe" msgstr "Este arquivo/diretório não existe"
@ -1902,6 +1910,10 @@ msgstr "Apenas um alarme alarm.time pode ser definido."
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "Apenas uma cor pode ser transparente de cada vez" msgstr "Apenas uma cor pode ser transparente de cada vez"
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr "A operação não é permitida"
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "A operação ou o recurso não é suportado" msgstr "A operação ou o recurso não é suportado"
@ -2596,10 +2608,6 @@ msgstr "Não há suporte para o tipo do display bus"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Formato não suportado" msgstr "Formato não suportado"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Operação não suportada"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "A atualização falou" msgstr "A atualização falou"
@ -4748,6 +4756,9 @@ msgstr "zi deve ser de um tipo float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi deve estar na forma (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)"
#~ msgid "Unsupported operation"
#~ msgstr "Operação não suportada"
#~ msgid "divisor must be 4" #~ msgid "divisor must be 4"
#~ msgstr "o divisor deve ser 4" #~ msgstr "o divisor deve ser 4"

View File

@ -115,6 +115,10 @@ msgstr "Длинна %q должна быть >= 1"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q должен быть %d-%d" msgstr "%q должен быть %d-%d"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "%q должен быть <= %d" msgstr "%q должен быть <= %d"
@ -1787,6 +1791,10 @@ msgstr "Отсутствует подтяжка к земле на пине; Р
msgid "No space left on device" msgid "No space left on device"
msgstr "На устройстве не осталось свободного места" msgstr "На устройстве не осталось свободного места"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Файл/директория не существует" msgstr "Файл/директория не существует"
@ -1898,6 +1906,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2570,10 +2582,6 @@ msgstr ""
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr ""
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2022-04-26 15:40+0000\n" "PO-Revision-Date: 2022-05-14 12:35+0000\n"
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n" "Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: sv\n" "Language: sv\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.12.1-dev\n" "X-Generator: Weblate 4.13-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -115,6 +115,10 @@ msgstr "längden på %q måste vara >= 1"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q måste vara %d-%d" msgstr "%q måste vara %d-%d"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr "%q måste vara 1 när %q är sann"
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "%q måste vara <= %d" msgstr "%q måste vara <= %d"
@ -1564,7 +1568,7 @@ msgstr "Datastorlek matchar inte"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Mismatched swap flag" msgid "Mismatched swap flag"
msgstr "" msgstr "Felaktig swapflagga"
#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/SPI.c
msgid "Missing MISO or MOSI Pin" msgid "Missing MISO or MOSI Pin"
@ -1771,6 +1775,10 @@ msgstr "Ingen pulldown på pinnen; 1Mohm rekommenderas"
msgid "No space left on device" msgid "No space left on device"
msgstr "Inget utrymme kvar på enheten" msgstr "Inget utrymme kvar på enheten"
#: py/moduerrno.c
msgid "No such device"
msgstr "Ingen sådan enhet"
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Ingen sådan fil/katalog" msgstr "Ingen sådan fil/katalog"
@ -1883,6 +1891,10 @@ msgstr "Endast ett alarm.time kan ställas in."
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "Bara en färg kan vara genomskinlig i taget" msgstr "Bara en färg kan vara genomskinlig i taget"
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr "Åtgärden inte tillåten"
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "Operation eller funktion stöds inte" msgstr "Operation eller funktion stöds inte"
@ -2567,10 +2579,6 @@ msgstr "Busstyp för display stöds inte"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Formatet stöds inte" msgstr "Formatet stöds inte"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Åtgärd som inte stöds"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "Uppdateringen misslyckades" msgstr "Uppdateringen misslyckades"
@ -4705,6 +4713,9 @@ msgstr "zi måste vara av typ float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi måste vara i formen (n_section, 2)" msgstr "zi måste vara i formen (n_section, 2)"
#~ msgid "Unsupported operation"
#~ msgstr "Åtgärd som inte stöds"
#~ msgid "divisor must be 4" #~ msgid "divisor must be 4"
#~ msgstr "divisor måste vara 4" #~ msgstr "divisor måste vara 4"

View File

@ -119,6 +119,10 @@ msgstr "%q boyutu >=1 olmalıdır"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q, %d-%d olmalıdır" msgstr "%q, %d-%d olmalıdır"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "%q <= %d olmalıdır" msgstr "%q <= %d olmalıdır"
@ -1766,6 +1770,10 @@ msgstr ""
msgid "No space left on device" msgid "No space left on device"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "" msgstr ""
@ -1873,6 +1881,10 @@ msgstr ""
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "" msgstr ""
@ -2541,10 +2553,6 @@ msgstr ""
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr ""
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""

View File

@ -118,6 +118,10 @@ msgstr "%q cháng dù bì xū >= 1"
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
msgstr "%q bì xū wéi %d-%d" msgstr "%q bì xū wéi %d-%d"
#: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True"
msgstr ""
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "%q bì xū <= %d" msgstr "%q bì xū <= %d"
@ -1784,6 +1788,10 @@ msgstr "Yǐn jiǎo shàng méiyǒu xiàlā; 1Mohm tuījiàn"
msgid "No space left on device" msgid "No space left on device"
msgstr "Shèbèi shàng méiyǒu kònggé" msgstr "Shèbèi shàng méiyǒu kònggé"
#: py/moduerrno.c
msgid "No such device"
msgstr ""
#: py/moduerrno.c #: py/moduerrno.c
msgid "No such file/directory" msgid "No such file/directory"
msgstr "Méiyǒu cǐ lèi wénjiàn/mùlù" msgstr "Méiyǒu cǐ lèi wénjiàn/mùlù"
@ -1896,6 +1904,10 @@ msgstr "zhǐ néng shè zhì yí gè bào jǐng."
msgid "Only one color can be transparent at a time" msgid "Only one color can be transparent at a time"
msgstr "Yīcì zhǐ néng yǒuyī zhǒng yánsè shì tòumíng de" msgstr "Yīcì zhǐ néng yǒuyī zhǒng yánsè shì tòumíng de"
#: py/moduerrno.c
msgid "Operation not permitted"
msgstr ""
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c #: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
msgid "Operation or feature not supported" msgid "Operation or feature not supported"
msgstr "bù zhī chí cāo zuò huò gōng néng" msgstr "bù zhī chí cāo zuò huò gōng néng"
@ -2578,10 +2590,6 @@ msgstr "Bù zhīchí de gōnggòng qìchē lèixíng"
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Bù zhīchí de géshì" msgstr "Bù zhīchí de géshì"
#: py/moduerrno.c
msgid "Unsupported operation"
msgstr "Bù zhīchí de cāozuò"
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "gēng xīn shī bài" msgstr "gēng xīn shī bài"
@ -4717,6 +4725,9 @@ msgstr "zi bìxū wèi fú diǎn xíng"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)" msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)"
#~ msgid "Unsupported operation"
#~ msgstr "Bù zhīchí de cāozuò"
#~ msgid "divisor must be 4" #~ msgid "divisor must be 4"
#~ msgstr "èr chóng zòu bì xū shì 4" #~ msgstr "èr chóng zòu bì xū shì 4"

21
main.c
View File

@ -277,10 +277,10 @@ STATIC void cleanup_after_vm(supervisor_allocation *heap, mp_obj_t exception) {
memorymonitor_reset(); memorymonitor_reset();
#endif #endif
filesystem_flush(); // Disable user related BLE state that uses the micropython heap.
stop_mp(); #if CIRCUITPY_BLEIO
free_memory(heap); bleio_user_reset();
supervisor_move_memory(); #endif
#if CIRCUITPY_CANIO #if CIRCUITPY_CANIO
common_hal_canio_reset(); common_hal_canio_reset();
@ -297,6 +297,12 @@ STATIC void cleanup_after_vm(supervisor_allocation *heap, mp_obj_t exception) {
#endif #endif
reset_port(); reset_port();
reset_board(); reset_board();
// Free the heap last because other modules may reference heap memory and need to shut down.
filesystem_flush();
stop_mp();
free_memory(heap);
supervisor_move_memory();
} }
STATIC void print_code_py_status_message(safe_mode_t safe_mode) { STATIC void print_code_py_status_message(safe_mode_t safe_mode) {
@ -645,6 +651,12 @@ STATIC bool run_code_py(safe_mode_t safe_mode, bool first_run, bool *simulate_re
// Done waiting, start the board back up. // Done waiting, start the board back up.
// We delay resetting BLE until after the wait in case we're transferring
// more files over.
#if CIRCUITPY_BLEIO
bleio_reset();
#endif
// free code allocation if unused // free code allocation if unused
if ((next_code_options & next_code_stickiness_situation) == 0) { if ((next_code_options & next_code_stickiness_situation) == 0) {
free_memory(next_code_allocation); free_memory(next_code_allocation);
@ -888,6 +900,7 @@ int __attribute__((used)) main(void) {
serial_init(); serial_init();
#if CIRCUITPY_BLEIO #if CIRCUITPY_BLEIO
bleio_reset();
supervisor_bluetooth_enable_workflow(); supervisor_bluetooth_enable_workflow();
supervisor_start_bluetooth(); supervisor_start_bluetooth();
#endif #endif

View File

@ -12,6 +12,7 @@ EXTERNAL_FLASH_DEVICES = "S25FL216K, GD25Q16C"
# Turn off features and optimizations for displayio build to make room for additional frozen libs. # Turn off features and optimizations for displayio build to make room for additional frozen libs.
LONGINT_IMPL = NONE LONGINT_IMPL = NONE
CIRCUITPY_KEYPAD = 0 CIRCUITPY_KEYPAD = 0
CIRCUITPY_ONEWIREIO = 0
CIRCUITPY_PIXELBUF = 0 CIRCUITPY_PIXELBUF = 0
CIRCUITPY_ROTARYIO = 0 CIRCUITPY_ROTARYIO = 0
CIRCUITPY_RTC = 0 CIRCUITPY_RTC = 0

View File

@ -0,0 +1,104 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017 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/board/__init__.h"
#include "shared-bindings/displayio/FourWire.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
#include "shared-bindings/busio/SPI.h"
displayio_fourwire_obj_t board_display_obj;
#define DELAY 0x80
uint8_t display_init_sequence[] = {
0xe2, 0, // reset
0x2f, 0, // power on
0x80, 0, // contrast 0
0xa4, 0, // display normal
0xaf, 0, // display on
0x40, 0, // start line 0
};
void board_init(void) {
busio_spi_obj_t *spi = &displays[0].fourwire_bus.inline_bus;
common_hal_busio_spi_construct(spi, &pin_PA23, &pin_PA22, NULL, false);
common_hal_busio_spi_never_reset(spi);
displayio_fourwire_obj_t *bus = &displays[0].fourwire_bus;
bus->base.type = &displayio_fourwire_type;
common_hal_displayio_fourwire_construct(bus,
spi,
NULL, // Command or data
&pin_PA19, // Chip select
&pin_PA18, // Reset
40000000LL, // Baudrate
0, // Polarity
0); // Phase
displayio_display_obj_t *display = &displays[0].display;
display->base.type = &displayio_display_type;
common_hal_displayio_display_construct(display,
bus,
96, // Width
68, // Height
0, // column start
0, // row start
180, // rotation
1, // Color depth
true, // grayscale
false, // pixels in byte share row. Only used with depth < 8
1, // bytes per cell. Only valid for depths < 8
false, // reverse_pixels_in_byte. Only valid for depths < 8
false, // reverse_pixels_in_word
0, // Set column command
0, // Set row command
0, // Write memory command
display_init_sequence,
sizeof(display_init_sequence),
NULL, // &pin_PA17, // brightness pin
NO_BRIGHTNESS_COMMAND,
0.0f, // brightness
false, // auto_brightness
false, // single_byte_bounds
true, // data as commands
true, // auto_refresh
2, // native_frames_per_second
true, // backlight_on_high
true); // SH1107_addressing
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}
void board_deinit(void) {
}

View File

@ -0,0 +1,16 @@
#define MICROPY_HW_BOARD_NAME "PewPew LCD"
#define MICROPY_HW_MCU_NAME "samd21e18"
#define MICROPY_PORT_A (0)
#define MICROPY_PORT_B (0)
#define MICROPY_PORT_C (0)
#define CIRCUITPY_INTERNAL_NVM_SIZE 0
#define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (48 * 1024)
// USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1
#define SAMD21_BOD33_LEVEL (6)
#define CIRCUITPY_REPL_LOGO (0)

View File

@ -0,0 +1,57 @@
USB_VID = 0x1209
USB_PID = 0xD1B5
USB_PRODUCT = "PewPew LCD"
USB_MANUFACTURER = "Radomir Dopieralski"
CHIP_VARIANT = SAMD21E18A
CHIP_FAMILY = samd21
INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = NONE
CIRCUITPY_FULL_BUILD = 0
CIRCUITPY_DISPLAYIO = 1
CIRCUITPY_TOUCHIO = 1
CIRCUITPY_PWMIO = 1
CIRCUITPY_MATH = 0
CIRCUITPY_ANALOGIO = 0
CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_AUDIOBUSIO_I2SOUT = 0
CIRCUITPY_AUDIOCORE = 0
CIRCUITPY_AUDIOIO = 0
CIRCUITPY_AUDIOMIXER = 0
CIRCUITPY_AUDIOMP3 = 0
CIRCUITPY_AUDIOPWMIO = 0
CIRCUITPY_BITBANG_APA102 = 0
CIRCUITPY_BITBANGIO = 0
CIRCUITPY_BITBANGIO = 0
CIRCUITPY_BITMAPTOOLS = 0
CIRCUITPY_BITMAPTOOLS = 0
CIRCUITPY_BLEIO = 0
CIRCUITPY_BUSDEVICE = 0
CIRCUITPY_FRAMEBUFFERIO = 0
CIRCUITPY_FREQUENCYIO = 0
CIRCUITPY_I2CPERIPHERAL = 0
CIRCUITPY_MSGPACK = 0
CIRCUITPY_NEOPIXEL_WRITE = 0
CIRCUITPY_NVM = 0
CIRCUITPY_PIXELBUF = 0
CIRCUITPY_PS2IO = 0
CIRCUITPY_PULSEIO = 0
CIRCUITPY_RGBMATRIX = 0
CIRCUITPY_ROTARYIO = 0
CIRCUITPY_ROTARYIO = 0
CIRCUITPY_RTC = 0
CIRCUITPY_SAMD = 0
CIRCUITPY_ULAB = 0
CIRCUITPY_USB_HID = 0
CIRCUITPY_USB_MIDI = 0
CIRCUITPY_USB_VENDOR = 0
CIRCUITPY_VECTORIO = 0
CIRCUITPY_RAINBOWIO = 0
CIRCUITPY_DISPLAY_FONT = $(TOP)/ports/atmel-samd/boards/ugame10/brutalist-6.bdf
OPTIMIZATION_FLAGS = -Os
FROZEN_MPY_DIRS += $(TOP)/frozen/pew-pewpew-lcd

View File

@ -0,0 +1,28 @@
#include "shared-bindings/board/__init__.h"
#include "shared-module/displayio/__init__.h"
STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR__SCK), MP_ROM_PTR(&pin_PA23) },
{ MP_ROM_QSTR(MP_QSTR__MOSI), MP_ROM_PTR(&pin_PA22) },
{ MP_ROM_QSTR(MP_QSTR__CS), MP_ROM_PTR(&pin_PA19) },
{ MP_ROM_QSTR(MP_QSTR__RST), MP_ROM_PTR(&pin_PA18) },
{ MP_ROM_QSTR(MP_QSTR__BL), MP_ROM_PTR(&pin_PA17) },
{ MP_ROM_QSTR(MP_QSTR__UP), MP_ROM_PTR(&pin_PA03) },
{ MP_ROM_QSTR(MP_QSTR__DOWN), MP_ROM_PTR(&pin_PA05) },
{ MP_ROM_QSTR(MP_QSTR__LEFT), MP_ROM_PTR(&pin_PA04) },
{ MP_ROM_QSTR(MP_QSTR__RIGHT), MP_ROM_PTR(&pin_PA02) },
{ MP_ROM_QSTR(MP_QSTR__O), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR__X), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_P1), MP_ROM_PTR(&pin_PA30) },
{ MP_ROM_QSTR(MP_QSTR_P2), MP_ROM_PTR(&pin_PA31) },
{ MP_ROM_QSTR(MP_QSTR_P3), MP_ROM_PTR(&pin_PA08) },
{ MP_ROM_QSTR(MP_QSTR_P4), MP_ROM_PTR(&pin_PA09) },
{ MP_ROM_QSTR(MP_QSTR_P5), MP_ROM_PTR(&pin_PA10) },
{ MP_ROM_QSTR(MP_QSTR_P6), MP_ROM_PTR(&pin_PA11) },
{ MP_ROM_QSTR(MP_QSTR_P7), MP_ROM_PTR(&pin_PA14) },
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)}
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -37,7 +37,7 @@
{.scl = &pin_GPIO40, .sda = &pin_GPIO41}} {.scl = &pin_GPIO40, .sda = &pin_GPIO41}}
#define CIRCUITPY_BOARD_SPI (1) #define CIRCUITPY_BOARD_SPI (1)
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO35, .mosi = &pin_GPIO34, .miso = &pin_GPIO36}} #define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO36, .mosi = &pin_GPIO35, .miso = &pin_GPIO37}}
#define CIRCUITPY_BOARD_UART (1) #define CIRCUITPY_BOARD_UART (1)
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO5, .rx = &pin_GPIO16}} #define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO5, .rx = &pin_GPIO16}}

View File

@ -36,15 +36,15 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_GPIO16) }, { MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_GPIO16) }, { MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO34) }, { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_D34), MP_ROM_PTR(&pin_GPIO34) },
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_D35), MP_ROM_PTR(&pin_GPIO35) }, { MP_ROM_QSTR(MP_QSTR_D35), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO36) }, { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_D36), MP_ROM_PTR(&pin_GPIO36) }, { MP_ROM_QSTR(MP_QSTR_D36), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO37) },
{ MP_ROM_QSTR(MP_QSTR_D37), MP_ROM_PTR(&pin_GPIO37) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO38) }, { MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO39) }, { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO39) },

View File

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

View File

@ -0,0 +1,45 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2019 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.
*/
// Micropython setup
#define MICROPY_HW_BOARD_NAME "Cytron Maker Feather AIoT S3"
#define MICROPY_HW_MCU_NAME "ESP32S3"
#define MICROPY_HW_NEOPIXEL (&pin_GPIO46)
#define CIRCUITPY_STATUS_LED_POWER (&pin_GPIO13)
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO41)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO42)
#define DEFAULT_SPI_BUS_SCK (&pin_GPIO6)
#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO10)
#define DEFAULT_SPI_BUS_MISO (&pin_GPIO5)
#define DEFAULT_UART_BUS_RX (&pin_GPIO11)
#define DEFAULT_UART_BUS_TX (&pin_GPIO4)
#define DOUBLE_TAP_PIN (&pin_GPIO17)

View File

@ -0,0 +1,20 @@
USB_VID = 0x303A
USB_PID = 0x80F9
USB_PRODUCT = "Cytron Maker Feather AIoT S3"
USB_MANUFACTURER = "Cytron"
IDF_TARGET = esp32s3
INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = MPZ
# The default queue depth of 16 overflows on release builds,
# so increase it to 32.
CFLAGS += -DCFG_TUD_TASK_QUEUE_SZ=32
CIRCUITPY_ESP_FLASH_MODE=dio
CIRCUITPY_ESP_FLASH_FREQ=80m
CIRCUITPY_ESP_FLASH_SIZE=8MB
# Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

View File

@ -0,0 +1,90 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_D17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_VIN), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_VBATT), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_D18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_D21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_D33), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_D34), MP_ROM_PTR(&pin_GPIO34) },
{ MP_ROM_QSTR(MP_QSTR_D35), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_D36), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_D37), MP_ROM_PTR(&pin_GPIO37) },
{ MP_ROM_QSTR(MP_QSTR_VP_EN), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_D38), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_BUZZER), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_D39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_D40), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_D41), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_D42), MP_ROM_PTR(&pin_GPIO42) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO42) },
{ MP_ROM_QSTR(MP_QSTR_D45), MP_ROM_PTR(&pin_GPIO45) },
{ MP_ROM_QSTR(MP_QSTR_RGB), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_D46), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_STEMMA_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_module_globals_table);

View File

@ -0,0 +1,34 @@
CONFIG_ESP32S3_SPIRAM_SUPPORT=y
#
# SPI RAM config
#
# CONFIG_SPIRAM_MODE_QUAD is not set
CONFIG_SPIRAM_MODE_OCT=y
# CONFIG_SPIRAM_TYPE_AUTO is not set
CONFIG_SPIRAM_TYPE_ESPPSRAM64=y
CONFIG_SPIRAM_SIZE=8388608
# end of SPI RAM config
CONFIG_DEFAULT_PSRAM_CLK_IO=30
#
# PSRAM Clock and CS IO for ESP32S3
#
CONFIG_DEFAULT_PSRAM_CS_IO=26
# end of PSRAM Clock and CS IO for ESP32S3
# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set
# CONFIG_SPIRAM_RODATA is not set
CONFIG_SPIRAM_SPEED_80M=y
# CONFIG_SPIRAM_SPEED_40M is not set
CONFIG_SPIRAM=y
CONFIG_SPIRAM_BOOT_INIT=y
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
CONFIG_SPIRAM_USE_MEMMAP=y
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
# CONFIG_SPIRAM_USE_MALLOC is not set
CONFIG_SPIRAM_MEMTEST=y
#
# LWIP
#
CONFIG_LWIP_LOCAL_HOSTNAME="espressif-esp32s3"
# end of LWIP

View File

@ -0,0 +1,17 @@
#include "shared-bindings/microcontroller/Pin.h"
#include "supervisor/board.h"
#include "components/driver/include/driver/gpio.h"
void board_init(void) {
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}
void board_deinit(void) {
}

View File

@ -0,0 +1,13 @@
// Define board
#define MICROPY_HW_BOARD_NAME "LILYGO TTGO T-OI PLUS"
#define MICROPY_HW_MCU_NAME "ESP32-C3"
#define MICROPY_HW_LED_STATUS (&pin_GPIO3)
// I2C
#define CIRCUITPY_BOARD_I2C (1)
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO18, .sda = &pin_GPIO19}}
// UART
#define CIRCUITPY_BOARD_UART (1)
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO21, .rx = &pin_GPIO20}}

View File

@ -0,0 +1,10 @@
CIRCUITPY_CREATOR_ID = 0xC3C30000
CIRCUITPY_CREATION_ID = 0x00C30002
IDF_TARGET = esp32c3
INTERNAL_FLASH_FILESYSTEM = 1
CIRCUITPY_ESP_FLASH_MODE = dio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB

View File

@ -0,0 +1,29 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -0,0 +1,5 @@
#
# LWIP
#
CONFIG_LWIP_LOCAL_HOSTNAME="LILYGO TTGO T-OI PLUS"
# end of LWIP

View File

@ -574,6 +574,9 @@ void common_hal_bleio_adapter_start_advertising(bleio_adapter_obj_t *self, bool
} }
void common_hal_bleio_adapter_stop_advertising(bleio_adapter_obj_t *self) { void common_hal_bleio_adapter_stop_advertising(bleio_adapter_obj_t *self) {
if (!common_hal_bleio_adapter_get_advertising(self)) {
return;
}
int err_code = ble_gap_ext_adv_stop(0); int err_code = ble_gap_ext_adv_stop(0);
self->user_advertising = false; self->user_advertising = false;

View File

@ -42,6 +42,17 @@
// #include "common-hal/_bleio/bonding.h" // #include "common-hal/_bleio/bonding.h"
#include "common-hal/_bleio/ble_events.h" #include "common-hal/_bleio/ble_events.h"
void bleio_user_reset() {
// Stop any user scanning or advertising.
common_hal_bleio_adapter_stop_scan(&common_hal_bleio_adapter_obj);
common_hal_bleio_adapter_stop_advertising(&common_hal_bleio_adapter_obj);
ble_event_remove_heap_handlers();
// Maybe start advertising the BLE workflow.
supervisor_bluetooth_background();
}
// Turn off BLE on a reset or reload. // Turn off BLE on a reset or reload.
void bleio_reset() { void bleio_reset() {
// Set this explicitly to save data. // Set this explicitly to save data.

View File

@ -31,6 +31,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include "py/gc.h"
#include "py/misc.h" #include "py/misc.h"
#include "py/mpstate.h" #include "py/mpstate.h"
#include "py/runtime.h" #include "py/runtime.h"
@ -44,6 +45,17 @@ void ble_event_reset(void) {
MP_STATE_VM(ble_event_handler_entries) = NULL; MP_STATE_VM(ble_event_handler_entries) = NULL;
} }
void ble_event_remove_heap_handlers(void) {
ble_event_handler_entry_t *it = MP_STATE_VM(ble_event_handler_entries);
while (it != NULL) {
// If the param is on the heap, then delete the handler.
if (HEAP_PTR(it->param)) {
ble_event_remove_handler(it->func, it->param);
}
it = it->next;
}
}
void ble_event_add_handler_entry(ble_event_handler_entry_t *entry, void ble_event_add_handler_entry(ble_event_handler_entry_t *entry,
ble_gap_event_fn *func, void *param) { ble_gap_event_fn *func, void *param) {
ble_event_handler_entry_t *it = MP_STATE_VM(ble_event_handler_entries); ble_event_handler_entry_t *it = MP_STATE_VM(ble_event_handler_entries);

View File

@ -40,6 +40,7 @@ typedef struct ble_event_handler_entry {
} ble_event_handler_entry_t; } ble_event_handler_entry_t;
void ble_event_reset(void); void ble_event_reset(void);
void ble_event_remove_heap_handlers(void);
void ble_event_add_handler(ble_gap_event_fn *func, void *param); void ble_event_add_handler(ble_gap_event_fn *func, void *param);
void ble_event_remove_handler(ble_gap_event_fn *func, void *param); void ble_event_remove_handler(ble_gap_event_fn *func, void *param);

View File

@ -283,10 +283,6 @@ void reset_port(void) {
watchdog_reset(); watchdog_reset();
#endif #endif
#if CIRCUITPY_BLEIO
bleio_reset();
#endif
#if CIRCUITPY_WIFI #if CIRCUITPY_WIFI
wifi_reset(); wifi_reset();
#endif #endif

View File

@ -35,6 +35,7 @@
#include "nrf_sdm.h" #include "nrf_sdm.h"
#include "nrf_soc.h" #include "nrf_soc.h"
#include "nrfx_power.h" #include "nrfx_power.h"
#include "py/gc.h"
#include "py/misc.h" #include "py/misc.h"
#include "py/mpstate.h" #include "py/mpstate.h"
@ -56,6 +57,17 @@ void ble_drv_reset() {
sd_flash_operation_status = SD_FLASH_OPERATION_DONE; sd_flash_operation_status = SD_FLASH_OPERATION_DONE;
} }
void ble_drv_remove_heap_handlers(void) {
ble_drv_evt_handler_entry_t *it = MP_STATE_VM(ble_drv_evt_handler_entries);
while (it != NULL) {
// If the param is on the heap, then delete the handler.
if (HEAP_PTR(it->param)) {
ble_drv_remove_event_handler(it->func, it->param);
}
it = it->next;
}
}
void ble_drv_add_event_handler_entry(ble_drv_evt_handler_entry_t *entry, ble_drv_evt_handler_t func, void *param) { void ble_drv_add_event_handler_entry(ble_drv_evt_handler_entry_t *entry, ble_drv_evt_handler_t func, void *param) {
ble_drv_evt_handler_entry_t *it = MP_STATE_VM(ble_drv_evt_handler_entries); ble_drv_evt_handler_entry_t *it = MP_STATE_VM(ble_drv_evt_handler_entries);
while (it != NULL) { while (it != NULL) {

View File

@ -67,6 +67,7 @@ typedef struct ble_drv_evt_handler_entry {
} ble_drv_evt_handler_entry_t; } ble_drv_evt_handler_entry_t;
void ble_drv_reset(void); void ble_drv_reset(void);
void ble_drv_remove_heap_handlers(void);
void ble_drv_add_event_handler(ble_drv_evt_handler_t func, void *param); void ble_drv_add_event_handler(ble_drv_evt_handler_t func, void *param);
void ble_drv_remove_event_handler(ble_drv_evt_handler_t func, void *param); void ble_drv_remove_event_handler(ble_drv_evt_handler_t func, void *param);

View File

@ -380,9 +380,11 @@ mp_int_t common_hal_bleio_packet_buffer_write(bleio_packet_buffer_obj_t *self, c
!mp_hal_is_interrupted()) { !mp_hal_is_interrupted()) {
RUN_BACKGROUND_TASKS; RUN_BACKGROUND_TASKS;
} }
if (mp_hal_is_interrupted()) {
return -1;
}
} }
if (self->conn_handle == BLE_CONN_HANDLE_INVALID || if (self->conn_handle == BLE_CONN_HANDLE_INVALID) {
mp_hal_is_interrupted()) {
return -1; return -1;
} }

View File

@ -94,6 +94,17 @@ void check_sec_status(uint8_t sec_status) {
} }
} }
void bleio_user_reset() {
// Stop any user scanning or advertising.
common_hal_bleio_adapter_stop_scan(&common_hal_bleio_adapter_obj);
common_hal_bleio_adapter_stop_advertising(&common_hal_bleio_adapter_obj);
ble_drv_remove_heap_handlers();
// Maybe start advertising the BLE workflow.
supervisor_bluetooth_background();
}
// Turn off BLE on a reset or reload. // Turn off BLE on a reset or reload.
void bleio_reset() { void bleio_reset() {
// Set this explicitly to save data. // Set this explicitly to save data.

View File

@ -246,10 +246,6 @@ void reset_port(void) {
timers_reset(); timers_reset();
#if CIRCUITPY_BLEIO
bleio_reset();
#endif
#if CIRCUITPY_WATCHDOG #if CIRCUITPY_WATCHDOG
watchdog_reset(); watchdog_reset();
#endif #endif

View File

@ -30,7 +30,14 @@
#include "bindings/rp2pio/StateMachine.h" #include "bindings/rp2pio/StateMachine.h"
#include "bindings/rp2pio/__init__.h" #include "bindings/rp2pio/__init__.h"
//| """Hardware interface to RP2 series' programmable IO (PIO) peripheral.""" //| """Hardware interface to RP2 series' programmable IO (PIO) peripheral.
//|
//| .. note:: This module is intended to be used with the `adafruit_pioasm library
//| <https://github.com/adafruit/Adafruit_CircuitPython_PIOASM>`_. For an
//| introduction and guide to working with PIO in CircuitPython, see `this
//| Learn guide <https://learn.adafruit.com/intro-to-rp2040-pio-with-circuitpython>`_.
//|
//| """
//| //|
//| def pins_are_sequential(pins: List[microcontroller.Pin]) -> bool: //| def pins_are_sequential(pins: List[microcontroller.Pin]) -> bool:

View File

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

View File

@ -0,0 +1,4 @@
#define MICROPY_HW_BOARD_NAME "RP2.65-F"
#define MICROPY_HW_MCU_NAME "rp2040"
#define MICROPY_HW_NEOPIXEL (&pin_GPIO25)

View File

@ -0,0 +1,17 @@
# pid.codes ZR
USB_VID = 0x1209
USB_PID = 0x5a52
USB_PRODUCT = "RP2.65-F"
USB_MANUFACTURER = "ZRichard"
CHIP_VARIANT = RP2040
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q64JVxQ,W25Q128JVxQ"
CIRCUITPY__EVE = 1
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_MIDI

View File

@ -0,0 +1,4 @@
// Put board-specific pico-sdk definitions here. This file must exist.
// Allow extra time for xosc to start.
#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64

View File

@ -0,0 +1,32 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_ROW0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_COL0), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_ROW1), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_COL1), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_ROW2), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_COL2), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_ROW3), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_COL3), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_ROW4), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_COL4), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_ROW5), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_COL5), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_ROW6), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_COL6), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_ROW7), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_COL7), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_ROW8), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_ROW9), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_RV1), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_RV2), MP_ROM_PTR(&pin_GPIO28) },
{ MP_ROM_QSTR(MP_QSTR_RV3), MP_ROM_PTR(&pin_GPIO29) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -14,6 +14,7 @@ EXTERNAL_FLASH_DEVICES = GD25Q16C
CIRCUITPY_NVM = 1 CIRCUITPY_NVM = 1
CIRCUITPY_BITMAPTOOLS = 0 CIRCUITPY_BITMAPTOOLS = 0
CIRCUITPY_BLEIO_HCI = 0 CIRCUITPY_BLEIO_HCI = 0
CIRCUITPY_ONEWIREIO = 0
CIRCUITPY_ZLIB = 0 CIRCUITPY_ZLIB = 0
MCU_SERIES = F4 MCU_SERIES = F4

View File

@ -35,11 +35,16 @@
#define WORDS_PER_BLOCK ((MICROPY_BYTES_PER_GC_BLOCK) / MP_BYTES_PER_OBJ_WORD) #define WORDS_PER_BLOCK ((MICROPY_BYTES_PER_GC_BLOCK) / MP_BYTES_PER_OBJ_WORD)
#define BYTES_PER_BLOCK (MICROPY_BYTES_PER_GC_BLOCK) #define BYTES_PER_BLOCK (MICROPY_BYTES_PER_GC_BLOCK)
#define HEAP_PTR(ptr) ( \
MP_STATE_MEM(gc_pool_start) != 0 /* Not on the heap if it isn't inited */ \
&& ptr >= (void *)MP_STATE_MEM(gc_pool_start) /* must be above start of pool */ \
&& ptr < (void *)MP_STATE_MEM(gc_pool_end) /* must be below end of pool */ \
)
// ptr should be of type void* // ptr should be of type void*
#define VERIFY_PTR(ptr) ( \ #define VERIFY_PTR(ptr) ( \
((uintptr_t)(ptr) & (BYTES_PER_BLOCK - 1)) == 0 /* must be aligned on a block */ \ ((uintptr_t)(ptr) & (BYTES_PER_BLOCK - 1)) == 0 /* must be aligned on a block */ \
&& ptr >= (void *)MP_STATE_MEM(gc_pool_start) /* must be above start of pool */ \ && HEAP_PTR(ptr) \
&& ptr < (void *)MP_STATE_MEM(gc_pool_end) /* must be below end of pool */ \
) )
void gc_init(void *start, void *end); void gc_init(void *start, void *end);

View File

@ -140,7 +140,7 @@ const char *mp_common_errno_to_str(mp_obj_t errno_val, char *buf, size_t len) {
const compressed_string_t *desc = NULL; const compressed_string_t *desc = NULL;
switch (MP_OBJ_SMALL_INT_VALUE(errno_val)) { switch (MP_OBJ_SMALL_INT_VALUE(errno_val)) {
case EPERM: case EPERM:
desc = MP_ERROR_TEXT("Permission denied"); desc = MP_ERROR_TEXT("Operation not permitted");
break; break;
case ENOENT: case ENOENT:
desc = MP_ERROR_TEXT("No such file/directory"); desc = MP_ERROR_TEXT("No such file/directory");
@ -155,7 +155,7 @@ const char *mp_common_errno_to_str(mp_obj_t errno_val, char *buf, size_t len) {
desc = MP_ERROR_TEXT("File exists"); desc = MP_ERROR_TEXT("File exists");
break; break;
case ENODEV: case ENODEV:
desc = MP_ERROR_TEXT("Unsupported operation"); desc = MP_ERROR_TEXT("No such device");
break; break;
case EINVAL: case EINVAL:
desc = MP_ERROR_TEXT("Invalid argument"); desc = MP_ERROR_TEXT("Invalid argument");

View File

@ -54,6 +54,11 @@ extern const mp_obj_type_t mp_type_bleio_BluetoothError;
extern const mp_obj_type_t mp_type_bleio_RoleError; extern const mp_obj_type_t mp_type_bleio_RoleError;
extern const mp_obj_type_t mp_type_bleio_SecurityError; extern const mp_obj_type_t mp_type_bleio_SecurityError;
// Resets all user created BLE state in preparation for the heap disappearing.
// It will maintain BLE workflow and connections.
void bleio_user_reset(void);
// Completely resets the BLE stack including BLE connections.
void bleio_reset(void); void bleio_reset(void);
extern mp_obj_t bleio_set_adapter(mp_obj_t adapter_obj); extern mp_obj_t bleio_set_adapter(mp_obj_t adapter_obj);

View File

@ -55,6 +55,9 @@
//| //|
//| For both light sleep and deep sleep, if CircuitPython is connected to a host computer, //| For both light sleep and deep sleep, if CircuitPython is connected to a host computer,
//| maintaining the connection takes priority and power consumption may not be reduced. //| maintaining the connection takes priority and power consumption may not be reduced.
//|
//| For more information about working with alarms and light/deep sleep in CircuitPython,
//| see `this Learn guide <https://learn.adafruit.com/deep-sleep-with-circuitpython>`_.
//| """ //| """
//| sleep_memory: SleepMemory //| sleep_memory: SleepMemory

View File

@ -59,12 +59,11 @@
//| :py:meth:`~analogio.AnalogIn.deinit` the hardware. The last step is optional //| :py:meth:`~analogio.AnalogIn.deinit` the hardware. The last step is optional
//| because CircuitPython will do it automatically after the program finishes. //| because CircuitPython will do it automatically after the program finishes.
//| //|
//| For the essentials of `analogio`, see the CircuitPython Essentials //| For the essentials of `analogio`, see the `CircuitPython Essentials
//| Learn guide: //| Learn guide <https://learn.adafruit.com/circuitpython-essentials/circuitpython-analog-in>`_
//| https://learn.adafruit.com/circuitpython-essentials/circuitpython-analog-in
//| //|
//| For more information on using `analogio`, see this additional Learn guide: //| For more information on using `analogio`, see `this additional Learn guide
//| https://learn.adafruit.com/circuitpython-basics-analog-inputs-and-outputs //| <https://learn.adafruit.com/circuitpython-basics-analog-inputs-and-outputs>`_
//| """ //| """
//| //|

View File

@ -31,7 +31,12 @@
#include "shared-bindings/audiomp3/MP3Decoder.h" #include "shared-bindings/audiomp3/MP3Decoder.h"
//| """Support for MP3-compressed audio files""" //| """Support for MP3-compressed audio files
//|
//| For more infomration about working with MP3 files in CircuitPython,
//| see `this CircuitPython Essentials Learn guide page
//| <https://learn.adafruit.com/circuitpython-essentials/circuitpython-mp3-audio>`_.
//| """
//| //|
STATIC const mp_rom_map_elem_t audiomp3_module_globals_table[] = { STATIC const mp_rom_map_elem_t audiomp3_module_globals_table[] = {

View File

@ -43,7 +43,13 @@
#include "extmod/vfs_posix.h" #include "extmod/vfs_posix.h"
#endif #endif
//| """Collection of bitmap manipulation tools""" //| """Collection of bitmap manipulation tools
//|
//| .. note:: If you're looking for information about displaying bitmaps on
//| screens in CircuitPython, see `this Learn guide
//| <https://learn.adafruit.com/circuitpython-display-support-using-displayio>`_
//| for information about using the :py:mod:`displayio` module.
//| """
//| //|
STATIC int16_t validate_point(mp_obj_t point, int16_t default_value) { STATIC int16_t validate_point(mp_obj_t point, int16_t default_value) {

View File

@ -47,9 +47,9 @@
//| the default pins and settings. For more information about serial communcication //| the default pins and settings. For more information about serial communcication
//| in CircuitPython, see the :mod:`busio`. //| in CircuitPython, see the :mod:`busio`.
//| //|
//| For more information regarding the typical usage of :py:mod:`board`, refer to the CircuitPython //| For more information regarding the typical usage of :py:mod:`board`, refer to the `CircuitPython
//| Essentials Learn guide: //| Essentials Learn guide
//| https://learn.adafruit.com/circuitpython-essentials/circuitpython-pins-and-modules //| <https://learn.adafruit.com/circuitpython-essentials/circuitpython-pins-and-modules>`_
//| //|
//| .. warning:: The board module varies by board. The APIs documented here may or may not be //| .. warning:: The board module varies by board. The APIs documented here may or may not be
//| available on a specific board.""" //| available on a specific board."""

View File

@ -73,12 +73,11 @@
//| led.value = False //| led.value = False
//| time.sleep(0.1) //| time.sleep(0.1)
//| //|
//| For the essentials of `digitalio`, see the CircuitPython Essentials //| For the essentials of `digitalio`, see the `CircuitPython Essentials
//| Learn guide: //| Learn guide <https://learn.adafruit.com/circuitpython-essentials/circuitpython-digital-in-out>`_
//| https://learn.adafruit.com/circuitpython-essentials/circuitpython-digital-in-out
//| //|
//| For more information on using `digitalio`, see this additional Learn guide: //| For more information on using `digitalio`, see `this additional Learn guide
//| https://learn.adafruit.com/circuitpython-digital-inputs-and-outputs //| <https://learn.adafruit.com/circuitpython-digital-inputs-and-outputs>`_
//| """ //| """
STATIC const mp_rom_map_elem_t digitalio_module_globals_table[] = { STATIC const mp_rom_map_elem_t digitalio_module_globals_table[] = {

View File

@ -170,14 +170,20 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a
mp_raise_ValueError(translate("Display rotation must be in 90 degree increments")); mp_raise_ValueError(translate("Display rotation must be in 90 degree increments"));
} }
const bool sh1107_addressing = args[ARG_SH1107_addressing].u_bool;
const mp_int_t color_depth = args[ARG_color_depth].u_int;
if (sh1107_addressing && color_depth != 1) {
mp_raise_ValueError_varg(translate("%q must be 1 when %q is True"), MP_QSTR_color_depth, MP_QSTR_SH1107_addressing);
}
primary_display_t *disp = allocate_display_or_raise(); primary_display_t *disp = allocate_display_or_raise();
displayio_display_obj_t *self = &disp->display; displayio_display_obj_t *self = &disp->display;
;
self->base.type = &displayio_display_type; self->base.type = &displayio_display_type;
common_hal_displayio_display_construct( common_hal_displayio_display_construct(
self, self,
display_bus, args[ARG_width].u_int, args[ARG_height].u_int, args[ARG_colstart].u_int, args[ARG_rowstart].u_int, rotation, display_bus, args[ARG_width].u_int, args[ARG_height].u_int, args[ARG_colstart].u_int, args[ARG_rowstart].u_int, rotation,
args[ARG_color_depth].u_int, args[ARG_grayscale].u_bool, color_depth, args[ARG_grayscale].u_bool,
args[ARG_pixels_in_byte_share_row].u_bool, args[ARG_pixels_in_byte_share_row].u_bool,
args[ARG_bytes_per_cell].u_bool, args[ARG_bytes_per_cell].u_bool,
args[ARG_reverse_pixels_in_byte].u_bool, args[ARG_reverse_pixels_in_byte].u_bool,
@ -194,7 +200,7 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a
args[ARG_auto_refresh].u_bool, args[ARG_auto_refresh].u_bool,
args[ARG_native_frames_per_second].u_int, args[ARG_native_frames_per_second].u_int,
args[ARG_backlight_on_high].u_bool, args[ARG_backlight_on_high].u_bool,
args[ARG_SH1107_addressing].u_bool sh1107_addressing
); );
return self; return self;

View File

@ -51,9 +51,9 @@
//| The `displayio` module contains classes to manage display output //| The `displayio` module contains classes to manage display output
//| including synchronizing with refresh rates and partial updating. //| including synchronizing with refresh rates and partial updating.
//| //|
//| For more a more thorugh explanation and guide for using `displayio`, please //| For more a more thorough explanation and guide for using `displayio`, please
//| refer to this Learn guide: //| refer to `this Learn guide
//| https://learn.adafruit.com/circuitpython-display-support-using-displayio //| <https://learn.adafruit.com/circuitpython-display-support-using-displayio>`_.
//| """ //| """
//| //|

View File

@ -33,7 +33,15 @@
#include "shared-bindings/fontio/BuiltinFont.h" #include "shared-bindings/fontio/BuiltinFont.h"
#include "shared-bindings/fontio/Glyph.h" #include "shared-bindings/fontio/Glyph.h"
//| """Core font related data structures""" //| """Core font related data structures
//|
//| .. note:: This module is intended only for low-level usage. For working with
//| fonts in CircuitPython see the `adafruit_bitmap_font library
//| <https://github.com/adafruit/Adafruit_CircuitPython_Bitmap_Font>`_.
//| For information on creating custom fonts for use in CircuitPython, see
//| `this Learn guide <https://learn.adafruit.com/custom-fonts-for-pyportal-circuitpython-display>`_
//|
//| """
//| //|
STATIC const mp_rom_map_elem_t fontio_module_globals_table[] = { STATIC const mp_rom_map_elem_t fontio_module_globals_table[] = {

View File

@ -43,8 +43,9 @@
//| """Pin references and cpu functionality //| """Pin references and cpu functionality
//| //|
//| The `microcontroller` module defines the pins from the perspective of the //| The `microcontroller` module defines the pins and other bare-metal hardware
//| microcontroller. See :py:mod:`board` for board-specific pin mappings.""" //| from the perspective of the microcontroller. See :py:mod:`board` for
//| board-specific pin mappings."""
//| //|
//| from nvm import ByteArray //| from nvm import ByteArray
//| from watchdog import WatchDogTimer //| from watchdog import WatchDogTimer

View File

@ -95,13 +95,13 @@ STATIC void check_for_deinit(digitalio_digitalinout_obj_t *self) {
//| //|
//| .. note:: //| .. note::
//| //|
//| This library is typically not used by user level code. //| This module is typically not used by user level code.
//| //|
//| For more information on actually using NeoPixels, refer to the CircuitPython //| For more information on actually using NeoPixels, refer to the `CircuitPython
//| Essentials Learn guide: https://learn.adafruit.com/circuitpython-essentials/circuitpython-neopixel //| Essentials Learn guide <https://learn.adafruit.com/circuitpython-essentials/circuitpython-neopixel>`_
//| //|
//| For a much more thorough guide about using NeoPixels, refer to the Adadfruit NeoPixel Überguide: //| For a much more thorough guide about using NeoPixels, refer to the `Adafruit NeoPixel Überguide
//| https://learn.adafruit.com/adafruit-neopixel-uberguide //| <https://learn.adafruit.com/adafruit-neopixel-uberguide>`_.
//| //|
//| """ //| """
//| //|

View File

@ -59,9 +59,8 @@
//| hardware after program completion. Use ``deinit()`` or a ``with`` statement //| hardware after program completion. Use ``deinit()`` or a ``with`` statement
//| to do it yourself. //| to do it yourself.
//| //|
//| For the essentials of `pwmio`, see the CircuitPython Essentials //| For the essentials of `pwmio`, see the `CircuitPython Essentials
//| Learn guide: //| Learn guide <https://learn.adafruit.com/circuitpython-essentials/circuitpython-pwm>`_.
//| https://learn.adafruit.com/circuitpython-essentials/circuitpython-pwm
//| """ //| """
//| //|

View File

@ -31,9 +31,15 @@
#include "py/obj.h" #include "py/obj.h"
#include "py/enum.h" #include "py/enum.h"
//| """`qrio` module. //| """Low-level QR code decoding
//| //|
//| Provides the `QRDecoder` object.""" //| Provides the `QRDecoder` object used for decoding QR codes. For more
//| information about working with QR codes, see
//| `this Learn guide <https://learn.adafruit.com/scan-qr-codes-with-circuitpython>`_.
//|
//| .. note:: This module only handles decoding QR codes. If you are looking
//| to generate a QR code, use the
//| `adafruit_miniqr library <https://github.com/adafruit/Adafruit_CircuitPython_miniQR>`_"""
//| //|
STATIC const mp_rom_map_elem_t qrio_module_globals_table[] = { STATIC const mp_rom_map_elem_t qrio_module_globals_table[] = {

View File

@ -42,9 +42,9 @@
//| CircuitPython does not have an OS, so this module provides this functionality //| CircuitPython does not have an OS, so this module provides this functionality
//| directly. //| directly.
//| For more information regarding using the `storage` module, refer to the CircuitPython //| For more information regarding using the `storage` module, refer to the `CircuitPython
//| Essentials Learn guide: //| Essentials Learn guide
//| https://learn.adafruit.com/circuitpython-essentials/circuitpython-storage //| <https://learn.adafruit.com/circuitpython-essentials/circuitpython-storage>`_.
//| """ //| """
//| //|

View File

@ -4,7 +4,7 @@ Module Support Matrix - Which Modules Are Available on Which Boards
=================================================================== ===================================================================
The following table lists the available built-in modules for each CircuitPython The following table lists the available built-in modules for each CircuitPython
capable board. capable board, as well as each :term:`frozen module` included on it.
.. raw:: html .. raw:: html
@ -21,6 +21,14 @@ capable board.
{% for key, value in support_matrix|dictsort %} {% for key, value in support_matrix|dictsort %}
{{ '.. _' ~ key|replace(" ", "-") ~ ':' }} {{ '.. _' ~ key|replace(" ", "-") ~ ':' }}
* - {{ key }} * - {{ key }}
- {{ ':py:mod:`' ~ value|join("`, :py:mod:`") ~ '`' }} - {{ ':py:mod:`' ~ value[0]|join("`, :py:mod:`") ~ '`' }}
{% for module in value[1] %}\
{% if loop.index == 1 %}**Frozen Modules:** {% endif %}\
{% if loop.index > 1 %}, {% endif %}\
{% if module[1] %}{{ '`' ~ module[0] ~ ' <' ~ module[1] ~ '>`__' }}\
{% else %}{{ '`' ~ module[0] ~ ' <#>`__' }}\
{% endif %}\
{% endfor %}
{% endfor %} {% endfor %}

View File

@ -38,7 +38,12 @@
//| """Displays text in a TileGrid //| """Displays text in a TileGrid
//| //|
//| The `terminalio` module contains classes to display a character stream on a display. The built //| The `terminalio` module contains classes to display a character stream on a display. The built
//| in font is available as ``terminalio.FONT``.""" //| in font is available as ``terminalio.FONT``.
//|
//| .. note:: This module does not give access to the
//| `REPL <https://learn.adafruit.com/welcome-to-circuitpython/interacting-with-the-serial-console>`_.
//|
//| """
//| //|
//| FONT: fontio.BuiltinFont //| FONT: fontio.BuiltinFont
//| """The built in font""" //| """The built in font"""

View File

@ -78,6 +78,7 @@ vectorio_draw_protocol_impl_t vectorio_vector_shape_draw_protocol_impl = {
.draw_update_transform = (draw_update_transform_fun)vectorio_vector_shape_update_transform, .draw_update_transform = (draw_update_transform_fun)vectorio_vector_shape_update_transform,
.draw_finish_refresh = (draw_finish_refresh_fun)vectorio_vector_shape_finish_refresh, .draw_finish_refresh = (draw_finish_refresh_fun)vectorio_vector_shape_finish_refresh,
.draw_get_refresh_areas = (draw_get_refresh_areas_fun)vectorio_vector_shape_get_refresh_areas, .draw_get_refresh_areas = (draw_get_refresh_areas_fun)vectorio_vector_shape_get_refresh_areas,
.draw_set_dirty = (draw_set_dirty_fun)common_hal_vectorio_vector_shape_set_dirty,
}; };
// Stub checker does not approve of these shared properties. // Stub checker does not approve of these shared properties.

View File

@ -17,6 +17,7 @@ typedef bool (*draw_fill_area_fun)(mp_obj_t draw_protocol_self, const _displayio
typedef bool (*draw_get_dirty_area_fun)(mp_obj_t draw_protocol_self, displayio_area_t *current_dirty_area); typedef bool (*draw_get_dirty_area_fun)(mp_obj_t draw_protocol_self, displayio_area_t *current_dirty_area);
typedef void (*draw_update_transform_fun)(mp_obj_t draw_protocol_self, displayio_buffer_transform_t *group_transform); typedef void (*draw_update_transform_fun)(mp_obj_t draw_protocol_self, displayio_buffer_transform_t *group_transform);
typedef void (*draw_finish_refresh_fun)(mp_obj_t draw_protocol_self); typedef void (*draw_finish_refresh_fun)(mp_obj_t draw_protocol_self);
typedef void (*draw_set_dirty_fun)(mp_obj_t draw_protocol_self);
typedef displayio_area_t *(*draw_get_refresh_areas_fun)(mp_obj_t draw_protocol_self, displayio_area_t *tail); typedef displayio_area_t *(*draw_get_refresh_areas_fun)(mp_obj_t draw_protocol_self, displayio_area_t *tail);
typedef struct _vectorio_draw_protocol_impl_t { typedef struct _vectorio_draw_protocol_impl_t {
@ -25,6 +26,7 @@ typedef struct _vectorio_draw_protocol_impl_t {
draw_update_transform_fun draw_update_transform; draw_update_transform_fun draw_update_transform;
draw_finish_refresh_fun draw_finish_refresh; draw_finish_refresh_fun draw_finish_refresh;
draw_get_refresh_areas_fun draw_get_refresh_areas; draw_get_refresh_areas_fun draw_get_refresh_areas;
draw_set_dirty_fun draw_set_dirty;
} vectorio_draw_protocol_impl_t; } vectorio_draw_protocol_impl_t;
// Draw protocol // Draw protocol

View File

@ -74,7 +74,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t *self,
self->first_manual_refresh = !auto_refresh; self->first_manual_refresh = !auto_refresh;
self->data_as_commands = data_as_commands; self->data_as_commands = data_as_commands;
self->backlight_on_high = backlight_on_high; self->backlight_on_high = backlight_on_high;
self->SH1107_addressing = SH1107_addressing; self->SH1107_addressing = SH1107_addressing && color_depth == 1;
self->native_frames_per_second = native_frames_per_second; self->native_frames_per_second = native_frames_per_second;
self->native_ms_per_frame = 1000 / native_frames_per_second; self->native_ms_per_frame = 1000 / native_frames_per_second;

View File

@ -66,6 +66,14 @@ void common_hal_displayio_group_set_hidden(displayio_group_t *self, bool hidden)
displayio_group_set_hidden_by_parent(layer, hidden); displayio_group_set_hidden_by_parent(layer, hidden);
continue; continue;
} }
#if CIRCUITPY_VECTORIO
const vectorio_draw_protocol_t *draw_protocol = mp_proto_get(MP_QSTR_protocol_draw, self->members->items[i]);
if (draw_protocol != NULL) {
layer = draw_protocol->draw_get_protocol_self(self->members->items[i]);
draw_protocol->draw_protocol_impl->draw_set_dirty(layer);
continue;
}
#endif
} }
} }
@ -92,6 +100,14 @@ void displayio_group_set_hidden_by_parent(displayio_group_t *self, bool hidden)
displayio_group_set_hidden_by_parent(layer, hidden); displayio_group_set_hidden_by_parent(layer, hidden);
continue; continue;
} }
#if CIRCUITPY_VECTORIO
const vectorio_draw_protocol_t *draw_protocol = mp_proto_get(MP_QSTR_protocol_draw, self->members->items[i]);
if (draw_protocol != NULL) {
layer = draw_protocol->draw_get_protocol_self(self->members->items[i]);
draw_protocol->draw_protocol_impl->draw_set_dirty(layer);
continue;
}
#endif
} }
} }
@ -358,33 +374,35 @@ void displayio_group_construct(displayio_group_t *self, mp_obj_list_t *members,
bool displayio_group_fill_area(displayio_group_t *self, const _displayio_colorspace_t *colorspace, const displayio_area_t *area, uint32_t *mask, uint32_t *buffer) { bool displayio_group_fill_area(displayio_group_t *self, const _displayio_colorspace_t *colorspace, const displayio_area_t *area, uint32_t *mask, uint32_t *buffer) {
// Track if any of the layers finishes filling in the given area. We can ignore any remaining // Track if any of the layers finishes filling in the given area. We can ignore any remaining
// layers at that point. // layers at that point.
for (int32_t i = self->members->len - 1; i >= 0; i--) { if (self->hidden == false) {
mp_obj_t layer; for (int32_t i = self->members->len - 1; i >= 0; i--) {
#if CIRCUITPY_VECTORIO mp_obj_t layer;
const vectorio_draw_protocol_t *draw_protocol = mp_proto_get(MP_QSTR_protocol_draw, self->members->items[i]); #if CIRCUITPY_VECTORIO
if (draw_protocol != NULL) { const vectorio_draw_protocol_t *draw_protocol = mp_proto_get(MP_QSTR_protocol_draw, self->members->items[i]);
layer = draw_protocol->draw_get_protocol_self(self->members->items[i]); if (draw_protocol != NULL) {
if (draw_protocol->draw_protocol_impl->draw_fill_area(layer, colorspace, area, mask, buffer)) { layer = draw_protocol->draw_get_protocol_self(self->members->items[i]);
return true; if (draw_protocol->draw_protocol_impl->draw_fill_area(layer, colorspace, area, mask, buffer)) {
return true;
}
continue;
} }
continue; #endif
} layer = mp_obj_cast_to_native_base(
#endif self->members->items[i], &displayio_tilegrid_type);
layer = mp_obj_cast_to_native_base( if (layer != MP_OBJ_NULL) {
self->members->items[i], &displayio_tilegrid_type); if (displayio_tilegrid_fill_area(layer, colorspace, area, mask, buffer)) {
if (layer != MP_OBJ_NULL) { return true;
if (displayio_tilegrid_fill_area(layer, colorspace, area, mask, buffer)) { }
return true; continue;
} }
continue; layer = mp_obj_cast_to_native_base(
} self->members->items[i], &displayio_group_type);
layer = mp_obj_cast_to_native_base( if (layer != MP_OBJ_NULL) {
self->members->items[i], &displayio_group_type); if (displayio_group_fill_area(layer, colorspace, area, mask, buffer)) {
if (layer != MP_OBJ_NULL) { return true;
if (displayio_group_fill_area(layer, colorspace, area, mask, buffer)) { }
return true; continue;
} }
continue;
} }
} }
return false; return false;

View File

@ -325,7 +325,6 @@ STATIC uint8_t _process_write(const uint8_t *raw_buf, size_t command_len) {
if (chunk_size == 0) { if (chunk_size == 0) {
// Don't reload until everything is written out of the packet buffer. // Don't reload until everything is written out of the packet buffer.
common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer); common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer);
autoreload_trigger();
return ANY_COMMAND; return ANY_COMMAND;
} }
@ -382,7 +381,6 @@ STATIC uint8_t _process_write_data(const uint8_t *raw_buf, size_t command_len) {
#endif #endif
// Don't reload until everything is written out of the packet buffer. // Don't reload until everything is written out of the packet buffer.
common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer); common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer);
autoreload_trigger();
return ANY_COMMAND; return ANY_COMMAND;
} }
return WRITE_DATA; return WRITE_DATA;
@ -463,7 +461,6 @@ STATIC uint8_t _process_delete(const uint8_t *raw_buf, size_t command_len) {
if (result == FR_OK) { if (result == FR_OK) {
// Don't reload until everything is written out of the packet buffer. // Don't reload until everything is written out of the packet buffer.
common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer); common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer);
autoreload_trigger();
} }
return ANY_COMMAND; return ANY_COMMAND;
} }
@ -517,7 +514,6 @@ STATIC uint8_t _process_mkdir(const uint8_t *raw_buf, size_t command_len) {
if (result == FR_OK) { if (result == FR_OK) {
// Don't reload until everything is written out of the packet buffer. // Don't reload until everything is written out of the packet buffer.
common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer); common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer);
autoreload_trigger();
} }
return ANY_COMMAND; return ANY_COMMAND;
} }
@ -664,7 +660,6 @@ STATIC uint8_t _process_move(const uint8_t *raw_buf, size_t command_len) {
if (result == FR_OK) { if (result == FR_OK) {
// Don't reload until everything is written out of the packet buffer. // Don't reload until everything is written out of the packet buffer.
common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer); common_hal_bleio_packet_buffer_flush(&_transfer_packet_buffer);
autoreload_trigger();
} }
return ANY_COMMAND; return ANY_COMMAND;
} }
@ -740,6 +735,14 @@ void supervisor_bluetooth_file_transfer_background(void) {
} }
if (next_command == ANY_COMMAND) { if (next_command == ANY_COMMAND) {
autoreload_resume(AUTORELOAD_SUSPEND_BLE); autoreload_resume(AUTORELOAD_SUSPEND_BLE);
// Trigger a reload if the command may have mutated the file system.
if (current_state == WRITE ||
current_state == WRITE_DATA ||
current_state == DELETE ||
current_state == MKDIR ||
current_state == MOVE) {
autoreload_trigger();
}
} }
} }
running = false; running = false;

View File

@ -13,14 +13,15 @@ import base64
from datetime import date from datetime import date
from sh.contrib import git from sh.contrib import git
sys.path.append("../docs")
import shared_bindings_matrix
sys.path.append("adabot") sys.path.append("adabot")
import adabot.github_requests as github import adabot.github_requests as github
from shared_bindings_matrix import SUPPORTED_PORTS sys.path.append("../docs")
from shared_bindings_matrix import aliases_by_board from shared_bindings_matrix import (
SUPPORTED_PORTS,
aliases_by_board,
support_matrix_by_board,
)
BIN = ("bin",) BIN = ("bin",)
UF2 = ("uf2",) UF2 = ("uf2",)
@ -75,6 +76,7 @@ extension_by_board = {
"espressif_esp32c3_devkitm_1_n4": BIN, "espressif_esp32c3_devkitm_1_n4": BIN,
"lilygo_ttgo_t-01c3": BIN, "lilygo_ttgo_t-01c3": BIN,
"microdev_micro_c3": BIN, "microdev_micro_c3": BIN,
"lilygo_ttgo_t-oi-plus": BIN,
# broadcom # broadcom
"raspberrypi_zero": KERNEL_IMG, "raspberrypi_zero": KERNEL_IMG,
"raspberrypi_zero_w": KERNEL_IMG, "raspberrypi_zero_w": KERNEL_IMG,
@ -124,20 +126,11 @@ def get_board_mapping():
extensions = extension_by_port[port] extensions = extension_by_port[port]
extensions = extension_by_board.get(board_path.name, extensions) extensions = extension_by_board.get(board_path.name, extensions)
aliases = aliases_by_board.get(board_path.name, []) aliases = aliases_by_board.get(board_path.name, [])
frozen_libraries = []
with open(os.path.join(board_path, "mpconfigboard.mk")) as mpconfig:
frozen_lines = [
line for line in mpconfig if line.startswith("FROZEN_MPY_DIRS")
]
frozen_libraries.extend(
[line[line.rfind("/") + 1 :].strip() for line in frozen_lines]
)
boards[board_id] = { boards[board_id] = {
"port": port, "port": port,
"extensions": extensions, "extensions": extensions,
"download_count": 0, "download_count": 0,
"aliases": aliases, "aliases": aliases,
"frozen_libraries": frozen_libraries,
} }
for alias in aliases: for alias in aliases:
boards[alias] = { boards[alias] = {
@ -284,7 +277,7 @@ def generate_download_info():
languages = get_languages() languages = get_languages()
support_matrix = shared_bindings_matrix.support_matrix_by_board(use_branded_name=False) support_matrix = support_matrix_by_board(use_branded_name=False)
new_stable = "-" not in new_tag new_stable = "-" not in new_tag
@ -321,10 +314,10 @@ def generate_download_info():
new_version = { new_version = {
"stable": new_stable, "stable": new_stable,
"version": new_tag, "version": new_tag,
"modules": support_matrix[alias], "modules": support_matrix[alias][0],
"languages": languages, "languages": languages,
"extensions": board_info["extensions"], "extensions": board_info["extensions"],
"frozen_libraries": board_info["frozen_libraries"], "frozen_libraries": [frozen[0] for frozen in support_matrix[alias][1]],
} }
current_info[alias]["downloads"] = alias_info["download_count"] current_info[alias]["downloads"] = alias_info["download_count"]
current_info[alias]["versions"].append(new_version) current_info[alias]["versions"].append(new_version)

View File

@ -68,14 +68,15 @@ submodules = []
if target == "test": if target == "test":
submodules = ["extmod/", "lib/", "tools/", "extmod/ulab", "lib/berkeley-db-1.xx"] submodules = ["extmod/", "lib/", "tools/", "extmod/ulab", "lib/berkeley-db-1.xx"]
elif target == "docs": elif target == "docs":
submodules = ["extmod/ulab/"] # used in .readthedocs.yml to generate RTD
submodules = ["extmod/ulab/", "frozen/"]
elif target == "mpy-cross-mac": elif target == "mpy-cross-mac":
submodules = ["tools/"] # for huffman submodules = ["tools/"] # for huffman
elif target == "windows": elif target == "windows":
# This builds one board from a number of ports so fill out a bunch of submodules # This builds one board from a number of ports so fill out a bunch of submodules
submodules = ["extmod/", "lib/", "tools/", "ports/", "data/nvm.toml/"] submodules = ["extmod/", "lib/", "tools/", "ports/", "data/nvm.toml/"]
elif target == "website": elif target == "website":
submodules = ["tools/adabot/"] submodules = ["tools/adabot/", "frozen/"]
else: else:
p = list(pathlib.Path(".").glob(f"ports/*/boards/{target}/mpconfigboard.mk")) p = list(pathlib.Path(".").glob(f"ports/*/boards/{target}/mpconfigboard.mk"))
if not p: if not p: